diff --git a/Cargo.lock b/Cargo.lock index 14bfe30afbd..7e9836d48ec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,7 +17,6 @@ name = "actor-system-error" version = "1.10.0" dependencies = [ "derive_more 2.1.1", - "gear-workspace-hack", ] [[package]] @@ -2267,7 +2266,6 @@ dependencies = [ "gbuiltin-bls381", "gbuiltin-eth-bridge", "gear-core", - "gear-workspace-hack", "gprimitives", "log", "parity-scale-codec", @@ -2422,7 +2420,6 @@ dependencies = [ "anyhow", "gear-core", "gear-wasm-instrument", - "gear-workspace-hack", "log", "tracing-subscriber", "wasmer", @@ -2450,7 +2447,6 @@ dependencies = [ "colored", "etc", "gear-wasm-optimizer", - "gear-workspace-hack", "glob", "gtest", "serde", @@ -3166,7 +3162,6 @@ dependencies = [ "cargo-http-registry", "cargo_metadata", "clap 4.5.54", - "gear-workspace-hack", "reqwest", "serde", "tempfile", @@ -3535,7 +3530,6 @@ name = "demo-async" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3545,7 +3539,6 @@ name = "demo-async-critical" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3555,7 +3548,6 @@ name = "demo-async-custom-entry" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3565,7 +3557,6 @@ version = "0.1.0" dependencies = [ "futures", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3576,7 +3567,6 @@ version = "0.1.0" dependencies = [ "async-recursion", "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3585,7 +3575,6 @@ name = "demo-async-reply-hook" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3594,7 +3583,6 @@ name = "demo-async-signal-entry" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3604,7 +3592,6 @@ name = "demo-async-tester" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3614,7 +3601,6 @@ name = "demo-autoreply" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", ] @@ -3624,7 +3610,6 @@ name = "demo-big-data-section" version = "1.10.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "parity-scale-codec", @@ -3637,7 +3622,6 @@ version = "0.1.0" dependencies = [ "gbuiltin-bls381", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "hex-literal", "parity-scale-codec", @@ -3647,7 +3631,6 @@ dependencies = [ name = "demo-calc-hash" version = "0.1.0" dependencies = [ - "gear-workspace-hack", "parity-scale-codec", "sha2 0.10.9", ] @@ -3658,7 +3641,6 @@ version = "0.1.0" dependencies = [ "demo-calc-hash", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3669,7 +3651,6 @@ version = "0.1.0" dependencies = [ "demo-calc-hash", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3679,7 +3660,6 @@ name = "demo-compose" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "hex", ] @@ -3690,7 +3670,6 @@ version = "0.1.0" dependencies = [ "gcore", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3700,7 +3679,6 @@ name = "demo-create-program-reentrance" version = "1.10.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "hex", ] @@ -3710,7 +3688,6 @@ name = "demo-ctor" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", ] @@ -3720,7 +3697,6 @@ name = "demo-custom" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gsys", "gtest", @@ -3732,7 +3708,6 @@ name = "demo-delayed-reservation-sender" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3741,7 +3716,6 @@ name = "demo-delayed-sender" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3750,7 +3724,6 @@ name = "demo-delayed-sender-ethexe" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3759,7 +3732,6 @@ name = "demo-distributor" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "parity-scale-codec", @@ -3770,7 +3742,6 @@ name = "demo-fungible-token" version = "0.1.4" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "hashbrown 0.14.5", "parity-scale-codec", @@ -3783,7 +3754,6 @@ version = "0.1.0" dependencies = [ "futures", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3793,7 +3763,6 @@ name = "demo-gas-burned" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "log", @@ -3804,7 +3773,6 @@ name = "demo-incomplete-async-payloads" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -3815,7 +3783,6 @@ version = "0.1.0" dependencies = [ "gear-core", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "parity-scale-codec", @@ -3826,7 +3793,6 @@ name = "demo-init-fail-sender" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3835,7 +3801,6 @@ name = "demo-init-wait" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3844,7 +3809,6 @@ name = "demo-init-wait-reply-exit" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3853,7 +3817,6 @@ name = "demo-messenger" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3862,7 +3825,6 @@ name = "demo-mul-by-const" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "hex", ] @@ -3872,7 +3834,6 @@ name = "demo-ncompose" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "hex", ] @@ -3882,7 +3843,6 @@ name = "demo-node" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "parity-scale-codec", @@ -3893,7 +3853,6 @@ name = "demo-out-of-memory" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3903,7 +3862,6 @@ version = "0.1.0" dependencies = [ "gear-core", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", ] @@ -3913,7 +3871,6 @@ name = "demo-piggy-bank" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3922,7 +3879,6 @@ name = "demo-ping" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3931,7 +3887,6 @@ name = "demo-program-factory" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "hex-literal", @@ -3943,7 +3898,6 @@ name = "demo-program-generator" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "hex-literal", ] @@ -3953,7 +3907,6 @@ name = "demo-proxy" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", "scale-info", @@ -3965,7 +3918,6 @@ version = "0.1.0" dependencies = [ "gbuiltin-proxy", "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -3974,7 +3926,6 @@ name = "demo-proxy-relay" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", "scale-info", @@ -3985,7 +3936,6 @@ name = "demo-proxy-reservation-with-gas" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", "scale-info", @@ -3996,7 +3946,6 @@ name = "demo-read-big-state" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -4006,7 +3955,6 @@ name = "demo-reservation-manager" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -4016,7 +3964,6 @@ name = "demo-reserve-gas" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "parity-scale-codec", @@ -4027,7 +3974,6 @@ name = "demo-rwlock" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -4037,7 +3983,6 @@ name = "demo-send-from-reservation" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -4049,7 +3994,6 @@ dependencies = [ "gcore", "gear-core", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "parity-scale-codec", @@ -4060,7 +4004,6 @@ name = "demo-stack-allocations" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "parity-scale-codec", @@ -4074,7 +4017,6 @@ version = "0.1.0" dependencies = [ "gbuiltin-staking", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "hashbrown 0.14.5", "hex-literal", @@ -4086,7 +4028,6 @@ name = "demo-state-rollback" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -4095,7 +4036,6 @@ name = "demo-sync-duplicate" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -4104,7 +4044,6 @@ name = "demo-syscall-error" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", ] @@ -4114,7 +4053,6 @@ name = "demo-value-sender" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -4123,7 +4061,6 @@ name = "demo-value-sender-ethexe" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -4132,7 +4069,6 @@ name = "demo-vec" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -4141,7 +4077,6 @@ name = "demo-wait" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -4151,7 +4086,6 @@ version = "0.1.0" dependencies = [ "futures", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -4161,7 +4095,6 @@ name = "demo-wait-wake" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "parity-scale-codec", @@ -4176,7 +4109,6 @@ dependencies = [ "gcore", "gear-core", "gear-wasm-builder", - "gear-workspace-hack", "gstd", "gtest", "parity-scale-codec", @@ -4187,7 +4119,6 @@ name = "demo-waiting-proxy" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", ] @@ -4195,7 +4126,6 @@ dependencies = [ name = "demo-wat" version = "0.1.0" dependencies = [ - "gear-workspace-hack", "hex", "wasmparser 0.230.0 (registry+https://github.com/rust-lang/crates.io-index)", "wasmprinter", @@ -4934,7 +4864,6 @@ dependencies = [ "ethexe-common", "ethexe-ethereum", "futures", - "gear-workspace-hack", "gprimitives", "gsigner", "log", @@ -4959,7 +4888,6 @@ dependencies = [ "ethexe-prometheus", "ethexe-rpc", "ethexe-service", - "gear-workspace-hack", "gprimitives", "gsigner", "hex", @@ -4985,7 +4913,6 @@ dependencies = [ "auto_impl", "derive_more 2.1.1", "gear-core", - "gear-workspace-hack", "gprimitives", "gsigner", "hex", @@ -5012,7 +4939,6 @@ dependencies = [ "futures", "gear-core", "gear-utils", - "gear-workspace-hack", "gprimitives", "log", "ntest", @@ -5031,13 +4957,13 @@ dependencies = [ "derive_more 2.1.1", "ethexe-common", "ethexe-db", + "ethexe-dkg-roast", "ethexe-ethereum", "ethexe-runtime-common", "ethexe-service-utils", "futures", "gear-core", "gear-utils", - "gear-workspace-hack", "gprimitives", "gsigner", "hashbrown 0.14.5", @@ -5049,6 +4975,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "roast-secp256k1-evm", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -5064,7 +4991,6 @@ dependencies = [ "ethexe-common", "ethexe-runtime-common", "gear-core", - "gear-workspace-hack", "gprimitives", "parity-scale-codec", "paste", @@ -5074,6 +5000,20 @@ dependencies = [ "tracing", ] +[[package]] +name = "ethexe-dkg-roast" +version = "1.10.0" +dependencies = [ + "anyhow", + "ethexe-common", + "ethexe-db", + "gprimitives", + "rand 0.8.5", + "roast-secp256k1-evm", + "thiserror 2.0.17", + "tracing", +] + [[package]] name = "ethexe-ethereum" version = "1.10.0" @@ -5086,7 +5026,6 @@ dependencies = [ "gear-core", "gear-core-errors", "gear-utils", - "gear-workspace-hack", "gprimitives", "gsigner", "log", @@ -5111,7 +5050,6 @@ dependencies = [ "ethexe-db", "ethexe-service-utils", "futures", - "gear-workspace-hack", "gprimitives", "gsigner", "indexmap 2.13.0", @@ -5140,7 +5078,6 @@ dependencies = [ "ethexe-ethereum", "futures", "gear-utils", - "gear-workspace-hack", "gprimitives", "gsigner", "log", @@ -5167,7 +5104,6 @@ dependencies = [ "gear-lazy-pages", "gear-runtime-interface", "gear-wasm-instrument", - "gear-workspace-hack", "gprimitives", "itertools 0.13.0", "log", @@ -5189,7 +5125,6 @@ version = "1.10.0" dependencies = [ "anyhow", "futures", - "gear-workspace-hack", "hyper 0.14.32", "log", "prometheus", @@ -5208,7 +5143,6 @@ dependencies = [ "ethexe-runtime-common", "futures", "gear-core", - "gear-workspace-hack", "gprimitives", "hyper 1.8.1", "jsonrpsee", @@ -5231,7 +5165,6 @@ dependencies = [ "gear-core", "gear-core-processor", "gear-lazy-pages-interface", - "gear-workspace-hack", "gprimitives", "log", "parity-scale-codec", @@ -5250,7 +5183,6 @@ dependencies = [ "gear-core-errors", "gear-core-processor", "gear-lazy-pages-common", - "gear-workspace-hack", "gprimitives", "gsys", "log", @@ -5269,7 +5201,6 @@ dependencies = [ "ethexe-rpc", "ethexe-runtime-common", "futures", - "gear-workspace-hack", "gprimitives", "gsigner", "jsonrpsee", @@ -5297,6 +5228,7 @@ dependencies = [ "ethexe-compute", "ethexe-consensus", "ethexe-db", + "ethexe-dkg-roast", "ethexe-ethereum", "ethexe-network", "ethexe-observer", @@ -5308,7 +5240,6 @@ dependencies = [ "futures", "gear-core", "gear-core-errors", - "gear-workspace-hack", "gprimitives", "gsigner", "jsonrpsee", @@ -5328,7 +5259,6 @@ name = "ethexe-service-utils" version = "1.10.0" dependencies = [ "futures", - "gear-workspace-hack", "log", "tokio", ] @@ -6265,7 +6195,6 @@ name = "galloc" version = "1.10.0" dependencies = [ "gear-dlmalloc", - "gear-workspace-hack", ] [[package]] @@ -6277,7 +6206,6 @@ dependencies = [ "ark-ff 0.4.2", "ark-scale", "ark-serialize 0.4.2", - "gear-workspace-hack", "parity-scale-codec", "scale-info", ] @@ -6286,7 +6214,6 @@ dependencies = [ name = "gbuiltin-eth-bridge" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "gprimitives", "parity-scale-codec", "scale-info", @@ -6296,7 +6223,6 @@ dependencies = [ name = "gbuiltin-proxy" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "gprimitives", "parity-scale-codec", "scale-info", @@ -6306,7 +6232,6 @@ dependencies = [ name = "gbuiltin-staking" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "gprimitives", "parity-scale-codec", "scale-info", @@ -6325,7 +6250,6 @@ dependencies = [ "gear-core", "gear-node-wrapper", "gear-runtime-primitives", - "gear-workspace-hack", "gsdk", "gsigner", "hex", @@ -6349,7 +6273,6 @@ dependencies = [ "galloc", "gear-core-errors", "gear-stack-buffer", - "gear-workspace-hack", "gprimitives", "gsys", "hex-literal", @@ -6369,7 +6292,6 @@ dependencies = [ "gear-core", "gear-node-testing", "gear-runtime-primitives", - "gear-workspace-hack", "log", "pallet-gear", "pallet-gear-builtin", @@ -6405,7 +6327,6 @@ name = "gear-bags-thresholds" version = "1.0.0" dependencies = [ "clap 4.5.54", - "gear-workspace-hack", "generate-bags", "vara-runtime", ] @@ -6415,7 +6336,6 @@ name = "gear-baremetal-weights-patcher" version = "0.1.0" dependencies = [ "clap 4.5.54", - "gear-workspace-hack", "proc-macro2", "syn 2.0.114", ] @@ -6429,7 +6349,6 @@ dependencies = [ "gear-core", "gear-utils", "gear-wasm-gen", - "gear-workspace-hack", "hex", "log", "rand 0.8.5", @@ -6451,7 +6370,6 @@ dependencies = [ "gear-runtime-interface", "gear-runtime-primitives", "gear-service", - "gear-workspace-hack", "log", "mimalloc", "pallet-gear-payment", @@ -6483,7 +6401,6 @@ dependencies = [ "gear-core", "gear-utils", "gear-wasm-instrument", - "gear-workspace-hack", "gsys", "log", "primitive-types 0.12.2", @@ -6501,7 +6418,6 @@ dependencies = [ name = "gear-common-codegen" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "quote", "syn 2.0.114", ] @@ -6517,7 +6433,6 @@ dependencies = [ "enum-iterator 1.5.0", "gear-core-errors", "gear-wasm-instrument", - "gear-workspace-hack", "gprimitives", "gsys", "hex", @@ -6552,7 +6467,6 @@ dependencies = [ "gear-sandbox", "gear-sandbox-env", "gear-wasm-instrument", - "gear-workspace-hack", "gsys", "log", "parity-scale-codec", @@ -6564,7 +6478,6 @@ name = "gear-core-errors" version = "1.10.0" dependencies = [ "enum-iterator 1.5.0", - "gear-workspace-hack", "parity-scale-codec", "scale-decode 0.16.2", "scale-encode", @@ -6585,7 +6498,6 @@ dependencies = [ "gear-core-errors", "gear-lazy-pages-common", "gear-wasm-instrument", - "gear-workspace-hack", "gsys", "log", "parity-scale-codec", @@ -6609,7 +6521,6 @@ name = "gear-key-finder" version = "1.10.0" dependencies = [ "directories", - "gear-workspace-hack", "hex", ] @@ -6623,7 +6534,6 @@ dependencies = [ "gear-core", "gear-lazy-pages-common", "gear-sandbox-host", - "gear-workspace-hack", "libc", "log", "mach", @@ -6642,7 +6552,6 @@ name = "gear-lazy-pages-common" version = "1.10.0" dependencies = [ "gear-core", - "gear-workspace-hack", "num_enum 0.6.1", "parity-scale-codec", ] @@ -6655,7 +6564,6 @@ dependencies = [ "gear-core", "gear-lazy-pages-common", "gear-runtime-interface", - "gear-workspace-hack", "log", "sp-std", ] @@ -6667,7 +6575,6 @@ dependencies = [ "gear-core", "gear-lazy-pages", "gear-lazy-pages-common", - "gear-workspace-hack", "log", ] @@ -6683,7 +6590,6 @@ dependencies = [ "gear-core", "gear-utils", "gear-wasm-gen", - "gear-workspace-hack", "gsdk", "names", "parking_lot 0.12.5", @@ -6705,7 +6611,6 @@ dependencies = [ "gear-runtime-interface", "gear-runtime-primitives", "gear-service", - "gear-workspace-hack", "parity-scale-codec", "sc-service", "sp-core", @@ -6722,7 +6627,6 @@ name = "gear-node-wrapper" version = "1.10.0" dependencies = [ "anyhow", - "gear-workspace-hack", "rand 0.8.5", "smallvec", "which", @@ -6737,7 +6641,6 @@ dependencies = [ "gear-runtime-interface", "gear-runtime-primitives", "gear-service", - "gear-workspace-hack", "hex", "log", "parity-scale-codec", @@ -6765,7 +6668,6 @@ dependencies = [ "frame-system", "frame-system-benchmarking", "gear-runtime-primitives", - "gear-workspace-hack", "pallet-authorship", "pallet-balances", "pallet-gear", @@ -6784,7 +6686,6 @@ dependencies = [ "gear-lazy-pages", "gear-lazy-pages-common", "gear-sandbox-interface", - "gear-workspace-hack", "log", "parity-scale-codec", "sp-io", @@ -6796,7 +6697,6 @@ dependencies = [ name = "gear-runtime-primitives" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "sp-core", "sp-runtime", ] @@ -6809,7 +6709,6 @@ dependencies = [ "gear-sandbox-env", "gear-sandbox-interface", "gear-wasmer-cache", - "gear-workspace-hack", "log", "parity-scale-codec", "pathdiff", @@ -6827,7 +6726,6 @@ dependencies = [ name = "gear-sandbox-env" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "parity-scale-codec", "sp-debug-derive", "sp-std", @@ -6843,7 +6741,6 @@ dependencies = [ "environmental", "gear-sandbox-env", "gear-wasmer-cache", - "gear-workspace-hack", "log", "parity-scale-codec", "region", @@ -6861,7 +6758,6 @@ name = "gear-sandbox-interface" version = "1.10.0" dependencies = [ "gear-sandbox-host", - "gear-workspace-hack", "log", "parity-scale-codec", "sp-runtime-interface", @@ -6883,7 +6779,6 @@ dependencies = [ "gear-runtime-common", "gear-runtime-interface", "gear-runtime-primitives", - "gear-workspace-hack", "jsonrpsee", "log", "pallet-gear", @@ -6952,7 +6847,6 @@ version = "1.10.0" dependencies = [ "blake2 0.10.6", "bs58 0.5.1", - "gear-workspace-hack", "hex", ] @@ -6961,7 +6855,6 @@ name = "gear-stack-buffer" version = "1.10.0" dependencies = [ "cc", - "gear-workspace-hack", ] [[package]] @@ -6969,7 +6862,6 @@ name = "gear-utils" version = "1.10.0" dependencies = [ "gear-core", - "gear-workspace-hack", "hex", "nonempty 0.12.0", "parity-scale-codec", @@ -6986,7 +6878,6 @@ dependencies = [ "anyhow", "clap 4.5.54", "futures", - "gear-workspace-hack", "gsdk", "log", "parity-scale-codec", @@ -7008,7 +6899,6 @@ dependencies = [ "gear-core", "gear-wasm-instrument", "gear-wasm-optimizer", - "gear-workspace-hack", "itertools 0.13.0", "log", "pathdiff", @@ -7030,7 +6920,6 @@ dependencies = [ "gear-lazy-pages-native-interface", "gear-utils", "gear-wasm-instrument", - "gear-workspace-hack", "gsys", "indexmap 2.13.0", "log", @@ -7052,7 +6941,6 @@ dependencies = [ "derive_more 2.1.1", "diff", "enum-iterator 1.5.0", - "gear-workspace-hack", "log", "proptest", "wasm-encoder 0.230.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -7069,7 +6957,6 @@ dependencies = [ "anyhow", "colored", "gear-wasm-instrument", - "gear-workspace-hack", "log", "regex", "rustc_version 0.4.1", @@ -7087,7 +6974,6 @@ dependencies = [ "demo-constructor", "derive_more 2.1.1", "fs4", - "gear-workspace-hack", "log", "loom", "tempfile", @@ -7104,7 +6990,6 @@ dependencies = [ "clap 4.5.54", "frame-support", "gear-utils", - "gear-workspace-hack", "heck 0.5.0", "indexmap 2.13.0", "pallet-gear", @@ -7685,7 +7570,6 @@ dependencies = [ "bytemuck", "derive_more 2.1.1", "gear-ss58", - "gear-workspace-hack", "hex", "primitive-types 0.12.2", "scale-decode 0.16.2", @@ -7733,7 +7617,6 @@ dependencies = [ "gear-core-errors", "gear-node-wrapper", "gear-utils", - "gear-workspace-hack", "gsdk-codegen", "hex", "indexmap 2.13.0", @@ -7757,7 +7640,6 @@ dependencies = [ name = "gsdk-codegen" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "proc-macro2", "quote", "syn 2.0.114", @@ -7775,7 +7657,6 @@ dependencies = [ "colored", "derive_more 2.1.1", "dirs", - "gear-workspace-hack", "gprimitives", "hex", "k256", @@ -7793,7 +7674,6 @@ dependencies = [ "sp-application-crypto", "sp-core", "tempfile", - "test-case", "thiserror 2.0.17", "tracing", "tracing-subscriber", @@ -7810,7 +7690,6 @@ dependencies = [ "galloc", "gcore", "gear-core-errors", - "gear-workspace-hack", "gprimitives", "gstd-codegen", "hashbrown 0.14.5", @@ -7825,7 +7704,6 @@ dependencies = [ name = "gstd-codegen" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "gprimitives", "gstd", "proc-macro2", @@ -7839,7 +7717,6 @@ name = "gsys" version = "1.10.0" dependencies = [ "bytemuck", - "gear-workspace-hack", ] [[package]] @@ -7865,7 +7742,6 @@ dependencies = [ "gear-lazy-pages-common", "gear-lazy-pages-native-interface", "gear-utils", - "gear-workspace-hack", "gprimitives", "gsys", "log", @@ -9194,7 +9070,6 @@ dependencies = [ name = "junit-common" version = "0.1.0" dependencies = [ - "gear-workspace-hack", "serde", ] @@ -9292,7 +9167,6 @@ dependencies = [ "gear-lazy-pages-common", "gear-wasm-gen", "gear-wasm-instrument", - "gear-workspace-hack", "log", "region", "wasmer", @@ -9309,7 +9183,6 @@ dependencies = [ "clap 4.5.54", "core_affinity", "env_logger 0.11.8", - "gear-workspace-hack", "hex", "ipc-channel", "lazy-pages-fuzzer", @@ -11484,7 +11357,6 @@ name = "numerated" version = "1.10.0" dependencies = [ "derive_more 2.1.1", - "gear-workspace-hack", "log", "num-traits", "proptest", @@ -11925,7 +11797,6 @@ dependencies = [ "gear-runtime-interface", "gear-sandbox", "gear-wasm-instrument", - "gear-workspace-hack", "gstd", "gsys", "hex", @@ -11966,7 +11837,6 @@ dependencies = [ "frame-support", "frame-system", "gear-common", - "gear-workspace-hack", "log", "pallet-authorship", "pallet-balances", @@ -11998,7 +11868,6 @@ dependencies = [ "gear-core-errors", "gear-core-processor", "gear-runtime-interface", - "gear-workspace-hack", "gprimitives", "hex-literal", "impl-trait-for-tuples", @@ -12033,7 +11902,6 @@ dependencies = [ name = "pallet-gear-builtin-rpc" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "jsonrpsee", "pallet-gear-builtin-rpc-runtime-api", "sp-api", @@ -12046,7 +11914,6 @@ dependencies = [ name = "pallet-gear-builtin-rpc-runtime-api" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "sp-api", "sp-core", ] @@ -12065,7 +11932,6 @@ dependencies = [ "gear-common", "gear-core", "gear-core-errors", - "gear-workspace-hack", "gprimitives", "log", "pallet-authorship", @@ -12098,7 +11964,6 @@ name = "pallet-gear-eth-bridge-primitives" version = "1.10.0" dependencies = [ "binary-merkle-tree", - "gear-workspace-hack", "gprimitives", "parity-scale-codec", "scale-info", @@ -12109,7 +11974,6 @@ dependencies = [ name = "pallet-gear-eth-bridge-rpc" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "jsonrpsee", "pallet-gear-eth-bridge-rpc-runtime-api", "primitive-types 0.12.2", @@ -12122,7 +11986,6 @@ dependencies = [ name = "pallet-gear-eth-bridge-rpc-runtime-api" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "pallet-gear-eth-bridge", "sp-api", "sp-core", @@ -12137,7 +12000,6 @@ dependencies = [ "frame-system", "gear-common", "gear-core", - "gear-workspace-hack", "pallet-balances", "pallet-gear-messenger", "parity-scale-codec", @@ -12158,7 +12020,6 @@ dependencies = [ "frame-system", "gear-common", "gear-core", - "gear-workspace-hack", "pallet-authorship", "pallet-balances", "pallet-gear-gas", @@ -12181,7 +12042,6 @@ dependencies = [ "frame-system", "gear-common", "gear-core", - "gear-workspace-hack", "pallet-authorship", "pallet-balances", "pallet-gear", @@ -12205,7 +12065,6 @@ dependencies = [ name = "pallet-gear-proc-macro" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "proc-macro2", "quote", "syn 2.0.114", @@ -12219,7 +12078,6 @@ dependencies = [ "frame-system", "gear-common", "gear-core", - "gear-workspace-hack", "pallet-authorship", "pallet-balances", "pallet-gear-gas", @@ -12242,7 +12100,6 @@ dependencies = [ "gear-common", "gear-core", "gear-core-errors", - "gear-workspace-hack", "jsonrpsee", "log", "pallet-gear-rpc-runtime-api", @@ -12260,7 +12117,6 @@ dependencies = [ name = "pallet-gear-rpc-runtime-api" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "pallet-gear", "sp-api", "sp-core", @@ -12279,7 +12135,6 @@ dependencies = [ "gear-common", "gear-core", "gear-core-errors", - "gear-workspace-hack", "log", "pallet-authorship", "pallet-balances", @@ -12308,7 +12163,6 @@ dependencies = [ "frame-support", "frame-system", "gear-common", - "gear-workspace-hack", "log", "pallet-authorship", "pallet-balances", @@ -12335,7 +12189,6 @@ dependencies = [ name = "pallet-gear-staking-rewards-rpc" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "jsonrpsee", "pallet-gear-staking-rewards-rpc-runtime-api", "sp-api", @@ -12347,7 +12200,6 @@ dependencies = [ name = "pallet-gear-staking-rewards-rpc-runtime-api" version = "1.10.0" dependencies = [ - "gear-workspace-hack", "pallet-gear-staking-rewards", "sp-api", ] @@ -12362,7 +12214,6 @@ dependencies = [ "frame-system", "gear-common", "gear-core", - "gear-workspace-hack", "pallet-balances", "parity-scale-codec", "primitive-types 0.12.2", @@ -12401,7 +12252,6 @@ version = "1.10.0" dependencies = [ "frame-support", "frame-system", - "gear-workspace-hack", "log", "parity-scale-codec", "scale-info", @@ -14272,7 +14122,6 @@ version = "0.1.0" dependencies = [ "clap 4.5.54", "frame-support", - "gear-workspace-hack", "junit-common", "pallet-gear", "quick-xml", @@ -14549,7 +14398,6 @@ dependencies = [ "gear-runtime-primitives", "gear-utils", "gear-wasm-gen", - "gear-workspace-hack", "hex", "hex-literal", "log", @@ -14575,7 +14423,6 @@ name = "runtime-fuzzer-fuzz" version = "0.1.0" dependencies = [ "gear-utils", - "gear-workspace-hack", "libfuzzer-sys", "log", "runtime-fuzzer", @@ -18388,45 +18235,11 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" -[[package]] -name = "test-case" -version = "3.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2550dd13afcd286853192af8601920d959b14c401fcece38071d53bf0768a8" -dependencies = [ - "test-case-macros", -] - -[[package]] -name = "test-case-core" -version = "3.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcb7fd841cd518e279be3d5a3eb0636409487998a4aff22f3de87b81e88384f" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 2.0.114", -] - -[[package]] -name = "test-case-macros" -version = "3.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", - "test-case-core", -] - [[package]] name = "test-syscalls" version = "0.1.0" dependencies = [ "gear-wasm-builder", - "gear-workspace-hack", "gstd", "parity-scale-codec", ] @@ -19386,7 +19199,6 @@ dependencies = [ "gear-runtime-interface", "gear-runtime-primitives", "gear-wasm-instrument", - "gear-workspace-hack", "log", "pallet-authority-discovery", "pallet-authorship", @@ -19743,7 +19555,6 @@ dependencies = [ "clap 4.5.54", "gear-wasm-builder", "gear-wasm-instrument", - "gear-workspace-hack", "log", "tracing-subscriber", ] diff --git a/Cargo.toml b/Cargo.toml index 4815e50c6b8..fd223854cb2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -315,6 +315,7 @@ ethexe-sdk = { path = "ethexe/sdk", default-features = false } ethexe-service = { path = "ethexe/service", default-features = false } ethexe-service-utils = { path = "ethexe/service/utils", default-features = false } ethexe-consensus = { path = "ethexe/consensus", default-features = false } +ethexe-dkg-roast = { path = "ethexe/dkg-roast", default-features = false } ethexe-ethereum = { path = "ethexe/ethereum", default-features = false } ethexe-runtime-common = { path = "ethexe/runtime/common", default-features = false } ethexe-prometheus = { path = "ethexe/prometheus", default-features = false } diff --git a/common/Cargo.toml b/common/Cargo.toml index 71e19dca3b1..be48a6afc1b 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -37,7 +37,6 @@ sp-runtime.workspace = true frame-support.workspace = true frame-system = { workspace = true, optional = true } frame-benchmarking = { workspace = true, optional = true } -gear-workspace-hack.workspace = true [target.'cfg(fuzz)'.dependencies] fail = { workspace = true, features = [ "failpoints" ] } diff --git a/common/codegen/Cargo.toml b/common/codegen/Cargo.toml index 602953ab75a..ec418034cbc 100644 --- a/common/codegen/Cargo.toml +++ b/common/codegen/Cargo.toml @@ -18,4 +18,3 @@ proc-macro = true [dependencies] quote.workspace = true syn.workspace = true -gear-workspace-hack.workspace = true diff --git a/common/numerated/Cargo.toml b/common/numerated/Cargo.toml index d87411dbe24..796cb5c454c 100644 --- a/common/numerated/Cargo.toml +++ b/common/numerated/Cargo.toml @@ -18,7 +18,6 @@ derive_more.workspace = true scale-info = { workspace = true, features = ["derive"] } log = { workspace = true, optional = true } proptest = { workspace = true, optional = true } -gear-workspace-hack.workspace = true [dev-dependencies] proptest.workspace = true diff --git a/core-backend/Cargo.toml b/core-backend/Cargo.toml index 3c9aa78ac35..cef2502aa5a 100644 --- a/core-backend/Cargo.toml +++ b/core-backend/Cargo.toml @@ -28,7 +28,6 @@ bytemuck = { workspace = true, features = ["const_zeroed"] } log.workspace = true derive_more.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] parity-scale-codec.workspace = true diff --git a/core-errors/Cargo.toml b/core-errors/Cargo.toml index d5d3139cb39..0f325f18109 100644 --- a/core-errors/Cargo.toml +++ b/core-errors/Cargo.toml @@ -18,7 +18,6 @@ scale-encode = { workspace = true, optional = true } scale-decode = { workspace = true, optional = true } serde = { workspace = true, features = ["derive"], optional = true } thiserror.workspace = true -gear-workspace-hack.workspace = true [features] codec = ["parity-scale-codec", "scale-info", "scale-encode", "scale-decode"] diff --git a/core-processor/Cargo.toml b/core-processor/Cargo.toml index 80154f6a137..8febd5f196f 100644 --- a/core-processor/Cargo.toml +++ b/core-processor/Cargo.toml @@ -23,7 +23,6 @@ log.workspace = true derive_more.workspace = true actor-system-error.workspace = true parity-scale-codec = { workspace = true, features = ["derive"] } -gear-workspace-hack.workspace = true [dev-dependencies] enum-iterator.workspace = true diff --git a/core/Cargo.toml b/core/Cargo.toml index 4a88b7bb050..1f158416796 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -39,7 +39,6 @@ numerated.workspace = true # Optional dependencies serde = { workspace = true, features = ["derive"], optional = true } impl-serde = { workspace = true, optional = true } -gear-workspace-hack.workspace = true [package.metadata.cargo-shear] ignored = ["impl-serde"] diff --git a/ethexe/blob-loader/Cargo.toml b/ethexe/blob-loader/Cargo.toml index 199fc3b7fa2..5fe13cdfb16 100644 --- a/ethexe/blob-loader/Cargo.toml +++ b/ethexe/blob-loader/Cargo.toml @@ -18,7 +18,6 @@ reqwest = { workspace = true, features = ["default-tls", "json"] } futures.workspace = true log.workspace = true tokio = { workspace = true, features = ["rt-multi-thread", "fs"] } -gear-workspace-hack.workspace = true [dev-dependencies] gprimitives = { workspace = true, features = ["ethexe", "std"] } diff --git a/ethexe/blob-loader/src/lib.rs b/ethexe/blob-loader/src/lib.rs index 3a5eb8faffe..228b14a5dbd 100644 --- a/ethexe/blob-loader/src/lib.rs +++ b/ethexe/blob-loader/src/lib.rs @@ -393,6 +393,7 @@ mod tests { .await .unwrap() .with_validators(vec![alice_address].try_into().unwrap()) + .with_generated_verifiable_secret_sharing_commitment() .deploy() .await .unwrap(); diff --git a/ethexe/cli/Cargo.toml b/ethexe/cli/Cargo.toml index 7ed8c77274f..156a6e2f808 100644 --- a/ethexe/cli/Cargo.toml +++ b/ethexe/cli/Cargo.toml @@ -47,7 +47,6 @@ tempfile.workspace = true tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } toml.workspace = true thiserror.workspace = true -gear-workspace-hack.workspace = true [lints] workspace = true diff --git a/ethexe/common/Cargo.toml b/ethexe/common/Cargo.toml index ab03826b39d..b96b0332419 100644 --- a/ethexe/common/Cargo.toml +++ b/ethexe/common/Cargo.toml @@ -31,7 +31,6 @@ nonempty.workspace = true # mock deps itertools = { workspace = true, optional = true } tap = { workspace = true, optional = true } -gear-workspace-hack.workspace = true [dev-dependencies] gprimitives = { workspace = true, features = ["ethexe"] } diff --git a/ethexe/common/src/db.rs b/ethexe/common/src/db.rs index fb4f090a663..c5af080a286 100644 --- a/ethexe/common/src/db.rs +++ b/ethexe/common/src/db.rs @@ -19,7 +19,7 @@ //! Common db types and traits. use crate::{ - Announce, BlockHeader, CodeBlobInfo, Digest, HashOf, ProgramStates, ProtocolTimelines, + Address, Announce, BlockHeader, CodeBlobInfo, Digest, HashOf, ProgramStates, ProtocolTimelines, Schedule, SimpleBlockData, ValidatorsVec, events::BlockEvent, gear::StateTransition, @@ -226,3 +226,141 @@ pub struct ComputedAnnounceData { pub outcome: Vec, pub schedule: Schedule, } + +// DKG storage types + +use crate::crypto::{ + DkgComplaint, DkgIdentifier, DkgJustification, DkgKeyPackage, DkgPublicKeyPackage, DkgRound1, + DkgRound2, DkgRound2Culprits, DkgSessionId, DkgShare, DkgVssCommitment, PreNonceCommitment, + SignAggregate, SignNonceCommit, SignSessionRequest, SignShare, +}; + +/// DKG session state - stores all messages for a DKG session +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Eq)] +pub struct DkgSessionState { + /// Address to identifier mapping for this DKG session + pub identifier_map: Vec<(Address, DkgIdentifier)>, + /// Round 1 commitments from all participants + pub round1_packages: Vec, + /// Round 2 packages from all participants + pub round2_packages: Vec, + /// Complaints reported during DKG + pub complaints: Vec, + /// Justifications for reported complaints + pub justifications: Vec, + /// Culprits reported during round 2 verification + pub round2_culprits: Vec, + /// Whether DKG is completed successfully + pub completed: bool, +} + +/// ROAST signing session state +#[derive(Debug, Clone, Default, Encode, Decode, PartialEq, Eq)] +pub struct SignSessionState { + /// The initial signing request + pub request: Option, + /// Nonce commitments from participants + pub nonce_commits: Vec, + /// Partial signatures from participants + pub sign_shares: Vec, + /// Final aggregated signature (if completed) + pub aggregate: Option, + /// Whether signing is completed successfully + pub completed: bool, +} + +/// Read-only DKG storage operations +#[auto_impl::auto_impl(&, Box)] +pub trait DkgStorageRO { + /// Get DKG session state for a specific session + fn dkg_session_state(&self, session_id: DkgSessionId) -> Option; + + /// Get the final PublicKeyPackage for a completed DKG session + fn public_key_package(&self, era_index: u64) -> Option; + + /// Get the KeyPackage (secret share) for a completed DKG session + fn dkg_key_package(&self, era_index: u64) -> Option; + + /// Get the DKG share details for a completed DKG session + fn dkg_share(&self, era_index: u64) -> Option; + + /// Get the aggregated VSS commitment for a completed DKG session + fn dkg_vss_commitment(&self, era_index: u64) -> Option; + + /// Check if DKG is completed for an era + fn dkg_completed(&self, era_index: u64) -> bool; +} + +/// Read-write DKG storage operations +#[auto_impl::auto_impl(&)] +pub trait DkgStorageRW: DkgStorageRO { + /// Set DKG session state + fn set_dkg_session_state(&self, session_id: DkgSessionId, state: DkgSessionState); + + /// Mutate DKG session state + fn mutate_dkg_session_state( + &self, + session_id: DkgSessionId, + f: impl FnOnce(&mut DkgSessionState), + ); + + /// Set the final PublicKeyPackage for an era + fn set_public_key_package(&self, era_index: u64, package: DkgPublicKeyPackage); + + /// Set the KeyPackage (secret share) for an era + fn set_dkg_key_package(&self, era_index: u64, package: DkgKeyPackage); + + /// Set the DKG share details for an era + fn set_dkg_share(&self, share: DkgShare); + + /// Set the aggregated VSS commitment for an era + fn set_dkg_vss_commitment(&self, era_index: u64, commitment: DkgVssCommitment); +} + +/// Read-only ROAST signing storage operations +#[auto_impl::auto_impl(&, Box)] +pub trait SignStorageRO { + /// Get signing session state by message hash and era + fn sign_session_state(&self, msg_hash: H256, era_index: u64) -> Option; + + /// Get cached aggregate signature for era/target/message + fn signature_cache( + &self, + era_index: u64, + target: ActorId, + msg_hash: H256, + ) -> Option; + + /// Get cached pre-nonces for era/target. + fn pre_nonce_cache(&self, era_index: u64, target: ActorId) -> Option>; + + /// Check if signing is completed for a specific message + fn sign_completed(&self, msg_hash: H256, era_index: u64) -> bool; +} + +/// Read-write ROAST signing storage operations +#[auto_impl::auto_impl(&)] +pub trait SignStorageRW: SignStorageRO { + /// Set signing session state + fn set_sign_session_state(&self, msg_hash: H256, era_index: u64, state: SignSessionState); + + /// Cache aggregate signature for era/target/message + fn set_signature_cache( + &self, + era_index: u64, + target: ActorId, + msg_hash: H256, + aggregate: SignAggregate, + ); + + /// Store cached pre-nonces for era/target. + fn set_pre_nonce_cache(&self, era_index: u64, target: ActorId, cache: Vec); + + /// Mutate signing session state + fn mutate_sign_session_state( + &self, + msg_hash: H256, + era_index: u64, + f: impl FnOnce(&mut SignSessionState), + ); +} diff --git a/ethexe/common/src/gear.rs b/ethexe/common/src/gear.rs index 68412ef2133..ece4439a682 100644 --- a/ethexe/common/src/gear.rs +++ b/ethexe/common/src/gear.rs @@ -239,13 +239,25 @@ impl ToDigest for ValidatorsCommitment { fn update_hasher(&self, hasher: &mut sha3::Keccak256) { let ValidatorsCommitment { aggregated_public_key, - verifiable_secret_sharing_commitment: _, // TODO: add to digest + verifiable_secret_sharing_commitment, validators, era_index, } = self; + // Include aggregated public key coordinates hasher.update(<[u8; 32]>::from(aggregated_public_key.x)); hasher.update(<[u8; 32]>::from(aggregated_public_key.y)); + + // Include hash of VSS commitment + // This matches Solidity: keccak256(abi.encodePacked(..., keccak256(vss), ...)) + let vss_bytes = verifiable_secret_sharing_commitment + .serialize() + .expect("VSS commitment serialization failed") + .concat(); + let vss_hash = sha3::Keccak256::digest(&vss_bytes); + hasher.update(vss_hash); + + // Include validators (each address as 32 bytes) hasher.update( validators .iter() @@ -258,6 +270,7 @@ impl ToDigest for ValidatorsCommitment { .collect::>(), ); + // Include era index as U256 big-endian let bytes = AlloyU256::from(*era_index).to_be_bytes::<32>(); hasher.update(bytes); } @@ -368,7 +381,7 @@ pub struct StateTransition { /// and each zero byte costs 4 gas (see ). /// /// Negative numbers will be stored like this: - /// ``` + /// ```text /// $ cast /// > -1 ether /// Type: int256 diff --git a/ethexe/common/src/lib.rs b/ethexe/common/src/lib.rs index d60ccc8c470..2588b5371e2 100644 --- a/ethexe/common/src/lib.rs +++ b/ethexe/common/src/lib.rs @@ -23,6 +23,8 @@ extern crate alloc; pub mod consensus; +#[path = "../../dkg-roast/src/crypto/mod.rs"] +pub mod crypto; pub mod db; pub mod events; pub mod gear; diff --git a/ethexe/common/src/network.rs b/ethexe/common/src/network.rs index de608fb5e32..0753373361d 100644 --- a/ethexe/common/src/network.rs +++ b/ethexe/common/src/network.rs @@ -19,6 +19,13 @@ use crate::{ Address, Announce, HashOf, ToDigest, consensus::{BatchCommitmentValidationReply, BatchCommitmentValidationRequest}, + crypto::{ + dkg::{DkgComplaint, DkgJustification, DkgRound1, DkgRound2, DkgRound2Culprits}, + frost::{ + SignAggregate, SignCulprits, SignNonceCommit, SignNoncePackage, SignSessionRequest, + SignShare, + }, + }, ecdsa::{SignedData, VerifiedData}, }; use alloc::vec::Vec; @@ -30,6 +37,32 @@ pub type ValidatorAnnounce = ValidatorMessage; pub type ValidatorRequest = ValidatorMessage; pub type ValidatorReply = ValidatorMessage; +// DKG message types. +/// Signed DKG round1 broadcast. +pub type ValidatorDkgRound1 = ValidatorMessage; +/// Signed DKG round2 broadcast. +pub type ValidatorDkgRound2 = ValidatorMessage; +/// Signed DKG round2 culprits report. +pub type ValidatorDkgRound2Culprits = ValidatorMessage; +/// Signed DKG complaint. +pub type ValidatorDkgComplaint = ValidatorMessage; +/// Signed DKG justification. +pub type ValidatorDkgJustification = ValidatorMessage; + +// ROAST/FROST message types. +/// Signed ROAST sign request. +pub type ValidatorSignRequest = ValidatorMessage; +/// Signed ROAST nonce commit. +pub type ValidatorSignNonce = ValidatorMessage; +/// Signed ROAST nonce package. +pub type ValidatorSignNoncePackage = ValidatorMessage; +/// Signed ROAST partial signature. +pub type ValidatorSignPartial = ValidatorMessage; +/// Signed ROAST culprits report. +pub type ValidatorSignCulprits = ValidatorMessage; +/// Signed ROAST aggregate signature. +pub type ValidatorSignResult = ValidatorMessage; + #[derive(Debug, Clone, Encode, Decode, Eq, PartialEq, Hash)] pub struct ValidatorMessage { pub era_index: u64, @@ -44,11 +77,28 @@ impl ToDigest for ValidatorMessage { } } +/// Signed validator messages (consensus + DKG/ROAST). #[derive(Debug, Clone, Encode, Decode, Eq, PartialEq, derive_more::Unwrap, derive_more::From)] pub enum SignedValidatorMessage { + // Existing consensus messages Announce(SignedData), RequestBatchValidation(SignedData), ApproveBatch(SignedData), + + // DKG protocol messages + DkgRound1(SignedData), + DkgRound2(SignedData), + DkgRound2Culprits(SignedData), + DkgComplaint(SignedData), + DkgJustification(SignedData), + + // ROAST/FROST signing messages + SignSessionRequest(SignedData), + SignNonceCommit(SignedData), + SignNoncePackage(SignedData), + SignShare(SignedData), + SignCulprits(SignedData), + SignAggregate(SignedData), } impl SignedValidatorMessage { @@ -59,16 +109,48 @@ impl SignedValidatorMessage { request.into_verified().into() } SignedValidatorMessage::ApproveBatch(reply) => reply.into_verified().into(), + + // DKG messages + SignedValidatorMessage::DkgRound1(msg) => msg.into_verified().into(), + SignedValidatorMessage::DkgRound2(msg) => msg.into_verified().into(), + SignedValidatorMessage::DkgRound2Culprits(msg) => msg.into_verified().into(), + SignedValidatorMessage::DkgComplaint(msg) => msg.into_verified().into(), + SignedValidatorMessage::DkgJustification(msg) => msg.into_verified().into(), + + // ROAST messages + SignedValidatorMessage::SignSessionRequest(msg) => msg.into_verified().into(), + SignedValidatorMessage::SignNonceCommit(msg) => msg.into_verified().into(), + SignedValidatorMessage::SignNoncePackage(msg) => msg.into_verified().into(), + SignedValidatorMessage::SignShare(msg) => msg.into_verified().into(), + SignedValidatorMessage::SignCulprits(msg) => msg.into_verified().into(), + SignedValidatorMessage::SignAggregate(msg) => msg.into_verified().into(), } } } #[cfg_attr(feature = "serde", derive(Hash))] +/// Verified validator messages (signature checked). #[derive(Debug, Clone, Eq, PartialEq, derive_more::Unwrap, derive_more::From)] pub enum VerifiedValidatorMessage { + // Existing consensus messages Announce(VerifiedData), RequestBatchValidation(VerifiedData), ApproveBatch(VerifiedData), + + // DKG protocol messages + DkgRound1(VerifiedData), + DkgRound2(VerifiedData), + DkgRound2Culprits(VerifiedData), + DkgComplaint(VerifiedData), + DkgJustification(VerifiedData), + + // ROAST/FROST signing messages + SignSessionRequest(VerifiedData), + SignNonceCommit(VerifiedData), + SignNoncePackage(VerifiedData), + SignShare(VerifiedData), + SignCulprits(VerifiedData), + SignAggregate(VerifiedData), } impl VerifiedValidatorMessage { @@ -77,6 +159,21 @@ impl VerifiedValidatorMessage { VerifiedValidatorMessage::Announce(announce) => announce.data().era_index, VerifiedValidatorMessage::RequestBatchValidation(request) => request.data().era_index, VerifiedValidatorMessage::ApproveBatch(reply) => reply.data().era_index, + + // DKG messages + VerifiedValidatorMessage::DkgRound1(msg) => msg.data().era_index, + VerifiedValidatorMessage::DkgRound2(msg) => msg.data().era_index, + VerifiedValidatorMessage::DkgRound2Culprits(msg) => msg.data().era_index, + VerifiedValidatorMessage::DkgComplaint(msg) => msg.data().era_index, + VerifiedValidatorMessage::DkgJustification(msg) => msg.data().era_index, + + // ROAST messages + VerifiedValidatorMessage::SignSessionRequest(msg) => msg.data().era_index, + VerifiedValidatorMessage::SignNonceCommit(msg) => msg.data().era_index, + VerifiedValidatorMessage::SignNoncePackage(msg) => msg.data().era_index, + VerifiedValidatorMessage::SignShare(msg) => msg.data().era_index, + VerifiedValidatorMessage::SignCulprits(msg) => msg.data().era_index, + VerifiedValidatorMessage::SignAggregate(msg) => msg.data().era_index, } } @@ -85,6 +182,21 @@ impl VerifiedValidatorMessage { VerifiedValidatorMessage::Announce(announce) => announce.address(), VerifiedValidatorMessage::RequestBatchValidation(request) => request.address(), VerifiedValidatorMessage::ApproveBatch(reply) => reply.address(), + + // DKG messages + VerifiedValidatorMessage::DkgRound1(msg) => msg.address(), + VerifiedValidatorMessage::DkgRound2(msg) => msg.address(), + VerifiedValidatorMessage::DkgRound2Culprits(msg) => msg.address(), + VerifiedValidatorMessage::DkgComplaint(msg) => msg.address(), + VerifiedValidatorMessage::DkgJustification(msg) => msg.address(), + + // ROAST messages + VerifiedValidatorMessage::SignSessionRequest(msg) => msg.address(), + VerifiedValidatorMessage::SignNonceCommit(msg) => msg.address(), + VerifiedValidatorMessage::SignNoncePackage(msg) => msg.address(), + VerifiedValidatorMessage::SignShare(msg) => msg.address(), + VerifiedValidatorMessage::SignCulprits(msg) => msg.address(), + VerifiedValidatorMessage::SignAggregate(msg) => msg.address(), } } } diff --git a/ethexe/compute/Cargo.toml b/ethexe/compute/Cargo.toml index eed7240b76e..dc7ef34723a 100644 --- a/ethexe/compute/Cargo.toml +++ b/ethexe/compute/Cargo.toml @@ -20,7 +20,6 @@ futures.workspace = true tokio.workspace = true derive_more.workspace = true log.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gear-core.workspace = true diff --git a/ethexe/consensus/Cargo.toml b/ethexe/consensus/Cargo.toml index 232bb0c0b8c..7253bd51393 100644 --- a/ethexe/consensus/Cargo.toml +++ b/ethexe/consensus/Cargo.toml @@ -10,9 +10,16 @@ repository.workspace = true [dependencies] ethexe-db.workspace = true ethexe-service-utils.workspace = true -gsigner = { workspace = true, features = ["std", "secp256k1", "codec", "keyring", "serde"] } +gsigner = { workspace = true, features = [ + "std", + "secp256k1", + "codec", + "keyring", + "serde", +] } ethexe-ethereum.workspace = true ethexe-common.workspace = true +ethexe-dkg-roast = { workspace = true, features = ["test-utils"] } ethexe-runtime-common.workspace = true gprimitives = { workspace = true, features = ["codec", "std", "ethexe"] } @@ -21,6 +28,7 @@ tokio.workspace = true parity-scale-codec = { workspace = true, features = ["std", "derive"] } tracing.workspace = true anyhow = { workspace = true, features = ["std"] } +thiserror.workspace = true futures.workspace = true derive_more.workspace = true nonempty.workspace = true @@ -29,7 +37,6 @@ rand_chacha = "0.3" roast-secp256k1-evm.workspace = true hashbrown.workspace = true lru.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] tokio.workspace = true diff --git a/ethexe/consensus/src/connect/mod.rs b/ethexe/consensus/src/connect/mod.rs index 4afd0eda834..28f631a1a9b 100644 --- a/ethexe/consensus/src/connect/mod.rs +++ b/ethexe/consensus/src/connect/mod.rs @@ -31,7 +31,7 @@ use ethexe_common::{ consensus::{VerifiedAnnounce, VerifiedValidationRequest}, db::OnChainStorageRO, injected::SignedInjectedTransaction, - network::{AnnouncesRequest, AnnouncesResponse}, + network::{AnnouncesRequest, AnnouncesResponse, SignedValidatorMessage}, }; use ethexe_db::Database; use futures::{Stream, stream::FusedStream}; @@ -278,6 +278,20 @@ impl ConsensusService for ConnectService { Ok(()) } + fn receive_validator_message(&mut self, message: SignedValidatorMessage) -> Result<()> { + // In "connect-node" we do not process DKG/ROAST messages. + tracing::trace!("Received validator message: {message:?}. Ignoring it."); + Ok(()) + } + + fn receive_verified_validator_message( + &mut self, + message: ethexe_common::network::VerifiedValidatorMessage, + ) -> Result<()> { + tracing::trace!("Received verified validator message: {message:?}. Ignoring it."); + Ok(()) + } + fn receive_validation_request(&mut self, _batch: VerifiedValidationRequest) -> Result<()> { Ok(()) } diff --git a/ethexe/consensus/src/lib.rs b/ethexe/consensus/src/lib.rs index 1bd348bdec2..a3effe3ed8a 100644 --- a/ethexe/consensus/src/lib.rs +++ b/ethexe/consensus/src/lib.rs @@ -37,7 +37,9 @@ use ethexe_common::{ Announce, ComputedAnnounce, Digest, HashOf, SimpleBlockData, consensus::{BatchCommitmentValidationReply, VerifiedAnnounce, VerifiedValidationRequest}, injected::{SignedInjectedTransaction, SignedPromise}, - network::{AnnouncesRequest, AnnouncesResponse, SignedValidatorMessage}, + network::{ + AnnouncesRequest, AnnouncesResponse, SignedValidatorMessage, VerifiedValidatorMessage, + }, }; use futures::{Stream, stream::FusedStream}; use gprimitives::H256; @@ -52,8 +54,19 @@ mod tx_validation; mod utils; mod validator; +pub(crate) mod engine { + pub use ethexe_dkg_roast::engine::*; +} + +pub(crate) mod policy { + pub use ethexe_dkg_roast::policy::*; +} + #[cfg(test)] mod mock; +#[cfg(test)] +#[allow(dead_code)] +mod test_utils; pub trait ConsensusService: Stream> + FusedStream + Unpin + Send + 'static @@ -87,6 +100,15 @@ pub trait ConsensusService: /// Process a received injected transaction from network fn receive_injected_transaction(&mut self, tx: SignedInjectedTransaction) -> Result<()>; + + /// Process a received DKG/ROAST message + fn receive_validator_message(&mut self, message: SignedValidatorMessage) -> Result<()>; + + /// Process a received already verified DKG/ROAST message + fn receive_verified_validator_message( + &mut self, + message: VerifiedValidatorMessage, + ) -> Result<()>; } #[derive(Debug, Clone, PartialEq, Eq, derive_more::Display)] @@ -125,4 +147,6 @@ pub enum ConsensusEvent { /// Promises for [`ethexe_common::injected::InjectedTransaction`]s execution in some announce. #[from] Promises(Vec), + /// Broadcast DKG/ROAST message to all validators + BroadcastValidatorMessage(SignedValidatorMessage), } diff --git a/ethexe/consensus/src/test_utils.rs b/ethexe/consensus/src/test_utils.rs new file mode 100644 index 00000000000..e1697f3f2be --- /dev/null +++ b/ethexe/consensus/src/test_utils.rs @@ -0,0 +1,407 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::{ + engine::prelude::{ + DkgAction, DkgEngine, DkgEngineEvent, RoastEngine, RoastEngineEvent, RoastMessage, + }, + validator::{sign_dkg_action, sign_roast_message}, +}; +use anyhow::Result; +use ethexe_common::{ + Address, + crypto::{DkgPublicKeyPackage, DkgShare, DkgVssCommitment, SignAggregate}, + ecdsa::PrivateKey, + network::SignedValidatorMessage, +}; +use ethexe_db::Database; +use gprimitives::{ActorId, H256}; +use gsigner::secp256k1::Signer; +use std::collections::HashMap; + +/// Helper to create a test signer +fn create_test_signer(seed: u8) -> (Signer, Address) { + let signer = Signer::memory(); + let private_key = + PrivateKey::from_seed([seed; 32]).expect("seed should produce valid private key"); + let pub_key = signer.import(private_key).expect("imported private key"); + let address = pub_key.to_address(); + (signer, address) +} + +/// Simulates a network of validators +pub struct ValidatorNetwork { + validators: HashMap, + message_queue: Vec<(Address, SignedValidatorMessage)>, +} + +struct ValidatorNode { + dkg_engine: DkgEngine, + roast_engine: RoastEngine, + signer: Signer, + pub_key: ethexe_common::ecdsa::PublicKey, +} + +impl ValidatorNetwork { + pub fn new(num_validators: usize) -> Self { + let mut validators = HashMap::new(); + + for i in 0..num_validators { + let db = Database::memory(); + let (signer, address) = create_test_signer(i as u8 + 1); + let private_key = PrivateKey::from_seed([i as u8 + 1; 32]).expect("valid private key"); + let pub_key = signer.import(private_key).expect("imported private key"); + + let node = ValidatorNode { + dkg_engine: DkgEngine::new(db.clone(), address), + roast_engine: RoastEngine::new(db.clone(), address), + signer, + pub_key, + }; + + validators.insert(address, node); + } + + Self { + validators, + message_queue: Vec::new(), + } + } + + pub fn get_validator_addresses(&self) -> Vec
{ + let mut addresses: Vec
= self.validators.keys().copied().collect(); + addresses.sort(); + addresses + } + + pub fn coordinator_address(&self) -> Address { + self.get_validator_addresses()[0] + } + + pub fn broadcast_message(&mut self, msg: SignedValidatorMessage) { + for addr in self.validators.keys() { + self.message_queue.push((*addr, msg.clone())); + } + } + + pub fn broadcast_messages>(&mut self, msgs: I) { + for msg in msgs { + self.enqueue_message(msg); + } + } + + fn enqueue_message(&mut self, msg: SignedValidatorMessage) { + self.broadcast_message(msg); + } + + pub fn deliver_messages(&mut self) -> Result<()> { + let messages = std::mem::take(&mut self.message_queue); + + for (recipient, msg) in messages { + if let Some(node) = self.validators.get_mut(&recipient) { + // Process DKG messages + use ethexe_common::network::VerifiedValidatorMessage; + let verified = msg.into_verified(); + + let outgoing: Vec = match verified { + VerifiedValidatorMessage::DkgRound1(m) => { + let actions = node.dkg_engine.handle_event(DkgEngineEvent::Round1 { + from: m.address(), + message: Box::new(m.data().payload.clone()), + })?; + sign_dkg_actions(&node.signer, node.pub_key, actions)? + } + VerifiedValidatorMessage::DkgRound2(m) => { + let actions = node.dkg_engine.handle_event(DkgEngineEvent::Round2 { + from: m.address(), + message: m.data().payload.clone(), + })?; + sign_dkg_actions(&node.signer, node.pub_key, actions)? + } + VerifiedValidatorMessage::DkgRound2Culprits(m) => { + let actions = + node.dkg_engine + .handle_event(DkgEngineEvent::Round2Culprits { + from: m.address(), + message: m.data().payload.clone(), + })?; + sign_dkg_actions(&node.signer, node.pub_key, actions)? + } + VerifiedValidatorMessage::DkgComplaint(m) => { + let actions = node.dkg_engine.handle_event(DkgEngineEvent::Complaint { + from: m.address(), + message: m.data().payload.clone(), + })?; + sign_dkg_actions(&node.signer, node.pub_key, actions)? + } + VerifiedValidatorMessage::DkgJustification(m) => { + let actions = + node.dkg_engine + .handle_event(DkgEngineEvent::Justification { + from: m.address(), + message: m.data().payload.clone(), + })?; + sign_dkg_actions(&node.signer, node.pub_key, actions)? + } + VerifiedValidatorMessage::SignSessionRequest(m) => { + let messages = node.roast_engine.handle_event( + RoastEngineEvent::SignSessionRequest { + from: m.address(), + request: m.data().payload.clone(), + }, + )?; + sign_roast_messages(&node.signer, node.pub_key, messages)? + } + VerifiedValidatorMessage::SignNonceCommit(m) => { + let messages = + node.roast_engine + .handle_event(RoastEngineEvent::NonceCommit { + commit: m.data().payload.clone(), + })?; + sign_roast_messages(&node.signer, node.pub_key, messages)? + } + VerifiedValidatorMessage::SignNoncePackage(m) => { + let messages = + node.roast_engine + .handle_event(RoastEngineEvent::NoncePackage { + package: m.data().payload.clone(), + })?; + sign_roast_messages(&node.signer, node.pub_key, messages)? + } + VerifiedValidatorMessage::SignShare(m) => { + let messages = + node.roast_engine + .handle_event(RoastEngineEvent::SignShare { + partial: m.data().payload.clone(), + })?; + sign_roast_messages(&node.signer, node.pub_key, messages)? + } + VerifiedValidatorMessage::SignCulprits(m) => { + node.roast_engine + .handle_event(RoastEngineEvent::SignCulprits { + culprits: m.data().payload.clone(), + })?; + vec![] + } + VerifiedValidatorMessage::SignAggregate(m) => { + node.roast_engine + .handle_event(RoastEngineEvent::SignAggregate { + aggregate: m.data().payload.clone(), + })?; + vec![] + } + _ => vec![], + }; + + // Broadcast or route outgoing messages + for out_msg in outgoing { + self.enqueue_message(out_msg); + } + } + } + + Ok(()) + } + + pub fn process_until_idle(&mut self, max_rounds: usize) -> Result<()> { + for _ in 0..max_rounds { + if self.message_queue.is_empty() { + break; + } + self.deliver_messages()?; + } + Ok(()) + } + + pub fn start_dkg(&mut self, era: u64, threshold: u16) -> Result> { + let validator_addresses = self.get_validator_addresses(); + for addr in validator_addresses.clone() { + let messages = { + let node = self.validators.get_mut(&addr).unwrap(); + let actions = node.dkg_engine.handle_event(DkgEngineEvent::Start { + era, + validators: validator_addresses.clone(), + threshold, + })?; + sign_dkg_actions(&node.signer, node.pub_key, actions)? + }; + self.broadcast_messages(messages); + } + + Ok(validator_addresses) + } + + pub fn run_dkg(&mut self, era: u64, threshold: u16, max_rounds: usize) -> Result> { + let validator_addresses = self.start_dkg(era, threshold)?; + self.process_until_idle(max_rounds)?; + Ok(validator_addresses) + } + + pub fn start_roast_signing( + &mut self, + coordinator_addr: Address, + msg_hash: H256, + era: u64, + tweak_target: ActorId, + threshold: u16, + participants: Vec
, + ) -> Result<()> { + let messages = { + let coordinator = self.validators.get_mut(&coordinator_addr).unwrap(); + let messages = + coordinator + .roast_engine + .handle_event(RoastEngineEvent::StartSigning { + msg_hash, + era, + tweak_target, + threshold, + participants, + })?; + sign_roast_messages(&coordinator.signer, coordinator.pub_key, messages)? + }; + self.broadcast_messages(messages); + Ok(()) + } + + #[allow(clippy::too_many_arguments)] + pub fn run_roast_signing( + &mut self, + coordinator_addr: Address, + msg_hash: H256, + era: u64, + tweak_target: ActorId, + threshold: u16, + participants: Vec
, + max_rounds: usize, + ) -> Result { + self.start_roast_signing( + coordinator_addr, + msg_hash, + era, + tweak_target, + threshold, + participants.clone(), + )?; + self.process_until_idle(max_rounds)?; + + let coordinator = self.validators.get(&coordinator_addr).unwrap(); + coordinator + .roast_engine + .get_signature(msg_hash, era) + .ok_or_else(|| anyhow::anyhow!("Missing aggregate signature")) + } + + pub fn assert_dkg_completed(&self, era: u64) { + for (addr, node) in &self.validators { + assert!( + node.dkg_engine.is_completed(era), + "Validator {:?} did not complete DKG", + addr + ); + assert!( + node.dkg_engine.get_public_key_package(era).is_some(), + "Validator {:?} has no public key package", + addr + ); + } + } + + pub fn public_key_packages(&self, era: u64) -> Vec { + self.validators + .values() + .filter_map(|node| node.dkg_engine.get_public_key_package(era)) + .collect() + } + + pub fn vss_commitment(&self, era: u64) -> Option { + self.validators + .values() + .find_map(|node| node.dkg_engine.get_vss_commitment(era)) + } + + pub fn dkg_shares(&self, era: u64) -> Vec<(Address, Option)> { + let mut entries: Vec<(Address, Option)> = self + .validators + .iter() + .map(|(addr, node)| (*addr, node.dkg_engine.get_dkg_share(era))) + .collect(); + entries.sort_by_key(|(addr, _)| *addr); + entries + } + + pub fn signatures_by_validator( + &self, + msg_hash: H256, + era: u64, + ) -> Vec<(Address, Option)> { + let mut entries: Vec<(Address, Option)> = self + .validators + .iter() + .map(|(addr, node)| (*addr, node.roast_engine.get_signature(msg_hash, era))) + .collect(); + entries.sort_by_key(|(addr, _)| *addr); + entries + } + + pub fn cached_signatures_by_validator( + &self, + msg_hash: H256, + era: u64, + tweak_target: ActorId, + ) -> Vec<(Address, Option)> { + let mut entries: Vec<(Address, Option)> = self + .validators + .iter() + .map(|(addr, node)| { + ( + *addr, + node.roast_engine + .get_cached_signature(msg_hash, era, tweak_target), + ) + }) + .collect(); + entries.sort_by_key(|(addr, _)| *addr); + entries + } +} + +fn sign_dkg_actions( + signer: &Signer, + pub_key: ethexe_common::ecdsa::PublicKey, + actions: Vec, +) -> Result> { + let mut signed = Vec::new(); + for action in actions { + if let Some(msg) = sign_dkg_action(signer, pub_key, action)? { + signed.push(msg); + } + } + Ok(signed) +} + +fn sign_roast_messages( + signer: &Signer, + pub_key: ethexe_common::ecdsa::PublicKey, + messages: Vec, +) -> Result> { + messages + .into_iter() + .map(|msg| sign_roast_message(signer, pub_key, msg)) + .collect() +} diff --git a/ethexe/consensus/src/utils.rs b/ethexe/consensus/src/utils.rs index 874ba2aa9a3..da51585c97b 100644 --- a/ethexe/consensus/src/utils.rs +++ b/ethexe/consensus/src/utils.rs @@ -23,112 +23,135 @@ use anyhow::{Result, anyhow}; use ethexe_common::{ - Address, Announce, Digest, HashOf, SimpleBlockData, ToDigest, ValidatorsVec, - consensus::BatchCommitmentValidationReply, - db::{AnnounceStorageRO, BlockMetaStorageRO, CodesStorageRO, OnChainStorageRO}, - ecdsa::{ContractSignature, PublicKey}, + Address, Announce, HashOf, SimpleBlockData, ValidatorsVec, + db::{AnnounceStorageRO, BlockMetaStorageRO, CodesStorageRO, DkgStorageRO, OnChainStorageRO}, + ecdsa::PublicKey, gear::{ AggregatedPublicKey, BatchCommitment, ChainCommitment, CodeCommitment, RewardsCommitment, StateTransition, ValidatorsCommitment, }, }; use gprimitives::{CodeId, H256, U256}; -use gsigner::secp256k1::{Secp256k1SignerExt, Signer}; -use parity_scale_codec::{Decode, Encode}; -use rand::SeedableRng; -use roast_secp256k1_evm::frost::{ - Identifier, - keys::{self, IdentifierList, VerifiableSecretSharingCommitment}, -}; -use std::collections::{BTreeMap, HashSet}; +use std::collections::HashSet; /// How often to log warning during chain commitment aggregation const LOG_WARNING_FREQUENCY: u32 = 10_000; -/// A batch commitment, that has been signed by multiple validators. -/// This structure manages the collection of signatures from different validators -/// for a single batch commitment. -#[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] -pub struct MultisignedBatchCommitment { - batch: BatchCommitment, - batch_digest: Digest, - router_address: Address, - signatures: BTreeMap, +#[derive(Debug)] +pub struct ValidatorsCommitmentCountMismatch { + pub package_participants: usize, + pub elected_validators: usize, +} + +impl std::fmt::Display for ValidatorsCommitmentCountMismatch { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Elected validators count does not match DKG public key package: \ + package={}, elected={}", + self.package_participants, self.elected_validators + ) + } } -impl MultisignedBatchCommitment { - /// Creates a new multisigned batch commitment with an initial signature. - /// - /// # Arguments - /// * `batch` - The batch commitment to be signed - /// * `signer` - The contract signer used to create signatures - /// * `pub_key` - The public key of the initial signer - /// - /// # Returns - /// A new `MultisignedBatchCommitment` instance with the initial signature - pub fn new( +impl std::error::Error for ValidatorsCommitmentCountMismatch {} + +#[cfg(test)] +mod test_support { + use super::*; + use ethexe_common::{ + Digest, ToDigest, consensus::BatchCommitmentValidationReply, ecdsa::ContractSignature, + }; + use gsigner::secp256k1::{Secp256k1SignerExt, Signer}; + use parity_scale_codec::{Decode, Encode}; + use std::collections::BTreeMap; + + /// A batch commitment, that has been signed by multiple validators. + /// This structure manages the collection of signatures from different validators + /// for a single batch commitment. + #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] + pub struct MultisignedBatchCommitment { batch: BatchCommitment, - signer: &Signer, + batch_digest: Digest, router_address: Address, - pub_key: PublicKey, - ) -> Result { - let batch_digest = batch.to_digest(); - let signature = - signer.sign_for_contract_digest(router_address, pub_key, batch_digest, None)?; - let signatures: BTreeMap<_, _> = [(pub_key.to_address(), signature)].into_iter().collect(); - - Ok(Self { - batch, - batch_digest, - router_address, - signatures, - }) + signatures: BTreeMap, } - /// Accepts a validation reply from another validator and adds it's signature. - /// - /// # Arguments - /// * `reply` - The validation reply containing the signature - /// * `check_origin` - A closure to verify the origin of the signature - /// - /// # Returns - /// Result indicating success or failure of the operation - pub fn accept_batch_commitment_validation_reply( - &mut self, - reply: BatchCommitmentValidationReply, - check_origin: impl FnOnce(Address) -> Result<()>, - ) -> Result<()> { - let BatchCommitmentValidationReply { digest, signature } = reply; + impl MultisignedBatchCommitment { + /// Creates a new multisigned batch commitment with an initial signature. + /// + /// # Arguments + /// * `batch` - The batch commitment to be signed + /// * `signer` - The contract signer used to create signatures + /// * `pub_key` - The public key of the initial signer + /// + /// # Returns + /// A new `MultisignedBatchCommitment` instance with the initial signature + pub fn new( + batch: BatchCommitment, + signer: &Signer, + router_address: Address, + pub_key: PublicKey, + ) -> Result { + let batch_digest = batch.to_digest(); + let signature = + signer.sign_for_contract_digest(router_address, pub_key, batch_digest, None)?; + let signatures: BTreeMap<_, _> = + [(pub_key.to_address(), signature)].into_iter().collect(); + + Ok(Self { + batch, + batch_digest, + router_address, + signatures, + }) + } - anyhow::ensure!(digest == self.batch_digest, "Invalid reply digest"); + /// Accepts a validation reply from another validator and adds it's signature. + /// + /// # Arguments + /// * `reply` - The validation reply containing the signature + /// * `check_origin` - A closure to verify the origin of the signature + /// + /// # Returns + /// Result indicating success or failure of the operation + pub fn accept_batch_commitment_validation_reply( + &mut self, + reply: BatchCommitmentValidationReply, + check_origin: impl FnOnce(Address) -> Result<()>, + ) -> Result<()> { + let BatchCommitmentValidationReply { digest, signature } = reply; - let origin = signature - .validate(self.router_address, digest)? - .to_address(); + anyhow::ensure!(digest == self.batch_digest, "Invalid reply digest"); - check_origin(origin)?; + let origin_public_key = signature.validate(self.router_address, digest)?; - self.signatures.insert(origin, signature); + let origin = origin_public_key.to_address(); - Ok(()) - } + check_origin(origin)?; - /// Returns a reference to the map of validator addresses to their signatures - pub fn signatures(&self) -> &BTreeMap { - &self.signatures - } + self.signatures.insert(origin, signature); - /// Returns a reference to the underlying batch commitment - pub fn batch(&self) -> &BatchCommitment { - &self.batch - } + Ok(()) + } + + /// Returns a reference to the map of validator addresses to their signatures + pub fn signatures(&self) -> &BTreeMap { + &self.signatures + } - /// Consumes the structure and returns its parts - /// - /// # Returns - /// A tuple containing the batch commitment and the map of signatures - pub fn into_parts(self) -> (BatchCommitment, Vec) { - (self.batch, self.signatures.into_values().collect()) + /// Returns a reference to the underlying batch commitment + pub fn batch(&self) -> &BatchCommitment { + &self.batch + } + + /// Consumes the structure and returns its parts + /// + /// # Returns + /// A tuple containing the batch commitment and the map of signatures + pub fn into_parts(self) -> (BatchCommitment, Vec) { + (self.batch, self.signatures.into_values().collect()) + } } } @@ -218,36 +241,33 @@ pub fn try_aggregate_chain_commitment Result<(AggregatedPublicKey, VerifiableSecretSharingCommitment)> { - let validators_identifiers = validators - .iter() - .map(|validator| { - let mut bytes = [0u8; 32]; - bytes[12..32].copy_from_slice(&validator.0); - Identifier::deserialize(&bytes).unwrap() - }) - .collect::>(); - - let identifiers = IdentifierList::Custom(&validators_identifiers); - - let rng = rand_chacha::ChaCha8Rng::from_seed([1u8; 32]); - - let (mut secret_shares, public_key_package) = - keys::generate_with_dealer(validators.len() as u16, 1, identifiers, rng)?; - - let verifiable_secret_sharing_commitment = secret_shares - .pop_first() - .map(|(_key, value)| value.commitment().clone()) - .ok_or_else(|| anyhow!("Expect at least one identifier"))?; +pub fn validators_commitment( + db: &DB, + era: u64, + validators: ValidatorsVec, +) -> Result> { + let public_key_package = match db.public_key_package(era) { + Some(package) => package, + None => return Ok(None), + }; + let verifiable_secret_sharing_commitment = match db.dkg_vss_commitment(era) { + Some(commitment) => commitment, + None => return Ok(None), + }; + let package_participants = public_key_package.verifying_shares().len(); + if package_participants != validators.len() { + return Err(ValidatorsCommitmentCountMismatch { + package_participants, + elected_validators: validators.len(), + } + .into()); + } let public_key_compressed: [u8; 33] = public_key_package .verifying_key() .serialize()? .try_into() - .map_err(|_| anyhow!("Failed to convert public key to compressed format"))?; + .map_err(|_| anyhow!("Invalid aggregated public key length"))?; let public_key_uncompressed = PublicKey::from_bytes(public_key_compressed) .expect("valid aggregated public key") .to_uncompressed(); @@ -258,7 +278,12 @@ pub fn generate_roast_keys( y: U256::from_big_endian(public_key_y_bytes), }; - Ok((aggregated_public_key, verifiable_secret_sharing_commitment)) + Ok(Some(ValidatorsCommitment { + aggregated_public_key, + verifiable_secret_sharing_commitment, + validators, + era_index: era, + })) } pub fn create_batch_commitment( @@ -433,23 +458,25 @@ pub fn sort_transitions_by_value_to_receive(transitions: &mut [StateTransition]) #[cfg(test)] mod tests { - use super::*; + use super::{test_support::MultisignedBatchCommitment, *}; use crate::mock::*; - use ethexe_common::{db::*, mock::*}; + use ethexe_common::{ToDigest, consensus::BatchCommitmentValidationReply, db::*, mock::*}; use ethexe_db::Database; + use gsigner::secp256k1::Secp256k1SignerExt; const ADDRESS: Address = Address([42; 20]); #[test] - fn block_producer_index_calculates_correct_index() { - let validators_amount = 5; - let slot = 7; - let index = block_producer_index(validators_amount, slot); - assert_eq!(index, 2); + fn block_producer_index_matches_modulo_across_slots() { + let cases = [(1, 0, 0), (3, 2, 2), (3, 3, 0), (5, 7, 2), (5, 14, 4)]; + + for (validators_amount, slot, expected) in cases { + assert_eq!(block_producer_index(validators_amount, slot), expected); + } } #[test] - fn producer_for_calculates_correct_producer() { + fn block_producer_for_uses_slot_duration() { let validators = vec![ Address::from([1; 20]), Address::from([2; 20]), @@ -457,10 +484,14 @@ mod tests { ] .try_into() .unwrap(); - let timestamp = 10; + let slot_duration = 5; - let producer = block_producer_for(&validators, timestamp, 1); - assert_eq!(producer, validators[timestamp as usize % validators.len()]); + let cases = [(0, 0), (4, 0), (5, 1), (9, 1), (10, 2), (15, 0)]; + + for (timestamp, expected_index) in cases { + let producer = block_producer_for(&validators, timestamp, slot_duration); + assert_eq!(producer, validators[expected_index]); + } } #[test] @@ -474,8 +505,8 @@ mod tests { MultisignedBatchCommitment::new(batch.clone(), &signer, ADDRESS, pub_key) .expect("Failed to create multisigned batch commitment"); - assert_eq!(multisigned_batch.batch, batch); - assert_eq!(multisigned_batch.signatures.len(), 1); + assert_eq!(multisigned_batch.batch(), &batch); + assert_eq!(multisigned_batch.signatures().len(), 1); } #[test] @@ -489,23 +520,17 @@ mod tests { MultisignedBatchCommitment::new(batch, &signer, ADDRESS, pub_key).unwrap(); let other_pub_key = public_keys[1]; - let reply = BatchCommitmentValidationReply { - digest: multisigned_batch.batch_digest, - signature: signer - .sign_for_contract_digest( - ADDRESS, - other_pub_key, - multisigned_batch.batch_digest, - None, - ) - .unwrap(), - }; + let digest = multisigned_batch.batch().to_digest(); + let signature = signer + .sign_for_contract_digest(ADDRESS, other_pub_key, digest, None) + .unwrap(); + let reply = BatchCommitmentValidationReply { digest, signature }; multisigned_batch .accept_batch_commitment_validation_reply(reply.clone(), |_| Ok(())) .expect("Failed to accept batch commitment validation reply"); - assert_eq!(multisigned_batch.signatures.len(), 2); + assert_eq!(multisigned_batch.signatures().len(), 2); // Attempt to add the same reply again multisigned_batch @@ -513,7 +538,11 @@ mod tests { .expect("Failed to accept batch commitment validation reply"); // Ensure the number of signatures has not increased - assert_eq!(multisigned_batch.signatures.len(), 2); + assert_eq!(multisigned_batch.signatures().len(), 2); + + let (batch, signatures) = multisigned_batch.into_parts(); + assert_eq!(batch.to_digest(), digest); + assert_eq!(signatures.len(), 2); } #[test] @@ -536,7 +565,7 @@ mod tests { let result = multisigned_batch.accept_batch_commitment_validation_reply(reply, |_| Ok(())); assert!(result.is_err()); - assert_eq!(multisigned_batch.signatures.len(), 1); + assert_eq!(multisigned_batch.signatures().len(), 1); } #[test] @@ -550,30 +579,24 @@ mod tests { MultisignedBatchCommitment::new(batch, &signer, ADDRESS, pub_key).unwrap(); let other_pub_key = public_keys[1]; - let reply = BatchCommitmentValidationReply { - digest: multisigned_batch.batch_digest, - signature: signer - .sign_for_contract_digest( - ADDRESS, - other_pub_key, - multisigned_batch.batch_digest, - None, - ) - .unwrap(), - }; + let digest = multisigned_batch.batch().to_digest(); + let signature = signer + .sign_for_contract_digest(ADDRESS, other_pub_key, digest, None) + .unwrap(); + let reply = BatchCommitmentValidationReply { digest, signature }; // Case 1: check_origin allows the origin let result = multisigned_batch.accept_batch_commitment_validation_reply(reply.clone(), |_| Ok(())); assert!(result.is_ok()); - assert_eq!(multisigned_batch.signatures.len(), 2); + assert_eq!(multisigned_batch.signatures().len(), 2); // Case 2: check_origin rejects the origin let result = multisigned_batch.accept_batch_commitment_validation_reply(reply, |_| { anyhow::bail!("Origin not allowed") }); assert!(result.is_err()); - assert_eq!(multisigned_batch.signatures.len(), 2); + assert_eq!(multisigned_batch.signatures().len(), 2); } #[test] diff --git a/ethexe/consensus/src/validator/adapters/dkg.rs b/ethexe/consensus/src/validator/adapters/dkg.rs new file mode 100644 index 00000000000..e1cfe163dd9 --- /dev/null +++ b/ethexe/consensus/src/validator/adapters/dkg.rs @@ -0,0 +1,63 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::super::{StateHandler, ValidatorState}; +use crate::{ + engine::EngineContext, + policy::{DkgPolicyDecision, dkg_error_policy}, +}; +use anyhow::Error; +use ethexe_common::db::OnChainStorageRO; + +/// Applies DKG error policy and triggers restart when needed. +pub(crate) fn handle_dkg_error(s: &mut ValidatorState, era: u64, err: Error) { + s.warning(format!("DKG processing error for era {era}: {err}")); + if dkg_error_policy(&err) == DkgPolicyDecision::Ignore { + return; + } + // Reload validators from storage to rebuild the session config. + let Some(validators) = s.context().core.db.validators(era) else { + s.warning(format!( + "Unable to restart DKG for era {era}: validators missing" + )); + return; + }; + let validators: Vec<_> = validators.into_iter().collect(); + let threshold = ((validators.len() as u64 * 2) / 3).max(1) as u16; + match s + .context_mut() + .dkg_engine + .restart_with(era, validators, threshold) + { + Ok(actions) => { + s.warning(format!("Restarting DKG for era {era} after error")); + for action in actions { + if let Err(err) = s.context_mut().publish_dkg_action(action) { + s.warning(format!( + "Failed to broadcast DKG action for era {era}: {err}" + )); + } + } + } + Err(restart_err) => { + s.warning(format!( + "Failed to restart DKG for era {era}: {restart_err}" + )); + } + } +} diff --git a/ethexe/consensus/src/validator/adapters/messages.rs b/ethexe/consensus/src/validator/adapters/messages.rs new file mode 100644 index 00000000000..ae649ade3cc --- /dev/null +++ b/ethexe/consensus/src/validator/adapters/messages.rs @@ -0,0 +1,124 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::engine::prelude::{DkgAction, RoastMessage}; +use anyhow::Result; +use ethexe_common::{ + ecdsa::PublicKey, + network::{SignedValidatorMessage, ValidatorMessage}, +}; +use gsigner::secp256k1::{Secp256k1SignerExt, Signer}; + +/// Signs outbound DKG actions into validator network messages. +pub(crate) fn sign_dkg_action( + signer: &Signer, + pub_key: PublicKey, + action: DkgAction, +) -> Result> { + // Wrap action payload with era index and sign it. + let signed = match action { + DkgAction::BroadcastRound1(round1) => { + let message = ValidatorMessage { + era_index: round1.session.era, + payload: *round1, + }; + SignedValidatorMessage::DkgRound1(signer.signed_data(pub_key, message, None)?) + } + DkgAction::BroadcastRound2(round2) => { + let message = ValidatorMessage { + era_index: round2.session.era, + payload: round2, + }; + SignedValidatorMessage::DkgRound2(signer.signed_data(pub_key, message, None)?) + } + DkgAction::BroadcastComplaint(complaint) => { + let message = ValidatorMessage { + era_index: complaint.session.era, + payload: complaint, + }; + SignedValidatorMessage::DkgComplaint(signer.signed_data(pub_key, message, None)?) + } + DkgAction::BroadcastRound2Culprits(culprits) => { + let message = ValidatorMessage { + era_index: culprits.session.era, + payload: culprits, + }; + SignedValidatorMessage::DkgRound2Culprits(signer.signed_data(pub_key, message, None)?) + } + DkgAction::Complete(_result) => { + return Ok(None); + } + }; + + Ok(Some(signed)) +} + +/// Signs outbound ROAST messages into validator network messages. +pub(crate) fn sign_roast_message( + signer: &Signer, + pub_key: PublicKey, + msg: RoastMessage, +) -> Result { + // Wrap message payload with era index and sign it. + let signed = match msg { + RoastMessage::SignSessionRequest(request) => { + let message = ValidatorMessage { + era_index: request.session.era, + payload: request, + }; + SignedValidatorMessage::SignSessionRequest(signer.signed_data(pub_key, message, None)?) + } + RoastMessage::SignNonceCommit(commit) => { + let message = ValidatorMessage { + era_index: commit.session.era, + payload: commit, + }; + SignedValidatorMessage::SignNonceCommit(signer.signed_data(pub_key, message, None)?) + } + RoastMessage::SignNoncePackage(package) => { + let message = ValidatorMessage { + era_index: package.session.era, + payload: package, + }; + SignedValidatorMessage::SignNoncePackage(signer.signed_data(pub_key, message, None)?) + } + RoastMessage::SignShare(share) => { + let message = ValidatorMessage { + era_index: share.session.era, + payload: share, + }; + SignedValidatorMessage::SignShare(signer.signed_data(pub_key, message, None)?) + } + RoastMessage::SignAggregate(aggregate) => { + let message = ValidatorMessage { + era_index: aggregate.session.era, + payload: aggregate, + }; + SignedValidatorMessage::SignAggregate(signer.signed_data(pub_key, message, None)?) + } + RoastMessage::SignCulprits(culprits) => { + let message = ValidatorMessage { + era_index: culprits.session.era, + payload: culprits, + }; + SignedValidatorMessage::SignCulprits(signer.signed_data(pub_key, message, None)?) + } + }; + + Ok(signed) +} diff --git a/ethexe/consensus/src/validator/adapters/mod.rs b/ethexe/consensus/src/validator/adapters/mod.rs new file mode 100644 index 00000000000..7b1ba064bbd --- /dev/null +++ b/ethexe/consensus/src/validator/adapters/mod.rs @@ -0,0 +1,23 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +mod dkg; +mod messages; + +pub(crate) use dkg::handle_dkg_error; +pub(crate) use messages::{sign_dkg_action, sign_roast_message}; diff --git a/ethexe/consensus/src/validator/coordinator.rs b/ethexe/consensus/src/validator/coordinator.rs index 9b449d0b422..9a856193fdc 100644 --- a/ethexe/consensus/src/validator/coordinator.rs +++ b/ethexe/consensus/src/validator/coordinator.rs @@ -16,30 +16,32 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use super::{StateHandler, ValidatorContext, ValidatorState}; +use super::{StateHandler, ValidatorContext, ValidatorState, sign_roast_message}; use crate::{ BatchCommitmentValidationReply, CommitmentSubmitted, ConsensusEvent, - utils::MultisignedBatchCommitment, validator::initial::Initial, + engine::prelude::RoastEngineEvent, validator::initial::Initial, }; use anyhow::{Result, anyhow, ensure}; use derive_more::Display; -use ethexe_common::{ - Address, ToDigest, ValidatorsVec, consensus::BatchCommitmentValidationRequest, - gear::BatchCommitment, network::ValidatorMessage, -}; +use ethexe_common::{Address, Digest, ToDigest, ValidatorsVec, gear::BatchCommitment}; use futures::FutureExt; -use gsigner::secp256k1::Secp256k1SignerExt; +use gprimitives::{ActorId, H256}; +#[cfg(test)] +use gsigner::ContractSignature; +use gsigner::hash::keccak256_iter; use std::collections::BTreeSet; -/// [`Coordinator`] sends batch commitment validation request to other validators -/// and waits for validation replies. -/// Switches to [`Submitter`], after receiving enough validators replies from other validators. +/// [`Coordinator`] initiates ROAST threshold signing for batch commitment. +/// Waits for threshold signature to be completed, then switches to submission. #[derive(Debug, Display)] #[display("COORDINATOR")] pub struct Coordinator { ctx: ValidatorContext, validators: BTreeSet
, - multisigned_batch: MultisignedBatchCommitment, + pub(crate) batch: BatchCommitment, + pub(crate) batch_digest: Digest, + pub(crate) signing_hash: H256, + pub(crate) era_index: u64, } impl StateHandler for Coordinator { @@ -56,26 +58,13 @@ impl StateHandler for Coordinator { } fn process_validation_reply( - mut self, - reply: BatchCommitmentValidationReply, + self, + _reply: BatchCommitmentValidationReply, ) -> Result { - if let Err(err) = self - .multisigned_batch - .accept_batch_commitment_validation_reply(reply, |addr| { - self.validators - .contains(&addr) - .then_some(()) - .ok_or_else(|| anyhow!("Received validation reply is not known validator")) - }) - { - self.warning(format!("validation reply rejected: {err}")); - } - - if self.multisigned_batch.signatures().len() as u64 >= self.ctx.core.signatures_threshold { - Self::submission(self.ctx, self.multisigned_batch) - } else { - Ok(self.into()) - } + // Validation replies are no longer used with ROAST + // ROAST threshold signing handles coordination + tracing::trace!("Ignoring validation reply - using ROAST threshold signing"); + Ok(self.into()) } } @@ -95,50 +84,124 @@ impl Coordinator { "Threshold should be greater than 0" ); - let multisigned_batch = MultisignedBatchCommitment::new( - batch, - &ctx.core.signer, - ctx.core.router_address, - ctx.core.pub_key, - )?; - - if multisigned_batch.signatures().len() as u64 >= ctx.core.signatures_threshold { - return Self::submission(ctx, multisigned_batch); - } + // Use the batch timestamp to pick the signing era. + let era_index = ctx.core.timelines.era_from_ts(batch.timestamp); + let batch_digest = batch.to_digest(); - let era_index = ctx - .core - .timelines - .era_from_ts(multisigned_batch.batch().timestamp); - let payload = BatchCommitmentValidationRequest::new(multisigned_batch.batch()); - let message = ValidatorMessage { era_index, payload }; - - let validation_request = ctx - .core - .signer - .signed_data(ctx.core.pub_key, message, None)?; + tracing::info!( + era = era_index, + block_hash = %batch.block_hash, + "🔐 Starting ROAST threshold signing for batch commitment" + ); - ctx.output(ConsensusEvent::PublishMessage(validation_request.into())); + // Start ROAST signing session. + // Convert Digest to H256 (intended-validator hash) for ROAST. + let contract_digest = keccak256_iter([ + &[0x19, 0x00], + ctx.core.router_address.0.as_ref(), + batch_digest.0.as_ref(), + ]); + let msg_hash = H256(contract_digest); + + // Batch commitments use a zero tweak target. + let tweak_target = ActorId::zero(); + let threshold = ctx.core.signatures_threshold as u16; + let participants: Vec
= validators.clone().into(); + + let messages = ctx + .roast_engine + .handle_event(RoastEngineEvent::StartSigning { + msg_hash, + era: era_index, + tweak_target, + threshold, + participants, + })?; + + // Broadcast ROAST session request. + for msg in messages { + let signed = sign_roast_message(&ctx.core.signer, ctx.core.pub_key, msg)?; + ctx.output(ConsensusEvent::BroadcastValidatorMessage(signed)); + } Ok(Self { ctx, validators: validators.into_iter().collect(), - multisigned_batch, + batch, + batch_digest, + signing_hash: msg_hash, + era_index, } .into()) } + /// Called when ROAST threshold signature is complete + pub fn on_signature_complete(self) -> Result { + // Get the threshold signature from RoastEngine. + let signature = self + .ctx + .roast_engine + .get_signature(self.signing_hash, self.era_index) + .ok_or_else(|| anyhow!("Signature not found after completion"))?; + + Self::submission_frost(self.ctx, self.batch, signature) + } + + pub fn submission_frost( + ctx: ValidatorContext, + batch: BatchCommitment, + frost_signature: ethexe_common::crypto::frost::SignAggregate, + ) -> Result { + let cloned_committer = ctx.core.committer.clone_boxed(); + let validator_address = ctx.core.pub_key.to_address(); + + tracing::info!( + validator = %validator_address, + block_hash = %batch.block_hash, + "📤 Submitting batch commitment with FROST threshold signature" + ); + + ctx.tasks.push( + async move { + let block_hash = batch.block_hash; + let batch_digest = batch.to_digest(); + // Submit with FROST signature + let event = match cloned_committer.commit_frost(batch, frost_signature.signature96).await { + Ok(tx) => CommitmentSubmitted { + block_hash, + batch_digest, + tx, + }.into(), + Err(err) => ConsensusEvent::Warning(format!( + "Failed to submit FROST commitment for block {block_hash}, digest {batch_digest}: {err}" + )) + }; + Ok(event) + } + .boxed(), + ); + Initial::create(ctx) + } + + #[cfg(test)] pub fn submission( ctx: ValidatorContext, - multisigned_batch: MultisignedBatchCommitment, + batch: BatchCommitment, + threshold_signature: ContractSignature, ) -> Result { - let (batch, signatures) = multisigned_batch.into_parts(); let cloned_committer = ctx.core.committer.clone_boxed(); + + tracing::info!( + block_hash = %batch.block_hash, + "📤 Submitting batch commitment with ROAST threshold signature" + ); + ctx.tasks.push( async move { let block_hash = batch.block_hash; let batch_digest = batch.to_digest(); - let event = match cloned_committer.commit(batch, signatures).await { + // Submit with single threshold signature + let event = match cloned_committer.commit(batch, vec![threshold_signature]).await { Ok(tx) => CommitmentSubmitted { block_hash, batch_digest, @@ -160,8 +223,8 @@ impl Coordinator { mod tests { use super::*; use crate::{mock::*, validator::mock::*}; - use ethexe_common::{ToDigest, ValidatorsVec}; - use gprimitives::H256; + use ethexe_common::{Address, ToDigest, ValidatorsVec}; + use gsigner::secp256k1::Secp256k1SignerExt; use nonempty::NonEmpty; #[test] @@ -176,13 +239,24 @@ mod tests { .try_into() .unwrap(); let batch = BatchCommitment::default(); + let era_index = ctx.core.timelines.era_from_ts(batch.timestamp); + let validator_addrs: Vec
= validators.clone().into(); + setup_test_dkg( + &ctx.core.db, + &validator_addrs, + ctx.core.pub_key.to_address(), + ctx.core.signatures_threshold as u16, + era_index, + ) + .unwrap(); let coordinator = Coordinator::create(ctx, validators, batch).unwrap(); assert!(coordinator.is_coordinator()); - coordinator.context().output[0] - .clone() - .unwrap_publish_message() - .unwrap_request_batch_validation(); + // With ROAST, coordinator sends BroadcastValidatorMessage instead of PublishMessage + assert!( + !coordinator.context().output.is_empty(), + "Expected ROAST messages to be sent" + ); } #[test] @@ -222,59 +296,45 @@ mod tests { let batch = BatchCommitment::default(); let digest = batch.to_digest(); + let era_index = ctx.core.timelines.era_from_ts(batch.timestamp); + let validator_addrs: Vec
= validators.clone().into(); + setup_test_dkg( + &ctx.core.db, + &validator_addrs, + ctx.core.pub_key.to_address(), + ctx.core.signatures_threshold as u16, + era_index, + ) + .unwrap(); let reply1 = ctx .core .signer .validation_reply(keys[0], ctx.core.router_address, digest); - let reply2_invalid = - ctx.core - .signer - .validation_reply(keys[4], ctx.core.router_address, digest); - - let reply3_invalid = ctx.core.signer.validation_reply( - keys[1], - ctx.core.router_address, - H256::random().0.into(), - ); - - let reply4 = ctx - .core - .signer - .validation_reply(keys[2], ctx.core.router_address, digest); - - let mut coordinator = Coordinator::create(ctx, validators.into(), batch).unwrap(); + let coordinator = Coordinator::create(ctx, validators.into(), batch).unwrap(); assert!(coordinator.is_coordinator()); - coordinator.context().output[0] - .clone() - .unwrap_publish_message() - .unwrap_request_batch_validation(); - coordinator = coordinator.process_validation_reply(reply1).unwrap(); + // With ROAST, validation replies are ignored + let coordinator = coordinator.process_validation_reply(reply1).unwrap(); assert!(coordinator.is_coordinator()); - coordinator = coordinator - .process_validation_reply(reply2_invalid) - .unwrap(); - assert!(coordinator.is_coordinator()); - assert!(matches!( - coordinator.context().output[1], - ConsensusEvent::Warning(_) - )); + // Coordinator should still be waiting for ROAST signature + // (validation replies don't affect ROAST flow) + } - coordinator = coordinator - .process_validation_reply(reply3_invalid) + #[test] + fn submission_transitions_to_initial() { + let (ctx, _, _) = mock_validator_context(); + let batch = BatchCommitment::default(); + let digest = batch.to_digest(); + let signature = ctx + .core + .signer + .sign_for_contract_digest(ctx.core.router_address, ctx.core.pub_key, digest, None) .unwrap(); - assert!(coordinator.is_coordinator()); - assert!(matches!( - coordinator.context().output[2], - ConsensusEvent::Warning(_) - )); - - coordinator = coordinator.process_validation_reply(reply4).unwrap(); - assert!(coordinator.is_initial()); - assert_eq!(coordinator.context().output.len(), 3); - assert!(coordinator.context().tasks.len() == 1); + + let state = Coordinator::submission(ctx, batch, signature).unwrap(); + assert!(state.is_initial()); } } diff --git a/ethexe/consensus/src/validator/core.rs b/ethexe/consensus/src/validator/core.rs index e2b77be387a..03b0c57e52f 100644 --- a/ethexe/consensus/src/validator/core.rs +++ b/ethexe/consensus/src/validator/core.rs @@ -248,28 +248,8 @@ impl ValidatorCore { // Sort elected validators, because of RPC can not guarantee the determinism of returned validators order. elected_validators.sort(); - let (aggregated_public_key, verifiable_secret_sharing_commitment) = - match utils::generate_roast_keys(&elected_validators) { - Ok(keys) => keys, - Err(e) => { - tracing::error!( - error = %e, - block = %block.hash, - "Failed to generate ROAST keys for elected validators, skipping validators commitment" - ); - - return Ok(None); - } - }; - - let commitment = ValidatorsCommitment { - aggregated_public_key, - verifiable_secret_sharing_commitment, - validators: elected_validators, - era_index: block_era + 1, - }; - - Ok(Some(commitment)) + let commitment = utils::validators_commitment(&self.db, block_era + 1, elected_validators)?; + Ok(commitment) } // TODO #4742 @@ -379,14 +359,29 @@ impl ValidatorCore { }; let validators_commitment = if validators { - let Some(commitment) = Self::aggregate_validators_commitment(&mut self, &block).await? - else { - return Ok(ValidationStatus::Rejected { - request, - reason: ValidationRejectReason::ValidatorsNotReady, - }); - }; - Some(commitment) + match Self::aggregate_validators_commitment(&mut self, &block).await { + Ok(Some(commitment)) => Some(commitment), + Ok(None) => { + return Ok(ValidationStatus::Rejected { + request, + reason: ValidationRejectReason::ValidatorsNotReady, + }); + } + Err(err) => { + if let Some(mismatch) = + err.downcast_ref::() + { + return Ok(ValidationStatus::Rejected { + request, + reason: ValidationRejectReason::ValidatorsCommitmentMismatch { + expected: mismatch.package_participants, + found: mismatch.elected_validators, + }, + }); + } + return Err(err); + } + } } else { None }; @@ -468,6 +463,8 @@ pub enum ValidationRejectReason { "received batch contains validators commitment, but it's not time for validators election yet" )] ValidatorsNotReady, + #[display("validators commitment rejected: expected {expected} validators, got {found}")] + ValidatorsCommitmentMismatch { expected: usize, found: usize }, #[display( "received batch contains rewards commitment, but it's not time for rewards distribution yet" )] @@ -482,11 +479,11 @@ pub trait BatchCommitter: Send { /// Creates a boxed clone of the committer. fn clone_boxed(&self) -> Box; - /// Commits a batch of signed commitments to the blockchain. + /// Commits a batch of signed commitments to the blockchain with ECDSA signatures. /// /// # Arguments /// * `batch` - The batch of commitments to commit - /// * `signatures` - The signatures for the batch commitments + /// * `signatures` - The ECDSA signatures for the batch commitments /// /// # Returns /// The hash of the transaction that was sent to the blockchain @@ -495,6 +492,20 @@ pub trait BatchCommitter: Send { batch: BatchCommitment, signatures: Vec, ) -> Result; + + /// Commits a batch of signed commitments to the blockchain with FROST threshold signature. + /// + /// # Arguments + /// * `batch` - The batch of commitments to commit + /// * `signature96` - The 96-byte FROST threshold signature (R_x || R_y || z) + /// + /// # Returns + /// The hash of the transaction that was sent to the blockchain + async fn commit_frost( + self: Box, + batch: BatchCommitment, + signature96: [u8; 96], + ) -> Result; } impl From for Box { @@ -570,6 +581,16 @@ impl BatchCommitter for Router { self.commit_batch(batch, signatures).await } + + async fn commit_frost( + self: Box, + batch: BatchCommitment, + signature96: [u8; 96], + ) -> Result { + tracing::debug!("Batch commitment with FROST signature to submit: {batch:?}"); + + self.commit_batch_frost(batch, signature96).await + } } #[cfg(test)] @@ -834,6 +855,12 @@ mod tests { validators2.clone(), ); + // Setup DKG for eras 1 and 2 (era 0 election commits validators for era 1, etc.) + let v1: Vec
= validators1.clone().into(); + let v2: Vec
= validators2.clone().into(); + setup_test_dkg(&ctx.core.db, &v1, Address([1; 20]), 2, 1).unwrap(); + setup_test_dkg(&ctx.core.db, &v2, Address([4; 20]), 2, 2).unwrap(); + // Before election let commitment = ctx .core diff --git a/ethexe/consensus/src/validator/dispatcher.rs b/ethexe/consensus/src/validator/dispatcher.rs new file mode 100644 index 00000000000..40d91eab1db --- /dev/null +++ b/ethexe/consensus/src/validator/dispatcher.rs @@ -0,0 +1,221 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::{StateHandler, ValidatorState}; +use crate::{ + engine::{ + EngineContext, + prelude::{DkgEngineEvent, RoastEngineEvent}, + }, + policy::is_recoverable_roast_request_error, + validator::adapters::handle_dkg_error, +}; +use anyhow::Result; +use ethexe_common::network::VerifiedValidatorMessage; + +/// Routes verified network messages into DKG/ROAST engines. +pub(crate) fn handle_verified_validator_message( + mut state: ValidatorState, + message: VerifiedValidatorMessage, +) -> Result { + match message { + VerifiedValidatorMessage::DkgRound1(msg) => { + let era = msg.data().payload.session.era; + let event = DkgEngineEvent::Round1 { + from: msg.address(), + message: Box::new(msg.data().payload.clone()), + }; + handle_dkg_event(&mut state, era, event)?; + } + VerifiedValidatorMessage::DkgRound2(msg) => { + let era = msg.data().payload.session.era; + let event = DkgEngineEvent::Round2 { + from: msg.address(), + message: msg.data().payload.clone(), + }; + handle_dkg_event(&mut state, era, event)?; + } + VerifiedValidatorMessage::DkgRound2Culprits(msg) => { + let era = msg.data().payload.session.era; + let event = DkgEngineEvent::Round2Culprits { + from: msg.address(), + message: msg.data().payload.clone(), + }; + handle_dkg_event(&mut state, era, event)?; + } + VerifiedValidatorMessage::DkgComplaint(msg) => { + let era = msg.data().payload.session.era; + let event = DkgEngineEvent::Complaint { + from: msg.address(), + message: msg.data().payload.clone(), + }; + handle_dkg_event(&mut state, era, event)?; + } + VerifiedValidatorMessage::DkgJustification(msg) => { + let era = msg.data().payload.session.era; + let event = DkgEngineEvent::Justification { + from: msg.address(), + message: msg.data().payload.clone(), + }; + handle_dkg_event(&mut state, era, event)?; + } + VerifiedValidatorMessage::SignSessionRequest(msg) => { + let request = msg.data().payload.clone(); + tracing::debug!( + era = request.session.era, + msg_hash = %request.msg_hash, + leader = %request.leader, + attempt = request.attempt, + from = %msg.address(), + "ROAST sign session request received" + ); + // Delegate to ROAST engine and publish outbound messages. + let result = state.context_mut().roast_engine.handle_event( + RoastEngineEvent::SignSessionRequest { + from: msg.address(), + request: request.clone(), + }, + ); + match result { + Ok(messages) => { + for msg in messages { + state.context_mut().publish_roast_message(msg)?; + } + } + Err(err) => { + let era = request.session.era; + let recoverable = is_recoverable_roast_request_error(&err); + state.warning(format!("ROAST sign request failed for era {era}: {err}")); + if recoverable { + // Recoverable errors trigger a DKG restart for that era. + match state.context_mut().dkg_engine.restart_with( + era, + request.participants.clone(), + request.threshold, + ) { + Ok(actions) => { + state.warning(format!( + "Restarting DKG for era {era} after invalid share data" + )); + for action in actions { + state.context_mut().publish_dkg_action(action)?; + } + } + Err(restart_err) => { + state.warning(format!( + "Failed to restart DKG for era {era}: {restart_err}" + )); + } + } + } else { + return Err(err); + } + } + } + } + VerifiedValidatorMessage::SignNonceCommit(msg) => { + let messages = + state + .context_mut() + .roast_engine + .handle_event(RoastEngineEvent::NonceCommit { + commit: msg.data().payload.clone(), + })?; + for msg in messages { + state.context_mut().publish_roast_message(msg)?; + } + } + VerifiedValidatorMessage::SignNoncePackage(msg) => { + let messages = + state + .context_mut() + .roast_engine + .handle_event(RoastEngineEvent::NoncePackage { + package: msg.data().payload.clone(), + })?; + for msg in messages { + state.context_mut().publish_roast_message(msg)?; + } + } + VerifiedValidatorMessage::SignShare(msg) => { + let messages = + state + .context_mut() + .roast_engine + .handle_event(RoastEngineEvent::SignShare { + partial: msg.data().payload.clone(), + })?; + for msg in messages { + state.context_mut().publish_roast_message(msg)?; + } + } + VerifiedValidatorMessage::SignCulprits(msg) => { + state + .context_mut() + .roast_engine + .handle_event(RoastEngineEvent::SignCulprits { + culprits: msg.data().payload.clone(), + })?; + } + VerifiedValidatorMessage::SignAggregate(msg) => { + let aggregate = msg.data().payload.clone(); + tracing::info!( + era = msg.data().era_index, + msg_hash = %aggregate.msg_hash, + "Received ROAST aggregate signature" + ); + + // Store aggregate in ROAST engine and notify coordinator if needed. + state + .context_mut() + .roast_engine + .handle_event(RoastEngineEvent::SignAggregate { + aggregate: aggregate.clone(), + })?; + + if let ValidatorState::Coordinator(coordinator) = state { + if coordinator.signing_hash == aggregate.msg_hash { + tracing::info!( + block_hash = %coordinator.batch.block_hash, + "✅ ROAST threshold signature completed for batch" + ); + return coordinator.on_signature_complete(); + } + return Ok(coordinator.into()); + } + } + _ => { + tracing::warn!("Unexpected validator message type received"); + } + } + + Ok(state) +} + +/// Applies a DKG event and publishes any resulting outbound actions. +fn handle_dkg_event(state: &mut ValidatorState, era: u64, event: DkgEngineEvent) -> Result<()> { + match state.context_mut().dkg_engine.handle_event(event) { + Ok(actions) => { + for action in actions { + state.context_mut().publish_dkg_action(action)?; + } + } + Err(err) => handle_dkg_error(state, era, err), + } + Ok(()) +} diff --git a/ethexe/consensus/src/validator/initial.rs b/ethexe/consensus/src/validator/initial.rs index 40d4f0fee51..4e6c22e4f10 100644 --- a/ethexe/consensus/src/validator/initial.rs +++ b/ethexe/consensus/src/validator/initial.rs @@ -18,19 +18,12 @@ use std::collections::VecDeque; -use super::{ - DefaultProcessing, StateHandler, ValidatorContext, ValidatorState, producer::Producer, - subordinate::Subordinate, -}; -use crate::{ - announces::{self, DBAnnouncesExt}, - utils, -}; -use anyhow::{Result, anyhow}; +use super::{DefaultProcessing, StateHandler, ValidatorContext, ValidatorState}; +use crate::announces::{self, DBAnnouncesExt}; +use anyhow::Result; use derive_more::{Debug, Display}; use ethexe_common::{ SimpleBlockData, - db::OnChainStorageRO, network::{AnnouncesRequest, AnnouncesResponse}, }; use gprimitives::H256; @@ -102,6 +95,7 @@ impl StateHandler for Initial { fn process_new_head(mut self, block: SimpleBlockData) -> Result { // TODO #4555: block producer could be calculated right here, using propagation from previous blocks. + // Start sync pipeline for the new head. self.state = WaitingFor::SyncedBlock(block); Ok(self.into()) @@ -111,6 +105,7 @@ impl StateHandler for Initial { if let WaitingFor::SyncedBlock(block) = &self.state && block.hash == block_hash { + // Once synced, wait for computation/preparation. self.state = WaitingFor::PreparedBlock(*block); Ok(self.into()) @@ -123,6 +118,7 @@ impl StateHandler for Initial { if let WaitingFor::PreparedBlock(block) = &self.state && block.hash == block_hash { + // Ensure announces chain is complete before switching roles. let chain = self .ctx .core @@ -139,6 +135,7 @@ impl StateHandler for Initial { self.ctx.core.commitment_delay_limit, )? { + // Request missing announces before entering producer/subordinate flow. tracing::debug!( "Missing announces detected for block {block_hash}, send request: {request:?}" ); @@ -157,6 +154,7 @@ impl StateHandler for Initial { } else { tracing::debug!(block = %block.hash, "No missing announces"); + // Propagate announces and enter producer/subordinate role. announces::propagate_announces( &self.ctx.core.db, chain, @@ -221,41 +219,6 @@ impl Initial { } } -impl ValidatorContext { - fn switch_to_producer_or_subordinate(self, block: SimpleBlockData) -> Result { - let era_index = self.core.timelines.era_from_ts(block.header.timestamp); - let validators = self - .core - .db - .validators(era_index) - .ok_or(anyhow!("validators not found for era {era_index}"))?; - - let producer = utils::block_producer_for( - &validators, - block.header.timestamp, - self.core.slot_duration.as_secs(), - ); - let my_address = self.core.pub_key.to_address(); - - if my_address == producer { - tracing::info!(block = %block.hash, "👷 Start to work as a producer"); - - Producer::create(self, block, validators.clone()) - } else { - // TODO #4636: add test (in ethexe-service) for case where is not validator for current block - let is_validator_for_current_block = validators.contains(&my_address); - - tracing::info!( - block = %block.hash, - "👷 Start to work as subordinate, producer is {producer}, \ - I'm validator for current block: {is_validator_for_current_block}", - ); - - Subordinate::create(self, block, producer, is_validator_for_current_block) - } - } -} - #[cfg(test)] mod tests { use std::num::NonZeroU32; diff --git a/ethexe/consensus/src/validator/mock.rs b/ethexe/consensus/src/validator/mock.rs index b503c1e0f23..8d7c962c535 100644 --- a/ethexe/consensus/src/validator/mock.rs +++ b/ethexe/consensus/src/validator/mock.rs @@ -17,14 +17,22 @@ // along with this program. If not, see . use super::{core::*, *}; +use crate::engine::prelude::{DkgEngine, RoastEngine}; use anyhow::anyhow; use async_trait::async_trait; use ethexe_common::{ - COMMITMENT_DELAY_LIMIT, DEFAULT_BLOCK_GAS_LIMIT, ProtocolTimelines, ValidatorsVec, - consensus::DEFAULT_CHAIN_DEEPNESS_THRESHOLD, db::OnChainStorageRW, ecdsa::ContractSignature, - gear::BatchCommitment, mock::*, + Address, COMMITMENT_DELAY_LIMIT, DEFAULT_BLOCK_GAS_LIMIT, ProtocolTimelines, ValidatorsVec, + consensus::DEFAULT_CHAIN_DEEPNESS_THRESHOLD, + crypto::{DkgIdentifier, DkgKeyPackage, DkgShare}, + db::{DkgStorageRW, OnChainStorageRW}, + ecdsa::ContractSignature, + gear::BatchCommitment, + mock::*, }; +use ethexe_db::Database; use hashbrown::HashMap; +use rand::rngs::OsRng; +use roast_secp256k1_evm::frost::keys::{IdentifierList, generate_with_dealer}; use std::sync::Arc; use tokio::sync::RwLock; @@ -53,6 +61,17 @@ impl BatchCommitter for MockEthereum { .replace((batch, signatures)); Ok(H256::random()) } + + async fn commit_frost( + self: Box, + batch: BatchCommitment, + _signature96: [u8; 96], + ) -> Result { + // For mock, we don't need to verify FROST signature + // Just store the batch with empty signatures vector + self.committed_batch.write().await.replace((batch, vec![])); + Ok(H256::random()) + } } #[async_trait] @@ -149,15 +168,19 @@ pub fn mock_validator_context() -> (ValidatorContext, Vec, MockEthere let db = Database::memory(); let timelines = ProtocolTimelines::mock(()); + let pub_key = keys.pop().unwrap(); + let self_address = pub_key.to_address(); + + // Build a validator context with in-memory DB and DKG/ROAST engines. let ctx = ValidatorContext { core: ValidatorCore { slot_duration: Duration::from_secs(1), signatures_threshold: 1, router_address: 12345.into(), - pub_key: keys.pop().unwrap(), + pub_key, timelines, block_gas_limit: DEFAULT_BLOCK_GAS_LIMIT, - signer, + signer: signer.clone(), db: db.clone(), committer: Box::new(ethereum.clone()), middleware: MiddlewareWrapper::from_inner(ethereum.clone()), @@ -169,9 +192,76 @@ pub fn mock_validator_context() -> (ValidatorContext, Vec, MockEthere pending_events: VecDeque::new(), output: VecDeque::new(), tasks: Default::default(), + dkg_engine: DkgEngine::new(db.clone(), self_address), + roast_engine: RoastEngine::new(db, self_address), }; + // Persist timelines for era computations in tests. ctx.core.db.set_protocol_timelines(timelines); (ctx, keys, ethereum) } + +pub fn setup_test_dkg( + db: &Database, + validators: &[Address], + self_address: Address, + threshold: u16, + era: u64, +) -> Result<()> { + // Deterministic ordering for identifier derivation. + let mut participants = validators.to_vec(); + participants.sort(); + + let identifiers = participants + .iter() + .map(|addr| { + DkgIdentifier::derive(addr.as_ref()).map_err(|_| anyhow!("Failed to derive identifier")) + }) + .collect::>>()?; + + let rng = OsRng; + // Create a synthetic DKG output using the FROST dealer helper. + let (secret_shares, public_key_package) = generate_with_dealer( + participants.len() as u16, + threshold, + IdentifierList::Custom(&identifiers), + rng, + ) + .map_err(|err| anyhow!("Failed to generate test DKG keys: {err}"))?; + + // Persist public key package for ROAST verification. + db.set_public_key_package(era, public_key_package); + + // Extract and persist VSS commitment from the first secret share. + if let Some((_, first_share)) = secret_shares.iter().next() { + let vss_commitment = first_share.commitment().clone(); + db.set_dkg_vss_commitment(era, vss_commitment); + } + + if let Some(self_idx) = participants.iter().position(|addr| *addr == self_address) { + let identifier = identifiers[self_idx]; + let secret_share = secret_shares + .get(&identifier) + .ok_or_else(|| anyhow!("Missing secret share for self"))?; + // Build a local key package + share for the test validator. + let key_package = DkgKeyPackage::try_from(secret_share.clone()) + .map_err(|err| anyhow!("Failed to build key package: {err}"))?; + let verifying_share = key_package + .verifying_share() + .serialize() + .map_err(|err| anyhow!("Failed to serialize verifying share: {err}"))?; + let share = DkgShare { + era, + identifier, + index: (self_idx + 1) as u16, + signing_share: key_package.signing_share().serialize(), + verifying_share, + threshold, + }; + db.set_dkg_key_package(era, key_package); + db.set_dkg_share(share); + } + + Ok(()) +} diff --git a/ethexe/consensus/src/validator/mod.rs b/ethexe/consensus/src/validator/mod.rs index 2c303ae7e74..19f02baa588 100644 --- a/ethexe/consensus/src/validator/mod.rs +++ b/ethexe/consensus/src/validator/mod.rs @@ -40,26 +40,28 @@ //! * Each state can be interrupted by a new chain head -> switches to [`Initial`] immediately. use crate::{ - BatchCommitmentValidationReply, ConsensusEvent, ConsensusService, + BatchCommitmentValidationReply, ComputedAnnounce, ConsensusEvent, ConsensusService, + VerifiedAnnounce, VerifiedValidationRequest, + engine::{ + EngineContext, + prelude::{DkgEngine, RoastEngine}, + }, + utils, validator::{ - coordinator::Coordinator, core::{MiddlewareWrapper, ValidatorCore}, - participant::Participant, - producer::Producer, - subordinate::Subordinate, tx_pool::InjectedTxPool, }, }; +pub(crate) use adapters::{sign_dkg_action, sign_roast_message}; use anyhow::{Result, anyhow}; pub use core::BatchCommitter; -use derive_more::{Debug, From}; +use derive_more::Debug; use ethexe_common::{ - Address, ComputedAnnounce, SimpleBlockData, ToDigest, - consensus::{VerifiedAnnounce, VerifiedValidationRequest}, + Address, SimpleBlockData, ToDigest, db::OnChainStorageRO, ecdsa::{PublicKey, SignedMessage}, injected::SignedInjectedTransaction, - network::AnnouncesResponse, + network::{AnnouncesResponse, SignedValidatorMessage}, }; use ethexe_db::Database; use ethexe_ethereum::middleware::ElectionProvider; @@ -73,22 +75,30 @@ use gsigner::secp256k1::{Secp256k1SignerExt, Signer}; use initial::Initial; use std::{ collections::VecDeque, - fmt, pin::Pin, task::{Context, Poll}, time::Duration, }; +mod adapters; mod coordinator; mod core; +mod dispatcher; mod initial; mod participant; mod producer; +mod state; mod subordinate; mod tx_pool; +pub(crate) type DkgEngineDb = DkgEngine; +pub(crate) type RoastEngineDb = RoastEngine; +pub(crate) use state::{DefaultProcessing, PendingEvent, StateHandler, ValidatorState}; + #[cfg(test)] mod mock; +#[allow(unused_imports)] +pub(crate) use crate::engine::roast::RoastMessage; /// The main validator service that implements the `ConsensusService` trait. /// This service manages the validation workflow. @@ -137,6 +147,9 @@ impl ValidatorService { let timelines = db .protocol_timelines() .ok_or_else(|| anyhow!("Protocol timelines not found in database"))?; + + let self_address = config.pub_key.to_address(); + let ctx = ValidatorContext { core: ValidatorCore { slot_duration: config.slot_duration, @@ -144,11 +157,11 @@ impl ValidatorService { router_address: config.router_address, pub_key: config.pub_key, timelines, - signer, + signer: signer.clone(), db: db.clone(), committer: committer.into(), middleware: MiddlewareWrapper::from_inner(election_provider), - injected_pool: InjectedTxPool::new(db), + injected_pool: InjectedTxPool::new(db.clone()), chain_deepness_threshold: config.chain_deepness_threshold, block_gas_limit: config.block_gas_limit, commitment_delay_limit: config.commitment_delay_limit, @@ -157,6 +170,8 @@ impl ValidatorService { pending_events: VecDeque::new(), output: VecDeque::new(), tasks: Default::default(), + dkg_engine: DkgEngine::new(db.clone(), self_address), + roast_engine: RoastEngine::new(db, self_address), }; Ok(Self { @@ -233,6 +248,17 @@ impl ConsensusService for ValidatorService { fn receive_injected_transaction(&mut self, tx: SignedInjectedTransaction) -> Result<()> { self.update_inner(|inner| inner.process_injected_transaction(tx)) } + + fn receive_validator_message(&mut self, message: SignedValidatorMessage) -> Result<()> { + self.update_inner(|inner| inner.process_validator_message(message)) + } + + fn receive_verified_validator_message( + &mut self, + message: ethexe_common::network::VerifiedValidatorMessage, + ) -> Result<()> { + self.update_inner(|inner| inner.process_verified_validator_message(message)) + } } impl Stream for ValidatorService { @@ -258,6 +284,18 @@ impl Stream for ValidatorService { ctx.output(res?); } + // Drive DKG timeouts and publish any resulting messages. + for action in ctx.dkg_engine.tick_timeouts()? { + if let Some(msg) = sign_dkg_action(&ctx.core.signer, ctx.core.pub_key, action)? { + ctx.output(ConsensusEvent::BroadcastValidatorMessage(msg)); + } + } + // Drive ROAST timeouts and publish any resulting messages. + for msg in ctx.roast_engine.tick_timeouts()? { + let signed = sign_roast_message(&ctx.core.signer, ctx.core.pub_key, msg)?; + ctx.output(ConsensusEvent::BroadcastValidatorMessage(signed)); + } + Ok(inner) })?; @@ -275,255 +313,9 @@ impl FusedStream for ValidatorService { } } -/// An event that can be saved for later processing. -#[derive(Clone, Debug, From, PartialEq, Eq, derive_more::IsVariant)] -enum PendingEvent { - /// A block from the producer - Announce(VerifiedAnnounce), - /// A validation request - ValidationRequest(VerifiedValidationRequest), -} - -/// Trait defining the interface for validator inner state and events handler. -trait StateHandler -where - Self: Sized + Into + fmt::Display, -{ - fn context(&self) -> &ValidatorContext; - - fn context_mut(&mut self) -> &mut ValidatorContext; - - fn into_context(self) -> ValidatorContext; - - fn warning(&mut self, warning: impl fmt::Display) { - let warning = format!("{self} - {warning}"); - self.context_mut() - .output - .push_back(ConsensusEvent::Warning(warning)); - } - - fn process_new_head(self, block: SimpleBlockData) -> Result { - DefaultProcessing::new_head(self.into(), block) - } - - fn process_synced_block(self, block: H256) -> Result { - DefaultProcessing::synced_block(self.into(), block) - } - - fn process_prepared_block(self, block: H256) -> Result { - DefaultProcessing::prepared_block(self.into(), block) - } - - fn process_computed_announce(self, computed_data: ComputedAnnounce) -> Result { - DefaultProcessing::computed_announce(self.into(), computed_data) - } - - fn process_announce(self, announce: VerifiedAnnounce) -> Result { - DefaultProcessing::announce_from_producer(self, announce) - } - - fn process_validation_request( - self, - request: VerifiedValidationRequest, - ) -> Result { - DefaultProcessing::validation_request(self, request) - } - - fn process_validation_reply( - self, - reply: BatchCommitmentValidationReply, - ) -> Result { - DefaultProcessing::validation_reply(self, reply) - } - - fn process_announces_response(self, _response: AnnouncesResponse) -> Result { - DefaultProcessing::announces_response(self, _response) - } - - fn process_injected_transaction(self, tx: SignedInjectedTransaction) -> Result { - DefaultProcessing::injected_transaction(self, tx) - } - - fn poll_next_state(self, _cx: &mut Context<'_>) -> Result<(Poll<()>, ValidatorState)> { - Ok((Poll::Pending, self.into())) - } -} - -#[allow(clippy::large_enum_variant)] -#[derive( - Debug, derive_more::Display, derive_more::From, derive_more::IsVariant, derive_more::Unwrap, -)] -enum ValidatorState { - Initial(Initial), - Producer(Producer), - Coordinator(Coordinator), - Subordinate(Subordinate), - Participant(Participant), -} - -macro_rules! delegate_call { - ($this:ident => $func:ident( $( $arg:ident ),* )) => { - match $this { - ValidatorState::Initial(initial) => initial.$func($( $arg ),*), - ValidatorState::Producer(producer) => producer.$func($( $arg ),*), - ValidatorState::Coordinator(coordinator) => coordinator.$func($( $arg ),*), - ValidatorState::Subordinate(subordinate) => subordinate.$func($( $arg ),*), - ValidatorState::Participant(participant) => participant.$func($( $arg ),*), - } - }; -} - -impl StateHandler for ValidatorState { - fn context(&self) -> &ValidatorContext { - delegate_call!(self => context()) - } - - fn context_mut(&mut self) -> &mut ValidatorContext { - delegate_call!(self => context_mut()) - } - - fn into_context(self) -> ValidatorContext { - delegate_call!(self => into_context()) - } - - fn warning(&mut self, warning: impl fmt::Display) { - delegate_call!(self => warning(warning)) - } - - fn process_new_head(self, block: SimpleBlockData) -> Result { - delegate_call!(self => process_new_head(block)) - } - - fn process_synced_block(self, block: H256) -> Result { - delegate_call!(self => process_synced_block(block)) - } - - fn process_prepared_block(self, block: H256) -> Result { - delegate_call!(self => process_prepared_block(block)) - } - - fn process_computed_announce(self, computed_data: ComputedAnnounce) -> Result { - delegate_call!(self => process_computed_announce(computed_data)) - } - - fn process_announce(self, verified_announce: VerifiedAnnounce) -> Result { - delegate_call!(self => process_announce(verified_announce)) - } - - fn process_validation_request( - self, - request: VerifiedValidationRequest, - ) -> Result { - delegate_call!(self => process_validation_request(request)) - } - - fn process_validation_reply( - self, - reply: BatchCommitmentValidationReply, - ) -> Result { - delegate_call!(self => process_validation_reply(reply)) - } - - fn process_announces_response(self, response: AnnouncesResponse) -> Result { - delegate_call!(self => process_announces_response(response)) - } - - fn poll_next_state(self, cx: &mut Context<'_>) -> Result<(Poll<()>, ValidatorState)> { - delegate_call!(self => poll_next_state(cx)) - } - - fn process_injected_transaction(self, tx: SignedInjectedTransaction) -> Result { - delegate_call!(self => process_injected_transaction(tx)) - } -} - -struct DefaultProcessing; - -impl DefaultProcessing { - fn new_head(s: impl Into, block: SimpleBlockData) -> Result { - Initial::create_with_chain_head(s.into().into_context(), block) - } - - fn synced_block(s: impl Into, block: H256) -> Result { - let mut s = s.into(); - s.warning(format!("unexpected synced block: {block}")); - Ok(s) - } - - fn prepared_block(s: impl Into, block: H256) -> Result { - let mut s = s.into(); - s.warning(format!("unexpected processed block: {block}")); - Ok(s) - } - - fn computed_announce( - s: impl Into, - computed_data: ComputedAnnounce, - ) -> Result { - let mut s = s.into(); - s.warning(format!( - "unexpected computed announce: {}", - computed_data.announce_hash - )); - Ok(s) - } - - fn announce_from_producer( - s: impl Into, - announce: VerifiedAnnounce, - ) -> Result { - let mut s = s.into(); - s.warning(format!( - "unexpected announce from producer: {announce:?}, saved for later." - )); - s.context_mut().pending(announce); - Ok(s) - } - - fn validation_request( - s: impl Into, - request: VerifiedValidationRequest, - ) -> Result { - let mut s = s.into(); - s.warning(format!( - "unexpected validation request: {request:?}, saved for later." - )); - s.context_mut().pending(request); - Ok(s) - } - - fn validation_reply( - s: impl Into, - reply: BatchCommitmentValidationReply, - ) -> Result { - tracing::trace!("Skip validation reply: {reply:?}"); - Ok(s.into()) - } - - fn announces_response( - s: impl Into, - response: AnnouncesResponse, - ) -> Result { - let mut s = s.into(); - s.warning(format!( - "unexpected announces response: {response:?}, ignored." - )); - Ok(s) - } - - fn injected_transaction( - s: impl Into, - tx: SignedInjectedTransaction, - ) -> Result { - let mut s = s.into(); - s.context_mut().core.process_injected_transaction(tx)?; - Ok(s) - } -} - /// The context shared across all validator states. #[derive(Debug)] -struct ValidatorContext { +pub(crate) struct ValidatorContext { /// Core validator parameters and utilities. core: ValidatorCore, @@ -537,6 +329,11 @@ struct ValidatorContext { /// Ongoing consensus tasks, if any. #[debug("{}", tasks.len())] tasks: FuturesUnordered>>, + + /// DKG engine for distributed key generation + dkg_engine: DkgEngineDb, + /// ROAST engine for threshold signing + roast_engine: RoastEngineDb, } impl ValidatorContext { @@ -554,4 +351,95 @@ impl ValidatorContext { .signer .signed_message(self.core.pub_key, data, None)?) } + + fn switch_to_producer_or_subordinate( + mut self, + block: SimpleBlockData, + ) -> Result { + let current_era = self.core.timelines.era_from_ts(block.header.timestamp); + + let validators = self + .core + .db + .validators(current_era) + .ok_or(anyhow!("validators not found for block({})", block.hash))?; + + // Check if we need to start DKG for this era. + if !self.dkg_engine.is_completed(current_era) + && self.dkg_engine.get_state(current_era).is_none() + { + tracing::info!(era = current_era, "🔑 Starting DKG for new era"); + + // Start DKG with threshold = (2/3 * validators.len()). + let threshold = ((validators.len() as u64 * 2) / 3).max(1) as u16; + + // Start DKG and broadcast initial round messages. + match self + .dkg_engine + .handle_event(crate::engine::dkg::DkgEngineEvent::Start { + era: current_era, + validators: validators.clone().into(), + threshold, + }) { + Ok(actions) => { + for action in actions { + if let Ok(Some(msg)) = + sign_dkg_action(&self.core.signer, self.core.pub_key, action) + { + self.output(ConsensusEvent::BroadcastValidatorMessage(msg)); + } + } + } + Err(e) => { + tracing::warn!(era = current_era, "Failed to start DKG: {}", e); + } + } + } + + // Determine the block producer for the current slot. + let producer = utils::block_producer_for( + &validators, + block.header.timestamp, + self.core.slot_duration.as_secs(), + ); + let my_address = self.core.pub_key.to_address(); + + if my_address == producer { + tracing::info!(block = %block.hash, "👷 Start to work as a producer"); + + producer::Producer::create(self, block, validators.clone()) + } else { + // TODO #4636: add test (in ethexe-service) for case where is not validator for current block + let is_validator_for_current_block = validators.contains(&my_address); + + tracing::info!( + block = %block.hash, + "👷 Start to work as subordinate, producer is {producer}, \ + I'm validator for current block: {is_validator_for_current_block}", + ); + + subordinate::Subordinate::create(self, block, producer, is_validator_for_current_block) + } + } +} + +impl EngineContext for ValidatorContext { + fn now(&self) -> std::time::Instant { + std::time::Instant::now() + } + + fn publish_dkg_action(&mut self, action: crate::engine::dkg::DkgAction) -> Result<()> { + // Wrap and sign DKG actions for the validator network. + if let Some(msg) = sign_dkg_action(&self.core.signer, self.core.pub_key, action)? { + self.output(ConsensusEvent::BroadcastValidatorMessage(msg)); + } + Ok(()) + } + + fn publish_roast_message(&mut self, message: crate::engine::roast::RoastMessage) -> Result<()> { + // Wrap and sign ROAST messages for the validator network. + let signed = sign_roast_message(&self.core.signer, self.core.pub_key, message)?; + self.output(ConsensusEvent::BroadcastValidatorMessage(signed)); + Ok(()) + } } diff --git a/ethexe/consensus/src/validator/participant.rs b/ethexe/consensus/src/validator/participant.rs index f043769409e..106220a25da 100644 --- a/ethexe/consensus/src/validator/participant.rs +++ b/ethexe/consensus/src/validator/participant.rs @@ -72,6 +72,7 @@ impl StateHandler for Participant { request: VerifiedValidationRequest, ) -> Result { if request.address() == self.producer { + // Only accept validation requests from the current producer. self.process_validation_request(request.into_parts().0) } else { DefaultProcessing::validation_request(self, request) @@ -87,6 +88,7 @@ impl StateHandler for Participant { { match res { Ok(ValidationStatus::Accepted(digest)) => { + // Sign the batch digest and send validation reply. let signature = self.ctx.core.signer.sign_for_contract_digest( self.ctx.core.router_address, self.ctx.core.pub_key, @@ -120,7 +122,7 @@ impl StateHandler for Participant { Err(err) => return Err(err), } - // NOTE: In both cases it returns to the initial state, + // NOTE: Always return to initial state after processing a request. // means - even if producer publish incorrect validation request, // then participant does not wait for the next validation request from producer. Initial::create(self.ctx).map(|s| (Poll::Ready(()), s)) @@ -137,6 +139,7 @@ impl Participant { producer: Address, ) -> Result { let mut earlier_validation_request = None; + // Pull the newest validation request from pending events if present. ctx.pending_events.retain(|event| match event { PendingEvent::ValidationRequest(signed_data) if earlier_validation_request.is_none() && signed_data.address() == producer => @@ -174,6 +177,7 @@ impl Participant { return Ok(self.into()); }; + // Spawn async validation; result drives reply in poll_next_state. self.state = State::ProcessingValidationRequest { future: self .ctx diff --git a/ethexe/consensus/src/validator/producer.rs b/ethexe/consensus/src/validator/producer.rs index 34091430069..14702c87ff1 100644 --- a/ethexe/consensus/src/validator/producer.rs +++ b/ethexe/consensus/src/validator/producer.rs @@ -81,6 +81,7 @@ impl StateHandler for Producer { State::WaitingAnnounceComputed(expected) if *expected == computed_data.announce_hash => { + // Producer collects promises from computed announce and signs them. if !computed_data.promises.is_empty() { let signed_promises = computed_data .promises @@ -95,8 +96,7 @@ impl StateHandler for Producer { self.ctx.output(ConsensusEvent::Promises(signed_promises)); } - // Aggregate commitment for the block and use `announce_hash` as head for chain commitment. - // `announce_hash` is computed and included in the db already, so it's safe to use it. + // Aggregate commitments for the block into a batch. self.state = State::AggregateBatchCommitment { future: self .ctx @@ -130,15 +130,26 @@ impl StateHandler for Producer { } State::AggregateBatchCommitment { future } => match future.poll_unpin(cx) { Poll::Ready(Ok(Some(batch))) => { + // A batch exists: transition to Coordinator to start ROAST signing. tracing::debug!(batch.block_hash = %batch.block_hash, "Batch commitment aggregated, switch to Coordinator"); return Coordinator::create(self.ctx, self.validators, batch) .map(|s| (Poll::Ready(()), s)); } Poll::Ready(Ok(None)) => { + // No commitments: return to Initial state without signing. tracing::info!("No commitments - skip batch commitment"); return Initial::create(self.ctx).map(|s| (Poll::Ready(()), s)); } Poll::Ready(Err(err)) => { + if let Some(mismatch) = + err.downcast_ref::() + { + self.warning(format!( + "validators commitment rejected: expected {}, got {}", + mismatch.package_participants, mismatch.elected_validators + )); + return Initial::create(self.ctx).map(|s| (Poll::Ready(()), s)); + } return Err(err); } Poll::Pending => {} @@ -161,9 +172,11 @@ impl Producer { "Producer is not in the list of validators" ); + // Producer delay throttles announce creation to avoid races. let mut timer = Timer::new("producer delay", ctx.core.producer_delay); timer.start(()); + // Producer ignores pending external events. ctx.pending_events.clear(); Ok(Self { @@ -182,6 +195,7 @@ impl Producer { )); } + // Select the best parent announce and include any injected transactions. let parent = announces::best_parent_announce( &self.ctx.core.db, self.block.hash, @@ -215,6 +229,7 @@ impl Producer { return Initial::create(self.ctx); } + // Sign the announce for the validator network. let era_index = self .ctx .core @@ -230,6 +245,7 @@ impl Producer { .signer .signed_data(self.ctx.core.pub_key, message, None)?; + // Publish announce and request computation. self.state = State::WaitingAnnounceComputed(announce_hash); self.ctx .output(ConsensusEvent::PublishMessage(message.into())); @@ -247,8 +263,7 @@ mod tests { validator::{PendingEvent, mock::*}, }; use async_trait::async_trait; - use ethexe_common::{HashOf, db::*, gear::CodeCommitment, mock::*}; - use futures::StreamExt; + use ethexe_common::{Address, HashOf, db::*, gear::CodeCommitment, mock::*}; use nonempty::nonempty; #[tokio::test] @@ -276,7 +291,8 @@ mod tests { #[ntest::timeout(3000)] async fn simple() { let (ctx, keys, eth) = mock_validator_context(); - let validators = nonempty![ctx.core.pub_key.to_address(), keys[0].to_address()].into(); + let validators: ValidatorsVec = + nonempty![ctx.core.pub_key.to_address(), keys[0].to_address()].into(); let block = BlockChain::mock(1).setup(&ctx.core.db).blocks[1].to_simple(); let (state, announce_hash) = Producer::create(ctx, block, validators) @@ -307,17 +323,26 @@ mod tests { #[tokio::test] #[ntest::timeout(3000)] - async fn threshold_one() { + async fn threshold_one_roast() { gear_utils::init_default_logger(); - let (ctx, keys, eth) = mock_validator_context(); + let (ctx, keys, _eth) = mock_validator_context(); let validators: ValidatorsVec = nonempty![ctx.core.pub_key.to_address(), keys[0].to_address()].into(); - let mut batch = prepare_chain_for_batch_commitment(&ctx.core.db); + let batch = prepare_chain_for_batch_commitment(&ctx.core.db); let block = ctx.core.db.simple_block_data(batch.block_hash); + let era_index = ctx.core.timelines.era_from_ts(batch.timestamp); + let validator_addrs: Vec
= validators.clone().into(); + setup_test_dkg( + &ctx.core.db, + &validator_addrs, + ctx.core.pub_key.to_address(), + ctx.core.signatures_threshold as u16, + era_index, + ) + .unwrap(); - // If threshold is 1, we should not emit any events and goes thru states coordinator -> submitter -> initial - // until batch is committed + // With ROAST, producer always becomes coordinator and initiates threshold signing let (state, announce_hash) = Producer::create(ctx, block, validators.clone()) .unwrap() .skip_timer() @@ -327,47 +352,52 @@ mod tests { // Waiting for announce to be computed assert!(state.is_producer()); - // change head announce in the batch - if let Some(c) = batch.chain_commitment.as_mut() { - c.head_announce = announce_hash - } - - // compute announce + // Set up computed announce in database before processing AnnounceData { announce: state.context().core.db.announce(announce_hash).unwrap(), computed: Some(Default::default()), } .setup(&state.context().core.db); - let mut state = state + let (state, event) = state .process_computed_announce(ComputedAnnounce::mock(announce_hash)) .unwrap() - .wait_for_state(|state| matches!(state, ValidatorState::Initial(_))) + .wait_for_event() .await .unwrap(); - state.context_mut().tasks.select_next_some().await.unwrap(); - - // Check that we have a batch with commitments after submitting - let (committed_batch, signatures) = eth - .committed_batch - .read() - .await - .clone() - .expect("Expected that batch is committed"); + // Producer transitions to Coordinator and initiates ROAST signing + assert!( + state.is_coordinator(), + "Expected Coordinator state, got: {state:?}" + ); - assert_eq!(committed_batch, batch); - assert_eq!(signatures.len(), 1); + // With ROAST, coordinator sends BroadcastValidatorMessage (SignSessionRequest) + assert!( + matches!(event, ConsensusEvent::BroadcastValidatorMessage(_)), + "Expected BroadcastValidatorMessage, got: {event:?}" + ); } #[tokio::test] #[ntest::timeout(3000)] - async fn threshold_two() { + async fn threshold_two_roast() { let (mut ctx, keys, _) = mock_validator_context(); ctx.core.signatures_threshold = 2; - let validators = nonempty![ctx.core.pub_key.to_address(), keys[0].to_address()].into(); + let validators: ValidatorsVec = + nonempty![ctx.core.pub_key.to_address(), keys[0].to_address()].into(); let batch = prepare_chain_for_batch_commitment(&ctx.core.db); let block = ctx.core.db.simple_block_data(batch.block_hash); + let era_index = ctx.core.timelines.era_from_ts(batch.timestamp); + let validator_addrs: Vec
= validators.clone().into(); + setup_test_dkg( + &ctx.core.db, + &validator_addrs, + ctx.core.pub_key.to_address(), + ctx.core.signatures_threshold as u16, + era_index, + ) + .unwrap(); let (state, announce_hash) = Producer::create(ctx, block, validators) .unwrap() @@ -391,21 +421,36 @@ mod tests { .await .unwrap(); - // If threshold is 2, producer must goes to coordinator state and emit validation request - assert!(state.is_coordinator()); - event - .unwrap_publish_message() - .unwrap_request_batch_validation(); + // With ROAST, producer always transitions to coordinator and initiates threshold signing + assert!( + state.is_coordinator(), + "Expected Coordinator state, got: {state:?}" + ); + + // With ROAST, coordinator sends BroadcastValidatorMessage (SignSessionRequest) + assert!( + matches!(event, ConsensusEvent::BroadcastValidatorMessage(_)), + "Expected BroadcastValidatorMessage, got: {event:?}" + ); } #[tokio::test] #[ntest::timeout(3000)] - async fn code_commitments_only() { - gear_utils::init_default_logger(); - - let (ctx, keys, eth) = mock_validator_context(); - let validators = nonempty![ctx.core.pub_key.to_address(), keys[0].to_address()].into(); + async fn code_commitments_only_roast() { + let (ctx, keys, _eth) = mock_validator_context(); + let validators: ValidatorsVec = + nonempty![ctx.core.pub_key.to_address(), keys[0].to_address()].into(); let block = BlockChain::mock(1).setup(&ctx.core.db).blocks[1].to_simple(); + let era_index = ctx.core.timelines.era_from_ts(block.header.timestamp); + let validator_addrs: Vec
= validators.clone().into(); + setup_test_dkg( + &ctx.core.db, + &validator_addrs, + ctx.core.pub_key.to_address(), + ctx.core.signatures_threshold as u16, + era_index, + ) + .unwrap(); let code1 = CodeCommitment::mock(()); let code2 = CodeCommitment::mock(()); @@ -421,31 +466,31 @@ mod tests { .await .unwrap(); - // compute announce + // Set up computed announce in database before processing AnnounceData { announce: state.context().core.db.announce(announce_hash).unwrap(), computed: Some(Default::default()), } .setup(&state.context().core.db); - let mut state = state + let (state, event) = state .process_computed_announce(ComputedAnnounce::mock(announce_hash)) .unwrap() - .wait_for_state(|state| matches!(state, ValidatorState::Initial(_))) + .wait_for_event() .await .unwrap(); - state.context_mut().tasks.select_next_some().await.unwrap(); + // With ROAST, producer transitions to coordinator + assert!( + state.is_coordinator(), + "Expected Coordinator state, got: {state:?}" + ); - let (batch, signatures) = eth - .committed_batch - .read() - .await - .clone() - .expect("Expected that batch is committed"); - assert_eq!(signatures.len(), 1); - assert_eq!(batch.chain_commitment, None); - assert_eq!(batch.code_commitments.len(), 2); + // Coordinator sends ROAST SignSessionRequest + assert!( + matches!(event, ConsensusEvent::BroadcastValidatorMessage(_)), + "Expected BroadcastValidatorMessage, got: {event:?}" + ); } // TODO: test that zero timer works as expected diff --git a/ethexe/consensus/src/validator/state.rs b/ethexe/consensus/src/validator/state.rs new file mode 100644 index 00000000000..51585db91e1 --- /dev/null +++ b/ethexe/consensus/src/validator/state.rs @@ -0,0 +1,332 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::{ + BatchCommitmentValidationReply, ConsensusEvent, ValidatorContext, coordinator::Coordinator, + dispatcher, initial::Initial, participant::Participant, producer::Producer, + subordinate::Subordinate, +}; +use anyhow::Result; +use derive_more::{Debug, From}; +use ethexe_common::{ + ComputedAnnounce, SimpleBlockData, + consensus::{VerifiedAnnounce, VerifiedValidationRequest}, + injected::SignedInjectedTransaction, + network::{AnnouncesResponse, SignedValidatorMessage, VerifiedValidatorMessage}, +}; +use gprimitives::H256; +use std::{ + fmt, + task::{Context, Poll}, +}; + +/// An event that can be saved for later processing. +#[derive(Clone, Debug, From, PartialEq, Eq, derive_more::IsVariant)] +pub(crate) enum PendingEvent { + /// A block from the producer + Announce(VerifiedAnnounce), + /// A validation request + ValidationRequest(VerifiedValidationRequest), +} + +/// Trait defining the interface for validator inner state and events handler. +pub(crate) trait StateHandler +where + Self: Sized + Into + fmt::Display, +{ + fn context(&self) -> &ValidatorContext; + + fn context_mut(&mut self) -> &mut ValidatorContext; + + fn into_context(self) -> ValidatorContext; + + fn warning(&mut self, warning: impl fmt::Display) { + let warning = format!("{self} - {warning}"); + self.context_mut() + .output + .push_back(ConsensusEvent::Warning(warning)); + } + + fn process_new_head(self, block: SimpleBlockData) -> Result { + DefaultProcessing::new_head(self.into(), block) + } + + fn process_synced_block(self, block: H256) -> Result { + DefaultProcessing::synced_block(self.into(), block) + } + + fn process_prepared_block(self, block: H256) -> Result { + DefaultProcessing::prepared_block(self.into(), block) + } + + fn process_computed_announce(self, computed_data: ComputedAnnounce) -> Result { + DefaultProcessing::computed_announce(self.into(), computed_data) + } + + fn process_announce(self, block: VerifiedAnnounce) -> Result { + DefaultProcessing::block_from_producer(self, block) + } + + fn process_validation_request( + self, + request: VerifiedValidationRequest, + ) -> Result { + DefaultProcessing::validation_request(self, request) + } + + fn process_validation_reply( + self, + reply: BatchCommitmentValidationReply, + ) -> Result { + DefaultProcessing::validation_reply(self, reply) + } + + fn process_verified_validator_message( + self, + message: ethexe_common::network::VerifiedValidatorMessage, + ) -> Result { + // Route DKG/ROAST traffic through the dispatcher. + DefaultProcessing::verified_validator_message(self.into(), message) + } + + fn process_announces_response(self, _response: AnnouncesResponse) -> Result { + DefaultProcessing::announces_response(self, _response) + } + + fn process_injected_transaction(self, tx: SignedInjectedTransaction) -> Result { + DefaultProcessing::injected_transaction(self, tx) + } + + fn process_validator_message(self, message: SignedValidatorMessage) -> Result { + DefaultProcessing::validator_message(self, message) + } + + fn poll_next_state(self, _cx: &mut Context<'_>) -> Result<(Poll<()>, ValidatorState)> { + Ok((Poll::Pending, self.into())) + } +} + +#[allow(clippy::large_enum_variant)] +#[derive( + Debug, derive_more::Display, derive_more::From, derive_more::IsVariant, derive_more::Unwrap, +)] +pub(crate) enum ValidatorState { + Initial(Initial), + Producer(Producer), + Coordinator(Coordinator), + Subordinate(Subordinate), + Participant(Participant), +} + +macro_rules! delegate_call { + ($this:ident => $func:ident( $( $arg:ident ),* )) => { + match $this { + ValidatorState::Initial(initial) => initial.$func($( $arg ),*), + ValidatorState::Producer(producer) => producer.$func($( $arg ),*), + ValidatorState::Coordinator(coordinator) => coordinator.$func($( $arg ),*), + ValidatorState::Subordinate(subordinate) => subordinate.$func($( $arg ),*), + ValidatorState::Participant(participant) => participant.$func($( $arg ),*), + } + }; +} + +impl StateHandler for ValidatorState { + fn context(&self) -> &ValidatorContext { + delegate_call!(self => context()) + } + + fn context_mut(&mut self) -> &mut ValidatorContext { + delegate_call!(self => context_mut()) + } + + fn into_context(self) -> ValidatorContext { + delegate_call!(self => into_context()) + } + + fn warning(&mut self, warning: impl fmt::Display) { + delegate_call!(self => warning(warning)) + } + + fn process_new_head(self, block: SimpleBlockData) -> Result { + delegate_call!(self => process_new_head(block)) + } + + fn process_synced_block(self, block: H256) -> Result { + delegate_call!(self => process_synced_block(block)) + } + + fn process_prepared_block(self, block: H256) -> Result { + delegate_call!(self => process_prepared_block(block)) + } + + fn process_computed_announce(self, computed_data: ComputedAnnounce) -> Result { + delegate_call!(self => process_computed_announce(computed_data)) + } + + fn process_announce(self, announce: VerifiedAnnounce) -> Result { + delegate_call!(self => process_announce(announce)) + } + + fn process_validation_request( + self, + request: VerifiedValidationRequest, + ) -> Result { + delegate_call!(self => process_validation_request(request)) + } + + fn process_validation_reply( + self, + reply: BatchCommitmentValidationReply, + ) -> Result { + delegate_call!(self => process_validation_reply(reply)) + } + + fn process_announces_response(self, response: AnnouncesResponse) -> Result { + delegate_call!(self => process_announces_response(response)) + } + + fn process_verified_validator_message( + self, + message: ethexe_common::network::VerifiedValidatorMessage, + ) -> Result { + delegate_call!(self => process_verified_validator_message(message)) + } + + fn poll_next_state(self, cx: &mut Context<'_>) -> Result<(Poll<()>, ValidatorState)> { + delegate_call!(self => poll_next_state(cx)) + } + + fn process_injected_transaction(self, tx: SignedInjectedTransaction) -> Result { + delegate_call!(self => process_injected_transaction(tx)) + } + + fn process_validator_message(self, message: SignedValidatorMessage) -> Result { + delegate_call!(self => process_validator_message(message)) + } +} + +pub(crate) struct DefaultProcessing; + +impl DefaultProcessing { + pub(crate) fn new_head( + s: impl Into, + block: SimpleBlockData, + ) -> Result { + // New head always resets to Initial state. + Initial::create_with_chain_head(s.into().into_context(), block) + } + + pub(crate) fn synced_block( + s: impl Into, + block: H256, + ) -> Result { + let mut s = s.into(); + s.warning(format!("unexpected synced block: {block}")); + Ok(s) + } + + pub(crate) fn prepared_block( + s: impl Into, + block: H256, + ) -> Result { + let mut s = s.into(); + s.warning(format!("unexpected processed block: {block}")); + Ok(s) + } + + pub(crate) fn computed_announce( + s: impl Into, + computed_data: ComputedAnnounce, + ) -> Result { + let mut s = s.into(); + s.warning(format!( + "unexpected computed announce: {}", + computed_data.announce_hash + )); + Ok(s) + } + + pub(crate) fn block_from_producer( + s: impl Into, + announce: VerifiedAnnounce, + ) -> Result { + // Store producer announce until a compatible state consumes it. + let mut s = s.into(); + s.warning(format!( + "unexpected block from producer: {announce:?}, saved for later." + )); + s.context_mut().pending(announce); + Ok(s) + } + + pub(crate) fn validation_request( + s: impl Into, + request: VerifiedValidationRequest, + ) -> Result { + // Store validation request until a compatible state consumes it. + let mut s = s.into(); + s.warning(format!( + "unexpected validation request: {request:?}, saved for later." + )); + s.context_mut().pending(request); + Ok(s) + } + + pub(crate) fn validation_reply( + s: impl Into, + reply: BatchCommitmentValidationReply, + ) -> Result { + tracing::trace!("Skip validation reply: {reply:?}"); + Ok(s.into()) + } + + pub(crate) fn announces_response( + s: impl Into, + response: AnnouncesResponse, + ) -> Result { + let mut s = s.into(); + s.warning(format!( + "unexpected announces response: {response:?}, ignored." + )); + Ok(s) + } + + pub(crate) fn injected_transaction( + s: impl Into, + tx: SignedInjectedTransaction, + ) -> Result { + let mut s = s.into(); + s.context_mut().core.process_injected_transaction(tx)?; + Ok(s) + } + + pub(crate) fn validator_message( + s: impl Into, + message: SignedValidatorMessage, + ) -> Result { + // Verify signatures before dispatching. + Self::verified_validator_message(s, message.into_verified()) + } + + pub(crate) fn verified_validator_message( + s: impl Into, + message: VerifiedValidatorMessage, + ) -> Result { + dispatcher::handle_verified_validator_message(s.into(), message) + } +} diff --git a/ethexe/consensus/src/validator/subordinate.rs b/ethexe/consensus/src/validator/subordinate.rs index 3a5b7961ec8..c7d4347eec6 100644 --- a/ethexe/consensus/src/validator/subordinate.rs +++ b/ethexe/consensus/src/validator/subordinate.rs @@ -75,6 +75,7 @@ impl StateHandler for Subordinate { State::WaitingAnnounceComputed { announce_hash } if *announce_hash == computed_data.announce_hash => { + // Once computed, either validate (participant) or return to initial. if self.is_validator { Participant::create(self.ctx, self.block, self.producer) } else { @@ -91,10 +92,11 @@ impl StateHandler for Subordinate { if verified_announce.address() == self.producer && verified_announce.data().block_hash == self.block.hash => { + // Accept only the expected announce from the producer. let (announce, _pub_key) = verified_announce.into_parts(); self.send_announce_for_computation(announce) } - _ => DefaultProcessing::announce_from_producer(self, verified_announce), + _ => DefaultProcessing::block_from_producer(self, verified_announce), } } @@ -106,6 +108,7 @@ impl StateHandler for Subordinate { tracing::trace!( "Receive validation request from producer: {request:?}, saved for later." ); + // Stash request until we reach Participant state. self.ctx.pending(request); Ok(self.into()) @@ -166,6 +169,7 @@ impl Subordinate { } fn send_announce_for_computation(mut self, announce: Announce) -> Result { + // Persist announce and request computation if accepted. match announces::accept_announce(&self.ctx.core.db, announce.clone())? { AnnounceStatus::Accepted(announce_hash) => { self.ctx diff --git a/ethexe/contracts/src/IRouter.sol b/ethexe/contracts/src/IRouter.sol index be10acd257f..ff8eaf5c065 100644 --- a/ethexe/contracts/src/IRouter.sol +++ b/ethexe/contracts/src/IRouter.sol @@ -96,31 +96,67 @@ interface IRouter { // # Views. function genesisBlockHash() external view returns (bytes32); + function genesisTimestamp() external view returns (uint48); + function latestCommittedBatchHash() external view returns (bytes32); + function latestCommittedBatchTimestamp() external view returns (uint48); function mirrorImpl() external view returns (address); + function wrappedVara() external view returns (address); + function middleware() external view returns (address); - function validatorsAggregatedPublicKey() external view returns (Gear.AggregatedPublicKey memory); - function validatorsVerifiableSecretSharingCommitment() external view returns (bytes memory); + function validatorsAggregatedPublicKey() + external + view + returns (Gear.AggregatedPublicKey memory); + + function validatorsVerifiableSecretSharingCommitment() + external + view + returns (bytes memory); + + function validatorsVssCommitmentHash() external view returns (bytes32); + + function areValidators( + address[] calldata validators + ) external view returns (bool); - function areValidators(address[] calldata validators) external view returns (bool); function isValidator(address validator) external view returns (bool); - function signingThresholdFraction() external view returns (uint128, uint128); + + function signingThresholdFraction() + external + view + returns (uint128, uint128); + function validators() external view returns (address[] memory); + function validatorsCount() external view returns (uint256); + function validatorsThreshold() external view returns (uint256); - function computeSettings() external view returns (Gear.ComputationSettings memory); + function computeSettings() + external + view + returns (Gear.ComputationSettings memory); function codeState(bytes32 codeId) external view returns (Gear.CodeState); - function codesStates(bytes32[] calldata codesIds) external view returns (Gear.CodeState[] memory); + + function codesStates( + bytes32[] calldata codesIds + ) external view returns (Gear.CodeState[] memory); + function programCodeId(address programId) external view returns (bytes32); - function programsCodeIds(address[] calldata programsIds) external view returns (bytes32[] memory); + + function programsCodeIds( + address[] calldata programsIds + ) external view returns (bytes32[] memory); + function programsCount() external view returns (uint256); + function validatedCodesCount() external view returns (uint256); function timelines() external view returns (Gear.Timelines memory); @@ -133,8 +169,14 @@ interface IRouter { /// @dev CodeValidationRequested Emitted on success. function requestCodeValidation(bytes32 codeId) external; + /// @dev ProgramCreated Emitted on success. - function createProgram(bytes32 codeId, bytes32 salt, address overrideInitializer) external returns (address); + function createProgram( + bytes32 codeId, + bytes32 salt, + address overrideInitializer + ) external returns (address); + /// @dev ProgramCreated Emitted on success. function createProgramWithAbiInterface( bytes32 codeId, diff --git a/ethexe/contracts/src/Router.sol b/ethexe/contracts/src/Router.sol index 4311fb7be31..f0e3e0cd8c7 100644 --- a/ethexe/contracts/src/Router.sol +++ b/ethexe/contracts/src/Router.sol @@ -166,6 +166,12 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransientUpgradea return SSTORE2.read(Gear.currentEraValidators(_router()).verifiableSecretSharingCommitmentPointer); } + function validatorsVssCommitmentHash() external view returns (bytes32) { + bytes memory commitment = + SSTORE2.read(Gear.currentEraValidators(_router()).verifiableSecretSharingCommitmentPointer); + return keccak256(commitment); + } + function areValidators(address[] calldata _validators) public view returns (bool) { Gear.Validators storage _currentValidators = Gear.currentEraValidators(_router()); diff --git a/ethexe/contracts/src/libraries/Gear.sol b/ethexe/contracts/src/libraries/Gear.sol index 1fa4e81e8d2..84d73892bb6 100644 --- a/ethexe/contracts/src/libraries/Gear.sol +++ b/ethexe/contracts/src/libraries/Gear.sol @@ -255,6 +255,7 @@ library Gear { abi.encodePacked( commitment.aggregatedPublicKey.x, commitment.aggregatedPublicKey.y, + keccak256(commitment.verifiableSecretSharingCommitment), commitment.validators, commitment.eraIndex ) diff --git a/ethexe/contracts/test/Router.t.sol b/ethexe/contracts/test/Router.t.sol index cb3ff8e5915..a992eff5daa 100644 --- a/ethexe/contracts/test/Router.t.sol +++ b/ethexe/contracts/test/Router.t.sol @@ -14,13 +14,16 @@ contract RouterTest is Base { address public deployer = 0x116B4369a90d2E9DA6BD7a924A23B164E10f6FE9; address public alicePublic = 0x45D6536E3D4AdC8f4e13c5c4aA54bE968C55Abf1; - uint256 public alicePrivate = 0x32816f851b9cc71c4eb956214ded8cf481f7af66c125d1fb9deae366ae4f13a6; + uint256 public alicePrivate = + 0x32816f851b9cc71c4eb956214ded8cf481f7af66c125d1fb9deae366ae4f13a6; address public bobPublic = 0xeFDa593324697918773069E0226dAD49d702f4D8; - uint256 public bobPrivate = 0x068cc4910d9f5aae82f66d926757fde55a7d2e72b25b2a243606e5147712a450; + uint256 public bobPrivate = + 0x068cc4910d9f5aae82f66d926757fde55a7d2e72b25b2a243606e5147712a450; address public charliePublic = 0x84de3f115eC548A32CcC9464D14376f888ab49e1; - uint256 public charliePrivate = 0xa3f79c90a74fd984fd9c2a9c4286c53ad5ac38e32123e06720e9211566378bc4; + uint256 public charliePrivate = + 0xa3f79c90a74fd984fd9c2a9c4286c53ad5ac38e32123e06720e9211566378bc4; SigningKey public signingKey; address[] public validators; @@ -47,7 +50,13 @@ contract RouterTest is Base { validatorsPrivateKeys.push(bobPrivate); validatorsPrivateKeys.push(charliePrivate); - setUpRouter(Gear.AggregatedPublicKey(publicKey.publicKeyX, publicKey.publicKeyY), validators); + setUpRouter( + Gear.AggregatedPublicKey( + publicKey.publicKeyX, + publicKey.publicKeyY + ), + validators + ); } function test_validatorsCommitment() public { @@ -63,21 +72,40 @@ contract RouterTest is Base { Vm.Wallet memory _publicKey = vm.createWallet(_signingKey.asScalar()); Gear.ValidatorsCommitment memory commitment = Gear.ValidatorsCommitment( - Gear.AggregatedPublicKey(_publicKey.publicKeyX, _publicKey.publicKeyY), "", _validators, 1 + Gear.AggregatedPublicKey( + _publicKey.publicKeyX, + _publicKey.publicKeyY + ), + "", + _validators, + 1 ); // Revert - election is not yet started commitValidators(commitment, true); - rollOneBlockAndWarp(uint256(router.genesisTimestamp() + eraDuration - electionDuration) - 2 * blockDuration); + rollOneBlockAndWarp( + uint256( + router.genesisTimestamp() + eraDuration - electionDuration + ) - 2 * blockDuration + ); // Revert - still not started (one block before election, because commitment goes to the next block) commitValidators(commitment, true); - rollOneBlockAndWarp(uint256(router.genesisTimestamp() + eraDuration - electionDuration)); - - Gear.ValidatorsCommitment memory commitment2 = Gear.ValidatorsCommitment( - Gear.AggregatedPublicKey(_publicKey.publicKeyX, _publicKey.publicKeyY), "", _validators, 2 + rollOneBlockAndWarp( + uint256(router.genesisTimestamp() + eraDuration - electionDuration) ); + + Gear.ValidatorsCommitment memory commitment2 = Gear + .ValidatorsCommitment( + Gear.AggregatedPublicKey( + _publicKey.publicKeyX, + _publicKey.publicKeyY + ), + "", + _validators, + 2 + ); // Revert - election started, but wrong era index in commitment commitValidators(commitment2, true); @@ -101,18 +129,30 @@ contract RouterTest is Base { validatorsPrivateKeys = _validatorPrivateKeys; // Commit the same validators again - rollOneBlockAndWarp(uint256(router.genesisTimestamp() + 2 * eraDuration - electionDuration)); + rollOneBlockAndWarp( + uint256( + router.genesisTimestamp() + 2 * eraDuration - electionDuration + ) + ); commitValidators(commitment2, false); - rollOneBlockAndWarp(uint256(router.genesisTimestamp() + 2 * eraDuration)); + rollOneBlockAndWarp( + uint256(router.genesisTimestamp() + 2 * eraDuration) + ); assertEq(router.validators(), _validators); // Do not commit validators - should continue to work with validators from previous era then. - rollOneBlockAndWarp(uint256(router.genesisTimestamp() + 10 * eraDuration)); + rollOneBlockAndWarp( + uint256(router.genesisTimestamp() + 10 * eraDuration) + ); assertEq(router.validators(), _validators); // Try to commit from wrong validators - rollOneBlockAndWarp(uint256(router.genesisTimestamp() + 11 * eraDuration - electionDuration)); + rollOneBlockAndWarp( + uint256( + router.genesisTimestamp() + 11 * eraDuration - electionDuration + ) + ); commitment.eraIndex = 10; uint256[] memory wrongValidatorPrivateKeys = new uint256[](3); @@ -124,6 +164,130 @@ contract RouterTest is Base { commitValidators(wrongValidatorPrivateKeys, commitment, true); } + function test_validatorsCommitmentHash_includesVss() public { + Vm.Wallet memory _publicKey = vm.createWallet(signingKey.asScalar()); + address[] memory _validators = new address[](validators.length); + for (uint256 i = 0; i < validators.length; i++) { + _validators[i] = validators[i]; + } + + bytes memory vss1 = hex"010203"; + bytes memory vss2 = hex"010204"; + + Gear.ValidatorsCommitment memory commitment = Gear.ValidatorsCommitment( + Gear.AggregatedPublicKey( + _publicKey.publicKeyX, + _publicKey.publicKeyY + ), + vss1, + _validators, + 1 + ); + Gear.ValidatorsCommitment memory commitment2 = Gear + .ValidatorsCommitment( + Gear.AggregatedPublicKey( + _publicKey.publicKeyX, + _publicKey.publicKeyY + ), + vss2, + _validators, + 1 + ); + + bytes32 hash1 = Gear.validatorsCommitmentHash(commitment); + bytes32 hash2 = Gear.validatorsCommitmentHash(commitment2); + + assertTrue(hash1 != hash2); + + bytes32 expected = keccak256( + abi.encodePacked( + _publicKey.publicKeyX, + _publicKey.publicKeyY, + keccak256(vss1), + _validators, + uint256(1) + ) + ); + assertEq(hash1, expected); + } + + function test_commitValidators_reverts_on_vss_mismatch() public { + SigningKey _signingKey = FROSTOffchain.newSigningKey(); + Vm.Wallet memory _publicKey = vm.createWallet(_signingKey.asScalar()); + + address[] memory _validators = new address[](validators.length); + for (uint256 i = 0; i < validators.length; i++) { + _validators[i] = validators[i]; + } + + bytes memory vss1 = hex"deadbeef"; + bytes memory vss2 = hex"deadbeee"; + + Gear.ValidatorsCommitment memory commitment1 = Gear + .ValidatorsCommitment( + Gear.AggregatedPublicKey( + _publicKey.publicKeyX, + _publicKey.publicKeyY + ), + vss1, + _validators, + 1 + ); + Gear.ValidatorsCommitment memory commitment2 = Gear + .ValidatorsCommitment( + Gear.AggregatedPublicKey( + _publicKey.publicKeyX, + _publicKey.publicKeyY + ), + vss2, + _validators, + 1 + ); + + rollOneBlockAndWarp( + uint256(router.genesisTimestamp() + eraDuration - electionDuration) + ); + + Gear.ValidatorsCommitment[] + memory validatorsCommitments = new Gear.ValidatorsCommitment[](1); + validatorsCommitments[0] = commitment1; + bytes32 _blockHash = blockHash(vm.getBlockNumber()); + uint48 _timestamp = uint48(vm.getBlockTimestamp()); + + Gear.BatchCommitment memory batch1 = Gear.BatchCommitment({ + blockHash: _blockHash, + blockTimestamp: _timestamp, + previousCommittedBatchHash: router.latestCommittedBatchHash(), + expiry: 3, + chainCommitment: new Gear.ChainCommitment[](0), + codeCommitments: new Gear.CodeCommitment[](0), + rewardsCommitment: new Gear.RewardsCommitment[](0), + validatorsCommitment: validatorsCommitments + }); + + bytes32 hash1 = batchCommitmentHash(batch1); + uint256[] memory privateKeys = new uint256[](1); + privateKeys[0] = _signingKey.asScalar(); + bytes[] memory signatures = signHash(privateKeys, hash1); + + validatorsCommitments[0] = commitment2; + Gear.BatchCommitment memory batch2 = Gear.BatchCommitment({ + blockHash: _blockHash, + blockTimestamp: _timestamp, + previousCommittedBatchHash: router.latestCommittedBatchHash(), + expiry: 3, + chainCommitment: new Gear.ChainCommitment[](0), + codeCommitments: new Gear.CodeCommitment[](0), + rewardsCommitment: new Gear.RewardsCommitment[](0), + validatorsCommitment: validatorsCommitments + }); + + rollBlocks(1); + + vm.expectRevert(); + router.commitBatch(batch2, Gear.SignatureType.FROST, signatures); + } + function test_emptyValidatorsCommitment() public { address[] memory _validators = new address[](0); @@ -131,16 +295,69 @@ contract RouterTest is Base { Vm.Wallet memory _publicKey = vm.createWallet(_signingKey.asScalar()); Gear.ValidatorsCommitment memory commitment = Gear.ValidatorsCommitment( - Gear.AggregatedPublicKey(_publicKey.publicKeyX, _publicKey.publicKeyY), "", _validators, 1 + Gear.AggregatedPublicKey( + _publicKey.publicKeyX, + _publicKey.publicKeyY + ), + "", + _validators, + 1 ); - rollOneBlockAndWarp(uint256(router.genesisTimestamp() + eraDuration - electionDuration) - 2 * blockDuration); - rollOneBlockAndWarp(uint256(router.genesisTimestamp() + eraDuration - electionDuration)); + rollOneBlockAndWarp( + uint256( + router.genesisTimestamp() + eraDuration - electionDuration + ) - 2 * blockDuration + ); + rollOneBlockAndWarp( + uint256(router.genesisTimestamp() + eraDuration - electionDuration) + ); // Revert - empty validators list commitValidators(commitment, true); } + function test_frostSignatureLayout() public { + rollBlocks(2); + uint256 commitBlockNumber = vm.getBlockNumber() - 1; + bytes32 _blockHash = blockHash(commitBlockNumber); + uint256 timestampValue = vm.getBlockTimestamp() - blockDuration; + require( + timestampValue <= type(uint48).max, + "RouterTest: timestamp overflow" + ); + // forge-lint: disable-next-line(unsafe-typecast) + uint48 _timestamp = uint48(timestampValue); + + Gear.BatchCommitment memory batch = Gear.BatchCommitment({ + blockHash: _blockHash, + blockTimestamp: _timestamp, + previousCommittedBatchHash: router.latestCommittedBatchHash(), + expiry: 3, + chainCommitment: new Gear.ChainCommitment[](0), + codeCommitments: new Gear.CodeCommitment[](0), + rewardsCommitment: new Gear.RewardsCommitment[](0), + validatorsCommitment: new Gear.ValidatorsCommitment[](0) + }); + + bytes32 hash = batchCommitmentHash(batch); + uint256[] memory privateKeys = new uint256[](1); + privateKeys[0] = signingKey.asScalar(); + bytes[] memory signatures = signHash(privateKeys, hash); + (uint256 rX, uint256 rY, uint256 z) = abi.decode( + signatures[0], + (uint256, uint256, uint256) + ); + + bytes[] memory badSignatures = new bytes[](1); + badSignatures[0] = abi.encodePacked(rX, z, rY); + + vm.expectRevert(); + router.commitBatch(batch, Gear.SignatureType.FROST, badSignatures); + + router.commitBatch(batch, Gear.SignatureType.FROST, signatures); + } + function test_lateCommitments() public { address[] memory _validators = new address[](3); uint256[] memory _validatorPrivateKeys = new uint256[](3); @@ -154,12 +371,23 @@ contract RouterTest is Base { Vm.Wallet memory _publicKey = vm.createWallet(_signingKey.asScalar()); uint256[] memory _privateKeys = new uint256[](1); - Gear.ValidatorsCommitment memory _commitment = Gear.ValidatorsCommitment( - Gear.AggregatedPublicKey(_publicKey.publicKeyX, _publicKey.publicKeyY), "", _validators, 1 + Gear.ValidatorsCommitment memory _commitment = Gear + .ValidatorsCommitment( + Gear.AggregatedPublicKey( + _publicKey.publicKeyX, + _publicKey.publicKeyY + ), + "", + _validators, + 1 + ); + Gear.StateTransition[] memory _transitions = new Gear.StateTransition[]( + 0 ); - Gear.StateTransition[] memory _transitions = new Gear.StateTransition[](0); - rollOneBlockAndWarp(router.genesisTimestamp() + eraDuration - electionDuration); + rollOneBlockAndWarp( + router.genesisTimestamp() + eraDuration - electionDuration + ); commitValidators(_commitment, false); // Goes to the next era @@ -169,21 +397,45 @@ contract RouterTest is Base { // Revert - try to commit batch from the previous era using new validators _privateKeys[0] = _signingKey.asScalar(); - commitBlock(_privateKeys, _transitions, blockHash(_eraStartNumber - 1), _eraStartTimestamp - 1, true); + commitBlock( + _privateKeys, + _transitions, + blockHash(_eraStartNumber - 1), + _eraStartTimestamp - 1, + true + ); // Now try to commit block from the previous era using old validators _privateKeys[0] = signingKey.asScalar(); - commitBlock(_privateKeys, _transitions, blockHash(_eraStartNumber - 1), _eraStartTimestamp - 1, false); + commitBlock( + _privateKeys, + _transitions, + blockHash(_eraStartNumber - 1), + _eraStartTimestamp - 1, + false + ); rollBlocks(1); // Revert - try to commit block from the new era using old validators _privateKeys[0] = signingKey.asScalar(); - commitBlock(_privateKeys, _transitions, blockHash(_eraStartNumber), _eraStartTimestamp, true); + commitBlock( + _privateKeys, + _transitions, + blockHash(_eraStartNumber), + _eraStartTimestamp, + true + ); // Now try to commit block from the new era using new validators _privateKeys[0] = _signingKey.asScalar(); - commitBlock(_privateKeys, _transitions, blockHash(_eraStartNumber), _eraStartTimestamp, false); + commitBlock( + _privateKeys, + _transitions, + blockHash(_eraStartNumber), + _eraStartTimestamp, + false + ); } function test_lateCommitmentsAfterDelay() public { @@ -199,12 +451,23 @@ contract RouterTest is Base { Vm.Wallet memory _publicKey = vm.createWallet(_signingKey.asScalar()); uint256[] memory _privateKeys = new uint256[](1); - Gear.ValidatorsCommitment memory _commitment = Gear.ValidatorsCommitment( - Gear.AggregatedPublicKey(_publicKey.publicKeyX, _publicKey.publicKeyY), "", _validators, 1 + Gear.ValidatorsCommitment memory _commitment = Gear + .ValidatorsCommitment( + Gear.AggregatedPublicKey( + _publicKey.publicKeyX, + _publicKey.publicKeyY + ), + "", + _validators, + 1 + ); + Gear.StateTransition[] memory _transitions = new Gear.StateTransition[]( + 0 ); - Gear.StateTransition[] memory _transitions = new Gear.StateTransition[](0); - rollOneBlockAndWarp(router.genesisTimestamp() + eraDuration - electionDuration); + rollOneBlockAndWarp( + router.genesisTimestamp() + eraDuration - electionDuration + ); commitValidators(_commitment, false); // Goes to the next era @@ -217,16 +480,31 @@ contract RouterTest is Base { // Revert - try to commit block from the previous era using old validators after validation delay _privateKeys[0] = signingKey.asScalar(); - commitBlock(_privateKeys, _transitions, blockHash(_eraStartNumber - 1), _eraStartTimestamp - 1, true); + commitBlock( + _privateKeys, + _transitions, + blockHash(_eraStartNumber - 1), + _eraStartTimestamp - 1, + true + ); // Now try to commit block from the previous era using new validators after validation delay _privateKeys[0] = _signingKey.asScalar(); - commitBlock(_privateKeys, _transitions, blockHash(_eraStartNumber - 1), _eraStartTimestamp - 1, false); + commitBlock( + _privateKeys, + _transitions, + blockHash(_eraStartNumber - 1), + _eraStartTimestamp - 1, + false + ); } /* helper functions */ - function commitValidators(Gear.ValidatorsCommitment memory commitment, bool revertExpected) private { + function commitValidators( + Gear.ValidatorsCommitment memory commitment, + bool revertExpected + ) private { uint256[] memory _privateKeys = new uint256[](1); _privateKeys[0] = signingKey.asScalar(); commitValidators(_privateKeys, commitment, revertExpected); diff --git a/ethexe/db/Cargo.toml b/ethexe/db/Cargo.toml index 7f7e76cb403..add09589e5b 100644 --- a/ethexe/db/Cargo.toml +++ b/ethexe/db/Cargo.toml @@ -20,7 +20,6 @@ tracing.workspace = true paste.workspace = true derive_more.workspace = true auto_impl.workspace = true -gear-workspace-hack.workspace = true # TODO: remove when https://github.com/tikv/jemallocator/pull/99 merged [target.'cfg(target_env = "msvc")'.dependencies.rocksdb] diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index 96c8713a4dc..36fef772620 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -25,11 +25,16 @@ use crate::{ use ethexe_common::{ Announce, BlockHeader, CodeBlobInfo, HashOf, ProgramStates, ProtocolTimelines, Schedule, ValidatorsVec, + crypto::{ + DkgKeyPackage, DkgPublicKeyPackage, DkgSessionId, DkgShare, DkgVssCommitment, + PreNonceCommitment, SignAggregate, + }, db::{ AnnounceMeta, AnnounceStorageRO, AnnounceStorageRW, BlockMeta, BlockMetaStorageRO, - BlockMetaStorageRW, CodesStorageRO, CodesStorageRW, HashStorageRO, InjectedStorageRO, - InjectedStorageRW, LatestData, LatestDataStorageRO, LatestDataStorageRW, OnChainStorageRO, - OnChainStorageRW, + BlockMetaStorageRW, CodesStorageRO, CodesStorageRW, DkgSessionState, DkgStorageRO, + DkgStorageRW, HashStorageRO, InjectedStorageRO, InjectedStorageRW, LatestData, + LatestDataStorageRO, LatestDataStorageRW, OnChainStorageRO, OnChainStorageRW, + SignSessionState, SignStorageRO, SignStorageRW, }, events::BlockEvent, gear::StateTransition, @@ -76,7 +81,17 @@ enum Key { Timelines = 15, // TODO kuzmindev: temporal solution - must move into block meta or something else. - LatestEraValidatorsCommitted(H256), + LatestEraValidatorsCommitted(H256) = 16, + + // DKG and ROAST storage keys + DkgSessionState(DkgSessionId) = 17, + PublicKeyPackage(u64) = 18, // era_index + DkgKeyPackage(u64) = 19, // era_index + DkgVssCommitment(u64) = 20, // era_index + SignSessionState(H256, u64) = 21, // (msg_hash, era_index) + DkgShare(u64) = 22, // era_index + SignatureCache(u64, ActorId, H256) = 23, // (era_index, target, msg_hash) + PreNonceCache(u64, ActorId) = 24, // (era_index, target) } impl Key { @@ -95,7 +110,11 @@ impl Key { | Self::BlockEvents(hash) | Self::LatestEraValidatorsCommitted(hash) => [prefix.as_ref(), hash.as_ref()].concat(), - Self::ValidatorSet(era_index) => { + Self::ValidatorSet(era_index) + | Self::PublicKeyPackage(era_index) + | Self::DkgKeyPackage(era_index) + | Self::DkgVssCommitment(era_index) + | Self::DkgShare(era_index) => { [prefix.as_ref(), era_index.to_le_bytes().as_ref()].concat() } Self::AnnounceProgramStates(hash) @@ -104,6 +123,19 @@ impl Key { | Self::AnnounceMeta(hash) => [prefix.as_ref(), hash.inner().as_ref()].concat(), Self::InjectedTransaction(hash) => [prefix.as_ref(), hash.inner().as_ref()].concat(), + Self::SignatureCache(era_index, target, msg_hash) => [ + prefix.as_ref(), + era_index.to_le_bytes().as_ref(), + target.as_ref(), + msg_hash.as_ref(), + ] + .concat(), + Self::PreNonceCache(era_index, target) => [ + prefix.as_ref(), + era_index.to_le_bytes().as_ref(), + target.as_ref(), + ] + .concat(), Self::ProgramToCodeId(program_id) => [prefix.as_ref(), program_id.as_ref()].concat(), @@ -117,6 +149,15 @@ impl Key { code_id.as_ref(), ] .concat(), + + Self::DkgSessionState(session_id) => { + [prefix.as_ref(), &session_id.era.to_le_bytes()].concat() + } + + Self::SignSessionState(msg_hash, era_index) => { + [prefix.as_ref(), msg_hash.as_ref(), &era_index.to_le_bytes()].concat() + } + Self::LatestData | Self::Timelines => prefix.as_ref().to_vec(), } } @@ -155,6 +196,45 @@ impl Database { Self::from_one(&mem) } + pub fn prune_roast_caches_before(&self, min_era: u64) -> (usize, usize) { + let sig_prefix = Key::SignatureCache(0, ActorId::zero(), H256::zero()).prefix(); + let pre_nonce_prefix = Key::PreNonceCache(0, ActorId::zero()).prefix(); + + let sig_removed = self.prune_cache_by_prefix(&sig_prefix, min_era); + let pre_nonce_removed = self.prune_cache_by_prefix(&pre_nonce_prefix, min_era); + + (sig_removed, pre_nonce_removed) + } + + fn prune_cache_by_prefix(&self, prefix: &[u8], min_era: u64) -> usize { + let keys: Vec<_> = self + .kv + .iter_prefix(prefix) + .filter_map(|(key, _)| match Self::roast_cache_era_from_key(&key) { + Some(era) if era < min_era => Some(key), + _ => None, + }) + .collect(); + + for key in &keys { + self.kv.take(key); + } + + keys.len() + } + + fn roast_cache_era_from_key(key: &[u8]) -> Option { + let era_offset: usize = 32; + let end = era_offset.checked_add(8)?; + if key.len() < end { + return None; + } + + let mut buf = [0u8; 8]; + buf.copy_from_slice(&key[era_offset..end]); + Some(u64::from_le_bytes(buf)) + } + /// # Safety /// Not ready for using in prod. Intended to be for rpc calls only. pub unsafe fn overlaid(self) -> Self { @@ -703,6 +783,192 @@ impl LatestDataStorageRW for Database { } } +impl DkgStorageRO for Database { + fn dkg_session_state(&self, session_id: DkgSessionId) -> Option { + self.kv + .get(&Key::DkgSessionState(session_id).to_bytes()) + .map(|data| { + DkgSessionState::decode(&mut data.as_slice()) + .expect("Failed to decode data into `DkgSessionState`") + }) + } + + fn public_key_package(&self, era_index: u64) -> Option { + self.kv + .get(&Key::PublicKeyPackage(era_index).to_bytes()) + .map(|data| { + DkgPublicKeyPackage::decode(&mut data.as_slice()) + .expect("Failed to decode data into `PublicKeyPackage`") + }) + } + + fn dkg_key_package(&self, era_index: u64) -> Option { + self.kv + .get(&Key::DkgKeyPackage(era_index).to_bytes()) + .and_then(|data| DkgKeyPackage::deserialize(&data).ok()) + } + + fn dkg_share(&self, era_index: u64) -> Option { + self.kv + .get(&Key::DkgShare(era_index).to_bytes()) + .map(|data| { + DkgShare::decode(&mut data.as_slice()) + .expect("Failed to decode data into `DkgShare`") + }) + } + + fn dkg_vss_commitment(&self, era_index: u64) -> Option { + self.kv + .get(&Key::DkgVssCommitment(era_index).to_bytes()) + .map(|data| { + DkgVssCommitment::decode(&mut data.as_slice()) + .expect("Failed to decode data into `DkgVssCommitment`") + }) + } + + fn dkg_completed(&self, era_index: u64) -> bool { + self.dkg_session_state(DkgSessionId { era: era_index }) + .map(|state| state.completed) + .unwrap_or(false) + } +} + +impl DkgStorageRW for Database { + fn set_dkg_session_state(&self, session_id: DkgSessionId, state: DkgSessionState) { + tracing::trace!("Set DKG session state for era {}", session_id.era); + self.kv + .put(&Key::DkgSessionState(session_id).to_bytes(), state.encode()); + } + + fn mutate_dkg_session_state( + &self, + session_id: DkgSessionId, + f: impl FnOnce(&mut DkgSessionState), + ) { + tracing::trace!("Mutate DKG session state for era {}", session_id.era); + let mut state = self.dkg_session_state(session_id).unwrap_or_default(); + f(&mut state); + self.set_dkg_session_state(session_id, state); + } + + fn set_public_key_package(&self, era_index: u64, package: DkgPublicKeyPackage) { + tracing::trace!("Set PublicKeyPackage for era {era_index}"); + self.kv.put( + &Key::PublicKeyPackage(era_index).to_bytes(), + package.encode(), + ); + } + + fn set_dkg_key_package(&self, era_index: u64, package: DkgKeyPackage) { + tracing::trace!("Set DkgKeyPackage for era {era_index}"); + let bytes = package + .serialize() + .expect("Failed to serialize DkgKeyPackage"); + self.kv + .put(&Key::DkgKeyPackage(era_index).to_bytes(), bytes); + } + + fn set_dkg_share(&self, share: DkgShare) { + tracing::trace!("Set DkgShare for era {}", share.era); + self.kv + .put(&Key::DkgShare(share.era).to_bytes(), share.encode()); + } + + fn set_dkg_vss_commitment(&self, era_index: u64, commitment: DkgVssCommitment) { + tracing::trace!("Set DkgVssCommitment for era {era_index}"); + self.kv.put( + &Key::DkgVssCommitment(era_index).to_bytes(), + commitment.encode(), + ); + } +} + +impl SignStorageRO for Database { + fn sign_session_state(&self, msg_hash: H256, era_index: u64) -> Option { + self.kv + .get(&Key::SignSessionState(msg_hash, era_index).to_bytes()) + .map(|data| { + SignSessionState::decode(&mut data.as_slice()) + .expect("Failed to decode data into `SignSessionState`") + }) + } + + fn signature_cache( + &self, + era_index: u64, + target: ActorId, + msg_hash: H256, + ) -> Option { + self.kv + .get(&Key::SignatureCache(era_index, target, msg_hash).to_bytes()) + .map(|data| { + SignAggregate::decode(&mut data.as_slice()) + .expect("Failed to decode data into `SignAggregate`") + }) + } + + fn pre_nonce_cache(&self, era_index: u64, target: ActorId) -> Option> { + self.kv + .get(&Key::PreNonceCache(era_index, target).to_bytes()) + .map(|data| { + Vec::::decode(&mut data.as_slice()) + .expect("Failed to decode data into `PreNonceCommitment` list") + }) + } + + fn sign_completed(&self, msg_hash: H256, era_index: u64) -> bool { + self.sign_session_state(msg_hash, era_index) + .map(|state| state.completed) + .unwrap_or(false) + } +} + +impl SignStorageRW for Database { + fn set_sign_session_state(&self, msg_hash: H256, era_index: u64, state: SignSessionState) { + tracing::trace!("Set sign session state for msg {msg_hash} era {era_index}"); + self.kv.put( + &Key::SignSessionState(msg_hash, era_index).to_bytes(), + state.encode(), + ); + } + + fn set_signature_cache( + &self, + era_index: u64, + target: ActorId, + msg_hash: H256, + aggregate: SignAggregate, + ) { + tracing::trace!("Set signature cache for msg {msg_hash} era {era_index}"); + self.kv.put( + &Key::SignatureCache(era_index, target, msg_hash).to_bytes(), + aggregate.encode(), + ); + } + + fn set_pre_nonce_cache(&self, era_index: u64, target: ActorId, cache: Vec) { + tracing::trace!("Set pre-nonce cache for era {era_index}"); + self.kv.put( + &Key::PreNonceCache(era_index, target).to_bytes(), + cache.encode(), + ); + } + + fn mutate_sign_session_state( + &self, + msg_hash: H256, + era_index: u64, + f: impl FnOnce(&mut SignSessionState), + ) { + tracing::trace!("Mutate sign session state for msg {msg_hash} era {era_index}"); + let mut state = self + .sign_session_state(msg_hash, era_index) + .unwrap_or_default(); + f(&mut state); + self.set_sign_session_state(msg_hash, era_index, state); + } +} + #[cfg(test)] mod tests { use super::*; @@ -1025,4 +1291,33 @@ mod tests { let hash = db.write_page_data(page_data.clone()); assert_eq!(db.page_data(hash), Some(page_data)); } + + #[test] + fn test_sign_session_state() { + let db = Database::memory(); + + let msg_hash = H256::random(); + let era_index = 1; + + // Initially no state + assert_eq!(db.sign_session_state(msg_hash, era_index), None); + assert!(!db.sign_completed(msg_hash, era_index)); + + // Set state + let state = SignSessionState { + request: None, + nonce_commits: vec![], + sign_shares: vec![], + aggregate: None, + completed: false, + }; + db.set_sign_session_state(msg_hash, era_index, state.clone()); + assert_eq!(db.sign_session_state(msg_hash, era_index), Some(state)); + + // Mutate state + db.mutate_sign_session_state(msg_hash, era_index, |s| { + s.completed = true; + }); + assert!(db.sign_completed(msg_hash, era_index)); + } } diff --git a/ethexe/dkg-roast/Cargo.toml b/ethexe/dkg-roast/Cargo.toml new file mode 100644 index 00000000000..0eb4ff956a1 --- /dev/null +++ b/ethexe/dkg-roast/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "ethexe-dkg-roast" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true + +[dependencies] +ethexe-common.workspace = true +ethexe-db.workspace = true +gprimitives = { workspace = true, features = ["codec", "std", "ethexe"] } + +anyhow = { workspace = true, features = ["std"] } +thiserror.workspace = true +tracing.workspace = true +rand = "0.8" +roast-secp256k1-evm.workspace = true + +[dev-dependencies] +anyhow = { workspace = true, features = ["std"] } +ethexe-common = { workspace = true, features = ["mock"] } + +[features] +test-utils = [] diff --git a/ethexe/dkg-roast/src/crypto/dkg.rs b/ethexe/dkg-roast/src/crypto/dkg.rs new file mode 100644 index 00000000000..8a566e0555f --- /dev/null +++ b/ethexe/dkg-roast/src/crypto/dkg.rs @@ -0,0 +1,175 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Distributed Key Generation (DKG) types backed by the ROAST/FROST library. + +use crate::{Address, ToDigest}; +use alloc::{ + collections::{BTreeMap, BTreeSet}, + vec::Vec, +}; +use core::hash::{Hash, Hasher}; +use parity_scale_codec::{Decode, Encode}; +use roast_secp256k1_evm::frost::{ + Identifier, VerifyingKey, + keys::{ + KeyPackage, PublicKeyPackage, VerifiableSecretSharingCommitment, + dkg::{round1, round2}, + }, +}; +use sha3::{Digest, Keccak256}; + +/// FROST identifier used to index participants in DKG/ROAST. +pub type DkgIdentifier = Identifier; +/// Local key package derived after DKG finalization. +pub type DkgKeyPackage = KeyPackage; +/// Aggregated public key package from DKG. +pub type DkgPublicKeyPackage = PublicKeyPackage; +/// Round1 commitment package produced by a participant. +pub type DkgRound1Package = round1::Package; +/// Round2 encrypted package produced for each recipient. +pub type DkgRound2Package = round2::Package; +/// Compressed verifying key (secp256k1 point). +pub type DkgVerifyingKey = VerifyingKey; +/// Verifiable secret sharing commitment (VSS). +pub type DkgVssCommitment = VerifiableSecretSharingCommitment; + +/// Persisted local signing share produced by DKG. +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] +pub struct DkgShare { + pub era: u64, + pub identifier: DkgIdentifier, + pub index: u16, + pub signing_share: Vec, + pub verifying_share: Vec, + pub threshold: u16, +} + +/// DKG session identifier (era-based). +#[derive(Clone, Copy, Debug, Encode, Decode, PartialEq, Eq, Hash)] +pub struct DkgSessionId { + pub era: u64, +} + +impl ToDigest for DkgSessionId { + fn update_hasher(&self, hasher: &mut Keccak256) { + hasher.update(self.era.to_be_bytes()); + } +} + +/// Round 1 broadcast message (commitment package + temp key). +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] +pub struct DkgRound1 { + pub session: DkgSessionId, + pub package: DkgRound1Package, + pub temp_public_key: DkgVerifyingKey, +} + +impl Hash for DkgRound1 { + fn hash(&self, state: &mut H) { + state.write(&self.encode()); + } +} + +impl ToDigest for DkgRound1 { + fn update_hasher(&self, hasher: &mut Keccak256) { + hasher.update(self.encode()); + } +} + +/// Round 2 packages from a single participant (encrypted per receiver). +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] +pub struct DkgRound2 { + pub session: DkgSessionId, + pub packages: BTreeMap, +} + +impl Hash for DkgRound2 { + fn hash(&self, state: &mut H) { + state.write(&self.encode()); + } +} + +impl ToDigest for DkgRound2 { + fn update_hasher(&self, hasher: &mut Keccak256) { + hasher.update(self.encode()); + } +} + +/// Round 2 culprits report (cheater detection). +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] +pub struct DkgRound2Culprits { + pub session: DkgSessionId, + pub culprits: BTreeSet, + pub temp_secret_key: Vec, +} + +impl Hash for DkgRound2Culprits { + fn hash(&self, state: &mut H) { + state.write(&self.encode()); + } +} + +impl ToDigest for DkgRound2Culprits { + fn update_hasher(&self, hasher: &mut Keccak256) { + hasher.update(self.encode()); + } +} + +/// Complaint about an invalid share in Round 2. +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] +pub struct DkgComplaint { + pub session: DkgSessionId, + pub complainer: Address, + pub offender: Address, + pub reason: Vec, +} + +impl Hash for DkgComplaint { + fn hash(&self, state: &mut H) { + state.write(&self.encode()); + } +} + +impl ToDigest for DkgComplaint { + fn update_hasher(&self, hasher: &mut Keccak256) { + hasher.update(self.encode()); + } +} + +/// Justification for a complaint (reveals share/proof). +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] +pub struct DkgJustification { + pub session: DkgSessionId, + pub complainer: Address, + pub offender: Address, + pub share: [u8; 32], + pub proof: Vec, +} + +impl Hash for DkgJustification { + fn hash(&self, state: &mut H) { + state.write(&self.encode()); + } +} + +impl ToDigest for DkgJustification { + fn update_hasher(&self, hasher: &mut Keccak256) { + hasher.update(self.encode()); + } +} diff --git a/ethexe/dkg-roast/src/crypto/frost.rs b/ethexe/dkg-roast/src/crypto/frost.rs new file mode 100644 index 00000000000..a83a79de6c6 --- /dev/null +++ b/ethexe/dkg-roast/src/crypto/frost.rs @@ -0,0 +1,478 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! # FROST Threshold Signature Module +//! +//! This module implements FROST (Flexible Round-Optimized Schnorr Threshold) signatures +//! with ROAST (Robust Asynchronous Schnorr Threshold) coordinator for asynchronous signing. +//! +//! ## Protocol Phases +//! +//! 1. **Session Initiation**: Leader broadcasts signing request +//! 2. **Nonce Commitment**: Participants commit to nonces +//! 3. **Partial Signatures**: Participants compute and send partial signatures +//! 4. **Aggregation**: Leader aggregates partials into final signature +//! +//! ## Key Features +//! +//! - **Key Tweaking**: Support for ActorId-specific key tweaking +//! - **Leader Election**: Deterministic leader selection with failover +//! - **Byzantine Tolerance**: Invalid partials are rejected, signing continues + +use super::dkg::DkgSessionId; +use crate::{Address, ToDigest}; +use alloc::vec::Vec; +use gprimitives::{ActorId, H256}; +use parity_scale_codec::{Decode, Encode}; +use sha3::{Digest as _, Keccak256}; + +/// Type of message being signed +#[derive(Clone, Copy, Debug, Encode, Decode, PartialEq, Eq, Hash)] +#[repr(u8)] +pub enum SignKind { + /// Signing a batch commitment hash + BatchCommitment = 0, + /// Signing an arbitrary pre-hashed message + ArbitraryHash = 1, +} + +/// Session request to initiate FROST threshold signing +/// +/// The leader broadcasts this to all participants to start a signing session. +/// Participants use this to synchronize on what message to sign and with which parameters. +/// +/// ## Leader Selection +/// Leader is deterministically elected based on: +/// - Validator set for the era +/// - Message hash being signed +/// - Era index +/// +/// This ensures all participants agree on who the leader is without coordination. +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Hash)] +pub struct SignSessionRequest { + /// DKG session (era) to use for signing + pub session: DkgSessionId, + + /// Elected leader address + pub leader: Address, + + /// Leader election attempt counter + pub attempt: u32, + + /// Hash of message to sign + /// For BatchCommitment: digest of BatchCommitment + /// For ArbitraryHash: keccak256 of arbitrary data + pub msg_hash: H256, + + /// ActorId for key tweaking + /// This allows deriving contract-specific keys from the same base key + pub tweak_target: ActorId, + + /// Threshold (minimum signatures needed) + pub threshold: u16, + + /// Sorted list of participants for this session + /// Used for computing Lagrange coefficients + pub participants: Vec
, + + /// Type of message being signed + pub kind: SignKind, +} + +impl ToDigest for SignSessionRequest { + fn update_hasher(&self, hasher: &mut Keccak256) { + self.session.update_hasher(hasher); + hasher.update(self.leader); + hasher.update(self.attempt.to_be_bytes()); + hasher.update(self.msg_hash.as_bytes()); + hasher.update(self.tweak_target.as_ref()); + hasher.update(self.threshold.to_be_bytes()); + for participant in &self.participants { + hasher.update(participant); + } + hasher.update([self.kind as u8]); + } +} + +/// Nonce commitment from participant +/// +/// Each participant generates a random nonce and commits to it by sending +/// the nonce commitment (R_i = k_i * G) to the leader. +/// +/// ## Security +/// - Nonce MUST be fresh and never reused +/// - Nonce is kept secret until partial signature phase +/// - Commitment allows verifying partial signature later +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Hash)] +pub struct SignNonceCommit { + /// DKG session identifier + pub session: DkgSessionId, + + /// Participant sending this nonce commitment + pub from: Address, + + /// Message hash being signed + pub msg_hash: H256, + + /// Serialized signing commitments (hiding + binding) + pub nonce_commit: Vec, +} + +impl ToDigest for SignNonceCommit { + fn update_hasher(&self, hasher: &mut Keccak256) { + self.session.update_hasher(hasher); + hasher.update(self.from); + hasher.update(self.msg_hash.as_bytes()); + hasher.update(&self.nonce_commit); + } +} + +/// Signing package from coordinator (selected signer commitments) +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Hash)] +pub struct SignNoncePackage { + /// DKG session identifier + pub session: DkgSessionId, + + /// Message hash being signed + pub msg_hash: H256, + + /// Serialized signing commitments from selected signers + pub commitments: Vec<(Address, Vec)>, +} + +impl ToDigest for SignNoncePackage { + fn update_hasher(&self, hasher: &mut Keccak256) { + self.session.update_hasher(hasher); + hasher.update(self.msg_hash.as_bytes()); + for (addr, commit) in &self.commitments { + hasher.update(addr); + hasher.update(commit); + } + } +} + +/// Malicious signer report for a signing session +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Hash)] +pub struct SignCulprits { + /// DKG session identifier + pub session: DkgSessionId, + + /// Message hash being signed + pub msg_hash: H256, + + /// Reported malicious participants + pub culprits: Vec
, +} + +impl ToDigest for SignCulprits { + fn update_hasher(&self, hasher: &mut Keccak256) { + self.session.update_hasher(hasher); + hasher.update(self.msg_hash.as_bytes()); + for culprit in &self.culprits { + hasher.update(culprit); + } + } +} + +/// Partial signature from participant +/// +/// After nonce commitments are collected, each participant computes their +/// partial signature using: +/// - Their secret share (possibly tweaked) +/// - Their nonce +/// - Aggregated nonce commitment from all signers +/// - Lagrange coefficient for their index +/// +/// ## Verification +/// Leader verifies each partial before aggregation: +/// g^z_i == R_i + c * λ_i * PK_i +/// where: +/// - z_i is the partial signature +/// - R_i is the nonce commitment +/// - c is the challenge +/// - λ_i is the Lagrange coefficient +/// - PK_i is the participant's public share +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Hash)] +pub struct SignShare { + /// DKG session identifier + pub session: DkgSessionId, + + /// Participant sending this partial signature + pub from: Address, + + /// Message hash being signed + pub msg_hash: H256, + + /// Serialized FROST signature share + pub partial_sig: Vec, + + /// Fresh signing commitments for the next session + pub next_commitments: Vec, +} + +impl ToDigest for SignShare { + fn update_hasher(&self, hasher: &mut Keccak256) { + self.session.update_hasher(hasher); + hasher.update(self.from); + hasher.update(self.msg_hash.as_bytes()); + hasher.update(&self.partial_sig); + hasher.update(&self.next_commitments); + } +} + +/// Aggregated signature from leader +/// +/// After collecting threshold partial signatures, the leader aggregates them +/// into a final Schnorr signature. +/// +/// ## Signature Format (96 bytes) +/// - R_x: x-coordinate of aggregated nonce (32 bytes, big-endian) +/// - R_y: y-coordinate of aggregated nonce (32 bytes, big-endian) +/// - z: aggregated signature scalar (32 bytes, big-endian) +/// +/// ## Verification +/// On-chain verification: R == z*G - c*PK_tweaked +/// where: +/// - R = (R_x, R_y) +/// - PK_tweaked = PK_agg + hash_to_scalar(ActorId) * G +/// - c = hash(R, PK_tweaked, msg_hash) +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Hash)] +pub struct SignAggregate { + /// DKG session identifier + pub session: DkgSessionId, + + /// Message hash that was signed + pub msg_hash: H256, + + /// Tweaked public key used for signing + pub tweaked_pk: [u8; 33], + + /// Aggregated signature (R_x || R_y || z) - 96 bytes total + pub signature96: [u8; 96], +} + +/// Pre-generated nonce cache entry for a signer. +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] +pub struct PreNonceCommitment { + /// Serialized signing commitments (hiding + binding). + pub commitments: Vec, + /// Serialized signing nonces (must never be reused). + pub nonces: Vec, +} + +impl ToDigest for SignAggregate { + fn update_hasher(&self, hasher: &mut Keccak256) { + self.session.update_hasher(hasher); + hasher.update(self.msg_hash.as_bytes()); + hasher.update(self.tweaked_pk); + hasher.update(self.signature96); + } +} + +impl SignAggregate { + /// Extracts (R_x, R_y, z) from the 96-byte signature. + pub fn signature_components(&self) -> ([u8; 32], [u8; 32], [u8; 32]) { + let mut r_x = [0u8; 32]; + let mut r_y = [0u8; 32]; + let mut z = [0u8; 32]; + + r_x.copy_from_slice(&self.signature96[0..32]); + r_y.copy_from_slice(&self.signature96[32..64]); + z.copy_from_slice(&self.signature96[64..96]); + + (r_x, r_y, z) + } + + /// Creates a `SignAggregate` from signature components. + pub fn from_components( + session: DkgSessionId, + msg_hash: H256, + tweaked_pk: [u8; 33], + r_x: [u8; 32], + r_y: [u8; 32], + z: [u8; 32], + ) -> Self { + let mut signature96 = [0u8; 96]; + signature96[0..32].copy_from_slice(&r_x); + signature96[32..64].copy_from_slice(&r_y); + signature96[64..96].copy_from_slice(&z); + + Self { + session, + msg_hash, + tweaked_pk, + signature96, + } + } +} + +/// Leader election helper +/// +/// Deterministically selects a leader from the validator set based on +/// the message hash and era. This ensures all participants agree on +/// the same leader without coordination. +/// Deterministically selects the ROAST leader for a session. +pub fn elect_leader(validators: &[Address], msg_hash: &H256, era: u64) -> Address { + let mut sorted_validators = validators.to_vec(); + sorted_validators.sort(); + + let mut hasher = Keccak256::new(); + hasher.update(b"ROAST_LEADER_ELECTION"); + hasher.update(msg_hash.as_bytes()); + hasher.update(era.to_le_bytes()); + let hash = hasher.finalize(); + + let seed = u64::from_be_bytes(hash[0..8].try_into().unwrap()); + let idx = (seed % sorted_validators.len() as u64) as usize; + + sorted_validators[idx] +} + +/// Fallback leader selection on timeout +/// +/// If the current leader fails to respond, elect the next leader +/// in deterministic round-robin order. +/// Picks the next leader in sorted validator order (round-robin). +pub fn next_leader(current: Address, validators: &[Address]) -> Address { + let mut sorted = validators.to_vec(); + sorted.sort(); + + let current_idx = sorted.iter().position(|&v| v == current).unwrap_or(0); + let next_idx = (current_idx + 1) % sorted.len(); + + sorted[next_idx] +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_sign_kind_encoding() { + assert_eq!(SignKind::BatchCommitment as u8, 0); + assert_eq!(SignKind::ArbitraryHash as u8, 1); + } + + #[test] + fn test_sign_session_request_digest() { + let request = SignSessionRequest { + session: DkgSessionId { era: 1 }, + leader: Address([1u8; 20]), + attempt: 0, + msg_hash: H256([42u8; 32]), + tweak_target: ActorId::from([1u8; 32]), + threshold: 3, + participants: vec![Address([1u8; 20]), Address([2u8; 20])], + kind: SignKind::BatchCommitment, + }; + + let digest1 = request.to_digest(); + let digest2 = request.to_digest(); + assert_eq!(digest1, digest2, "Digest should be deterministic"); + } + + #[test] + fn test_signature_components() { + let r_x = [1u8; 32]; + let r_y = [2u8; 32]; + let z = [3u8; 32]; + + let agg = SignAggregate::from_components( + DkgSessionId { era: 1 }, + H256([0u8; 32]), + [0u8; 33], + r_x, + r_y, + z, + ); + + let (extracted_rx, extracted_ry, extracted_z) = agg.signature_components(); + assert_eq!(extracted_rx, r_x); + assert_eq!(extracted_ry, r_y); + assert_eq!(extracted_z, z); + } + + #[test] + fn test_signature96_layout_matches_components() { + let r_x = [0x11u8; 32]; + let r_y = [0x22u8; 32]; + let z = [0x33u8; 32]; + + let aggregate = SignAggregate::from_components( + DkgSessionId { era: 9 }, + H256([9u8; 32]), + [9u8; 33], + r_x, + r_y, + z, + ); + + let mut expected = [0u8; 96]; + expected[0..32].copy_from_slice(&r_x); + expected[32..64].copy_from_slice(&r_y); + expected[64..96].copy_from_slice(&z); + + assert_eq!( + aggregate.signature96, expected, + "signature96 must be R_x || R_y || z" + ); + } + + #[test] + fn test_leader_election_deterministic() { + let validators = vec![Address([1u8; 20]), Address([2u8; 20]), Address([3u8; 20])]; + let msg_hash = H256([42u8; 32]); + let era = 1; + + let leader1 = elect_leader(&validators, &msg_hash, era); + let leader2 = elect_leader(&validators, &msg_hash, era); + + assert_eq!(leader1, leader2, "Leader election should be deterministic"); + } + + #[test] + fn test_leader_election_with_different_order() { + let validators1 = vec![Address([3u8; 20]), Address([1u8; 20]), Address([2u8; 20])]; + let validators2 = vec![Address([1u8; 20]), Address([2u8; 20]), Address([3u8; 20])]; + let msg_hash = H256([42u8; 32]); + let era = 1; + + let leader1 = elect_leader(&validators1, &msg_hash, era); + let leader2 = elect_leader(&validators2, &msg_hash, era); + + assert_eq!( + leader1, leader2, + "Leader should be same regardless of input order (sorted internally)" + ); + } + + #[test] + fn test_next_leader_rotation() { + let validators = vec![Address([1u8; 20]), Address([2u8; 20]), Address([3u8; 20])]; + + let leader1 = Address([1u8; 20]); + let leader2 = next_leader(leader1, &validators); + assert_eq!(leader2, Address([2u8; 20])); + + let leader3 = next_leader(leader2, &validators); + assert_eq!(leader3, Address([3u8; 20])); + + let leader4 = next_leader(leader3, &validators); + assert_eq!(leader4, Address([1u8; 20]), "Should wrap around"); + } +} diff --git a/ethexe/dkg-roast/src/crypto/mod.rs b/ethexe/dkg-roast/src/crypto/mod.rs new file mode 100644 index 00000000000..3cb87a40c9e --- /dev/null +++ b/ethexe/dkg-roast/src/crypto/mod.rs @@ -0,0 +1,30 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! # Cryptographic Primitives Module +//! +//! This module provides cryptographic primitives for DKG (Distributed Key Generation), +//! FROST (Flexible Round-Optimized Schnorr Threshold) signatures, and key tweaking. + +pub mod dkg; +pub mod frost; +pub mod tweak; + +pub use dkg::*; +pub use frost::*; +pub use tweak::*; diff --git a/ethexe/dkg-roast/src/crypto/tweak.rs b/ethexe/dkg-roast/src/crypto/tweak.rs new file mode 100644 index 00000000000..ee041826403 --- /dev/null +++ b/ethexe/dkg-roast/src/crypto/tweak.rs @@ -0,0 +1,404 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! # Key Tweaking Module +//! +//! This module implements deterministic key tweaking for contract-specific signing. +//! The same base DKG key can be "tweaked" to derive unique keys for different ActorIds. +//! +//! ## Mathematical Foundation +//! +//! Given a base key pair (sk, pk) and a tweak scalar h: +//! - Tweaked secret key: sk' = sk + h (mod n) +//! - Tweaked public key: pk' = pk + h*G +//! +//! Where: +//! - h = hash_to_scalar(ActorId) +//! - G is the secp256k1 generator point +//! - n is the curve order +//! +//! ## Security Properties +//! +//! - **Deterministic**: Same ActorId always produces same tweak +//! - **Independent**: Different ActorIds produce independent keys +//! - **Verifiable**: Anyone can compute tweaked public key from base pk and ActorId +//! - **Signature Compatibility**: Signatures with sk' verify against pk' +//! +//! ## Use Cases +//! +//! - Contract-specific signing: Different contracts get different keys +//! - Key isolation: Compromise of one tweaked key doesn't affect others +//! - Privacy: External observers can't link tweaked keys to same base key + +use anyhow::{Context, Result, anyhow}; +use gprimitives::ActorId; +use k256::{ + AffinePoint, ProjectivePoint, Scalar, U256, + elliptic_curve::{ + ops::Reduce, + sec1::{FromEncodedPoint, ToEncodedPoint}, + }, +}; +use sha3::{Digest as _, Keccak256}; + +/// Hash an ActorId to a scalar value for key tweaking +/// +/// This function derives a deterministic scalar from an ActorId using +/// Keccak256 hash. The hash is reduced modulo the curve order to produce +/// a valid scalar. +/// +/// ## Domain Separation +/// +/// Uses "ETHEXE_KEY_TWEAK" prefix to prevent hash collisions with other +/// uses of ActorId hashing in the system. +/// +/// # Arguments +/// +/// * `actor` - The ActorId to hash +/// +/// # Returns +/// +/// A scalar value in the range [0, n) where n is the secp256k1 curve order +/// +/// # Example +/// +/// ```ignore +/// use gprimitives::ActorId; +/// use ethexe_common::crypto::tweak::hash_to_scalar; +/// +/// let actor = ActorId::from([1u8; 32]); +/// let tweak = hash_to_scalar(actor); +/// ``` +pub fn hash_to_scalar(actor: ActorId) -> Scalar { + if actor == ActorId::zero() { + return Scalar::ZERO; + } + let mut hasher = Keccak256::new(); + hasher.update(b"ETHEXE_KEY_TWEAK"); + hasher.update(actor.as_ref()); + let hash = hasher.finalize(); + + // Convert hash to U256 and reduce modulo curve order + let hash_u256 = U256::from_be_slice(&hash); + Scalar::reduce(hash_u256) +} + +/// Tweak a public key by adding h*G +/// +/// Computes pk' = pk + h*G where: +/// - pk is the base public key (compressed format) +/// - h is the tweak scalar +/// - G is the secp256k1 generator +/// +/// # Arguments +/// +/// * `pk` - Base public key in compressed SEC1 format (33 bytes) +/// * `tweak` - Tweak scalar value +/// +/// # Returns +/// +/// Tweaked public key in compressed format +/// +/// # Errors +/// +/// - If input public key is invalid +/// - If resulting point is point at infinity +/// +/// # Example +/// +/// ```ignore +/// use ethexe_common::crypto::tweak::{hash_to_scalar, tweak_pubkey}; +/// use gprimitives::ActorId; +/// +/// let base_pk = [0u8; 33]; // Your base public key +/// let actor = ActorId::from([1u8; 32]); +/// let tweak = hash_to_scalar(actor); +/// let tweaked_pk = tweak_pubkey(&base_pk, tweak).unwrap(); +/// ``` +pub fn tweak_pubkey(pk: &[u8; 33], tweak: Scalar) -> Result<[u8; 33]> { + // Decode base public key + let encoded_point = k256::EncodedPoint::from_bytes(pk) + .map_err(|err| anyhow!("Invalid public key encoding: {err}"))?; + + let pk_point = AffinePoint::from_encoded_point(&encoded_point) + .into_option() + .context("Invalid public key point")?; + + // Convert to projective for arithmetic + let pk_projective = ProjectivePoint::from(pk_point); + + // Compute h*G + let generator = ProjectivePoint::GENERATOR; + let tweak_point = generator * tweak; + + // pk' = pk + h*G + let tweaked_projective = pk_projective + tweak_point; + + // Convert back to affine and encode + let tweaked_affine = tweaked_projective.to_affine(); + let encoded = tweaked_affine.to_encoded_point(true); // true = compressed + + let bytes = encoded.as_bytes(); + let mut result = [0u8; 33]; + result.copy_from_slice(bytes); + + Ok(result) +} + +/// Tweak a secret share by adding the tweak scalar +/// +/// Computes sk' = sk + h (mod n) where: +/// - sk is the base secret share +/// - h is the tweak scalar +/// - n is the secp256k1 curve order +/// +/// # Arguments +/// +/// * `share` - Base secret share as scalar +/// * `tweak` - Tweak scalar value +/// +/// # Returns +/// +/// Tweaked secret share +/// +/// # Example +/// +/// ```ignore +/// use ethexe_common::crypto::tweak::{hash_to_scalar, tweak_share}; +/// use gprimitives::ActorId; +/// use k256::Scalar; +/// +/// let base_share = Scalar::from(42u64); +/// let actor = ActorId::from([1u8; 32]); +/// let tweak = hash_to_scalar(actor); +/// let tweaked_share = tweak_share(base_share, tweak); +/// ``` +pub fn tweak_share(share: Scalar, tweak: Scalar) -> Scalar { + share + tweak +} + +/// Verify that tweaked keys are consistent +/// +/// Checks that verify(pk', msg, sig) holds where: +/// - pk' = tweak_pubkey(pk, h) +/// - sig was created with sk' = tweak_share(sk, h) +/// +/// This is primarily for testing to ensure our tweaking implementation is correct. +/// +/// # Arguments +/// +/// * `base_pk` - Original public key +/// * `tweaked_pk` - Result of tweak_pubkey(base_pk, tweak) +/// * `tweak` - The tweak scalar used +/// +/// # Returns +/// +/// true if tweaked_pk == base_pk + tweak*G +pub fn verify_tweak_consistency( + base_pk: &[u8; 33], + tweaked_pk: &[u8; 33], + tweak: Scalar, +) -> Result { + let computed_tweaked = tweak_pubkey(base_pk, tweak)?; + Ok(computed_tweaked == *tweaked_pk) +} + +#[cfg(test)] +mod tests { + use super::*; + use k256::SecretKey; + + #[test] + fn test_hash_to_scalar_deterministic() { + let actor = ActorId::from([42u8; 32]); + + let scalar1 = hash_to_scalar(actor); + let scalar2 = hash_to_scalar(actor); + + assert_eq!( + scalar1.to_bytes(), + scalar2.to_bytes(), + "hash_to_scalar should be deterministic" + ); + } + + #[test] + fn test_hash_to_scalar_different_inputs() { + let actor1 = ActorId::from([1u8; 32]); + let actor2 = ActorId::from([2u8; 32]); + + let scalar1 = hash_to_scalar(actor1); + let scalar2 = hash_to_scalar(actor2); + + assert_ne!( + scalar1.to_bytes(), + scalar2.to_bytes(), + "Different ActorIds should produce different scalars" + ); + } + + #[test] + fn test_hash_to_scalar_zero_actor_is_zero() { + let actor = ActorId::zero(); + + let scalar = hash_to_scalar(actor); + + assert_eq!( + scalar.to_bytes(), + Scalar::ZERO.to_bytes(), + "Zero ActorId should map to zero tweak" + ); + } + + #[test] + fn test_tweak_pubkey_valid() { + // Generate a key pair using a deterministic seed for testing + let secret_bytes = [42u8; 32]; + let secret = SecretKey::from_bytes(&secret_bytes.into()).unwrap(); + let public = secret.public_key(); + + // Convert to compressed format + let encoded = public.to_encoded_point(true); + let mut pk_bytes = [0u8; 33]; + pk_bytes.copy_from_slice(encoded.as_bytes()); + + // Create a tweak + let actor = ActorId::from([1u8; 32]); + let tweak = hash_to_scalar(actor); + + // Tweak the public key + let tweaked_pk = tweak_pubkey(&pk_bytes, tweak).unwrap(); + + // Verify it's different from base + assert_ne!(pk_bytes, tweaked_pk, "Tweaked key should differ from base"); + } + + #[test] + fn test_tweak_share() { + let base_share = Scalar::from(42u64); + let tweak = Scalar::from(10u64); + + let tweaked = tweak_share(base_share, tweak); + + // Verify: tweaked = base + tweak + assert_eq!(tweaked, base_share + tweak); + } + + #[test] + fn test_tweak_consistency() { + // Generate a key pair using deterministic seed + let secret_bytes = [7u8; 32]; + let secret = SecretKey::from_bytes(&secret_bytes.into()).unwrap(); + let public = secret.public_key(); + + let encoded = public.to_encoded_point(true); + let mut pk_bytes = [0u8; 33]; + pk_bytes.copy_from_slice(encoded.as_bytes()); + + // Create tweak + let actor = ActorId::from([1u8; 32]); + let tweak = hash_to_scalar(actor); + + // Tweak public key + let tweaked_pk = tweak_pubkey(&pk_bytes, tweak).unwrap(); + + // Verify consistency + assert!(verify_tweak_consistency(&pk_bytes, &tweaked_pk, tweak).unwrap()); + } + + #[test] + fn test_tweak_pubkey_and_share_correspondence() { + // Generate base key pair with deterministic seed + let secret_bytes = [99u8; 32]; + let sk = SecretKey::from_bytes(&secret_bytes.into()).unwrap(); + let pk = sk.public_key(); + + let encoded = pk.to_encoded_point(true); + let mut pk_bytes = [0u8; 33]; + pk_bytes.copy_from_slice(encoded.as_bytes()); + + // Create tweak + let actor = ActorId::from([123u8; 32]); + let tweak = hash_to_scalar(actor); + + // Tweak both secret and public + let sk_scalar = sk.to_nonzero_scalar(); + let tweaked_sk_scalar = tweak_share(*sk_scalar.as_ref(), tweak); + let tweaked_pk = tweak_pubkey(&pk_bytes, tweak).unwrap(); + + // Verify that tweaked_pk corresponds to tweaked_sk + let tweaked_pk_from_sk = (ProjectivePoint::GENERATOR * tweaked_sk_scalar).to_affine(); + let tweaked_pk_from_sk_encoded = tweaked_pk_from_sk.to_encoded_point(true); + let mut tweaked_pk_from_sk_bytes = [0u8; 33]; + tweaked_pk_from_sk_bytes.copy_from_slice(tweaked_pk_from_sk_encoded.as_bytes()); + + assert_eq!( + tweaked_pk, tweaked_pk_from_sk_bytes, + "Tweaked public key should match key derived from tweaked secret" + ); + } + + #[test] + fn test_multiple_tweaks_commutative() { + let secret_bytes = [55u8; 32]; + let sk = SecretKey::from_bytes(&secret_bytes.into()).unwrap(); + let pk = sk.public_key(); + + let encoded = pk.to_encoded_point(true); + let mut pk_bytes = [0u8; 33]; + pk_bytes.copy_from_slice(encoded.as_bytes()); + + let actor1 = ActorId::from([1u8; 32]); + let actor2 = ActorId::from([2u8; 32]); + + let tweak1 = hash_to_scalar(actor1); + let tweak2 = hash_to_scalar(actor2); + let combined_tweak = tweak1 + tweak2; + + // Apply tweaks separately + let pk_tweaked1 = tweak_pubkey(&pk_bytes, tweak1).unwrap(); + let pk_tweaked12 = tweak_pubkey(&pk_tweaked1, tweak2).unwrap(); + + // Apply combined tweak + let pk_tweaked_combined = tweak_pubkey(&pk_bytes, combined_tweak).unwrap(); + + assert_eq!( + pk_tweaked12, pk_tweaked_combined, + "Sequential tweaks should equal combined tweak" + ); + } + + #[test] + fn test_zero_tweak_identity() { + let secret_bytes = [11u8; 32]; + let sk = SecretKey::from_bytes(&secret_bytes.into()).unwrap(); + let pk = sk.public_key(); + + let encoded = pk.to_encoded_point(true); + let mut pk_bytes = [0u8; 33]; + pk_bytes.copy_from_slice(encoded.as_bytes()); + + let zero_tweak = Scalar::ZERO; + let tweaked_pk = tweak_pubkey(&pk_bytes, zero_tweak).unwrap(); + + assert_eq!( + pk_bytes, tweaked_pk, + "Zero tweak should return original key" + ); + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/core/complaints.rs b/ethexe/dkg-roast/src/engine/dkg/core/complaints.rs new file mode 100644 index 00000000000..285cef58f07 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/core/complaints.rs @@ -0,0 +1,102 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Complaint/justification handling for DKG protocol. + +use super::protocol::DkgProtocol; +use crate::engine::dkg::DkgErrorKind; +use anyhow::{Result, anyhow}; +use ethexe_common::crypto::{DkgComplaint, DkgJustification}; +use roast_secp256k1_evm::frost::keys::{SecretShare, SigningShare}; + +impl DkgProtocol { + /// Records a complaint against an offender for this session. + pub fn receive_complaint(&mut self, message: DkgComplaint) -> Result<()> { + if message.session != self.config.session { + return Err(anyhow::Error::new(DkgErrorKind::SessionIdMismatch)); + } + if self.identifier_for(message.complainer).is_none() { + return Err(anyhow::Error::new(DkgErrorKind::UnknownComplainer)); + } + if self.identifier_for(message.offender).is_none() { + return Err(anyhow::Error::new(DkgErrorKind::UnknownOffender)); + } + self.complaints.push(message); + Ok(()) + } + + /// Records a justification and returns whether it is valid. + pub fn receive_justification(&mut self, message: DkgJustification) -> Result { + if message.session != self.config.session { + return Err(anyhow::Error::new(DkgErrorKind::SessionIdMismatch)); + } + if self.identifier_for(message.complainer).is_none() { + return Err(anyhow::Error::new(DkgErrorKind::UnknownComplainer)); + } + if self.identifier_for(message.offender).is_none() { + return Err(anyhow::Error::new(DkgErrorKind::UnknownOffender)); + } + // Validate the revealed share against the offender's commitment. + let is_valid = self.verify_justification(&message)?; + if is_valid { + self.complaints.retain(|entry| { + !(entry.complainer == message.complainer && entry.offender == message.offender) + }); + } + self.justifications.push(message); + Ok(is_valid) + } + + /// Returns all recorded complaints for this session. + pub fn complaints(&self) -> Vec { + self.complaints.clone() + } + + /// Returns all recorded justifications for this session. + pub fn justifications(&self) -> Vec { + self.justifications.clone() + } + + /// Verifies a justification share against the offender's commitment. + fn verify_justification(&self, message: &DkgJustification) -> Result { + // Only verify when a matching complaint exists. + if !self.complaints.iter().any(|complaint| { + complaint.offender == message.offender && complaint.complainer == message.complainer + }) { + return Ok(false); + } + let offender_id = self + .identifier_for(message.offender) + .ok_or_else(|| anyhow!("Unknown offender"))?; + let complainer_id = self + .identifier_for(message.complainer) + .ok_or_else(|| anyhow!("Unknown complainer"))?; + let round1 = self + .round1_packages + .get(&offender_id) + .ok_or_else(|| anyhow!("Missing offender commitment"))?; + let signing_share = SigningShare::deserialize(&message.share) + .map_err(|err| anyhow!("Failed to deserialize justification share: {err}"))?; + let secret_share = SecretShare::new( + complainer_id, + signing_share, + round1.package.commitment().clone(), + ); + Ok(secret_share.verify().is_ok()) + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/core/finalize.rs b/ethexe/dkg-roast/src/engine/dkg/core/finalize.rs new file mode 100644 index 00000000000..e7d540de6a1 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/core/finalize.rs @@ -0,0 +1,114 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Finalization helpers for DKG protocol. + +use super::{Group, GroupSerialization, protocol::DkgProtocol}; +use crate::engine::dkg::{DkgErrorKind, FinalizeResult}; +use anyhow::{Result, anyhow}; +use ethexe_common::crypto::{DkgRound2Culprits, DkgVssCommitment}; +use roast_secp256k1_evm::{ + error::DkgParticipantError, frost::keys::VerifiableSecretSharingCommitment, +}; + +impl DkgProtocol { + /// Attempt to finalize DKG for this participant. + pub fn finalize(&mut self) -> Result { + // Finalize only after all round2 packages are present. + if !self.is_round2_complete() { + return Err(anyhow::Error::new(DkgErrorKind::Round2NotComplete)); + } + + let round2_packages = self + .dealer + .round2_packages_encrypted(self.self_identifier()) + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::MissingRound2PackagesForSelf))? + .clone(); + + // Let the participant decrypt and validate round2 packages. + match self + .participant + .receive_round2_packages_encrypted(round2_packages) + { + Ok((key_package, public_key_package)) => { + // Aggregate commitments into the final VSS commitment. + let vss_commitment = self.sum_vss_commitments()?; + Ok(FinalizeResult::Completed { + key_package: Box::new(key_package), + public_key_package, + vss_commitment, + }) + } + Err(DkgParticipantError::InvalidSecretShares) => { + // Report culprits and provide temp secret key for verification. + let culprits = self.participant.round2_culprits()?; + let temp_secret_key = self.participant.temp_secret_key().serialize(); + + Ok(FinalizeResult::Culprits(DkgRound2Culprits { + session: self.config.session, + culprits, + temp_secret_key, + })) + } + Err(err) => Err(anyhow!("Round2 finalize failed: {err}")), + } + } + + /// Sums per-participant VSS commitments into a single commitment. + fn sum_vss_commitments(&self) -> Result { + // Sum polynomial commitments coefficient-wise. + let commitments = self + .round1_packages + .values() + .map(|msg| msg.package.commitment().serialize()) + .collect::>>, _>>()?; + + let mut iter = commitments.into_iter(); + let first = iter.next().ok_or_else(|| anyhow!("No commitments"))?; + let coeff_len = first.len(); + + let mut sums = vec![::identity(); coeff_len]; + + for serialized_commitment in std::iter::once(first).chain(iter) { + if serialized_commitment.len() != coeff_len { + return Err(anyhow!("Commitment length mismatch")); + } + for (idx, coeff_bytes) in serialized_commitment.into_iter().enumerate() { + let serialized: GroupSerialization = coeff_bytes + .try_into() + .map_err(|_| anyhow!("Invalid coefficient length"))?; + let element = + ::deserialize(&serialized) + .map_err(|err| anyhow!("Failed to deserialize coefficient: {err}"))?; + sums[idx] += element; + } + } + + let aggregated = sums + .into_iter() + .map(|element| { + let serialized = ::serialize(&element) + .map_err(|err| anyhow!("Failed to serialize commitment: {err}"))?; + Ok(serialized.to_vec()) + }) + .collect::>>>()?; + + VerifiableSecretSharingCommitment::deserialize(aggregated) + .map_err(|err| anyhow!("Failed to build VSS commitment: {err}")) + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/core/identifiers.rs b/ethexe/dkg-roast/src/engine/dkg/core/identifiers.rs new file mode 100644 index 00000000000..a96be2837b2 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/core/identifiers.rs @@ -0,0 +1,60 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Identifier mapping helpers for DKG protocol. + +use super::protocol::DkgProtocol; +use ethexe_common::{ + Address, + crypto::{DkgIdentifier, DkgSessionId}, +}; + +impl DkgProtocol { + /// Returns the current DKG session id. + pub fn session(&self) -> DkgSessionId { + self.config.session + } + + /// Returns the ordered participant list for this session. + pub fn participants(&self) -> &[Address] { + &self.config.participants + } + + /// Returns the DKG identifier for a given address. + pub fn identifier_for(&self, address: Address) -> Option { + self.identifiers.get(&address).copied() + } + + /// Returns the address for a given DKG identifier. + pub fn address_for_identifier(&self, identifier: DkgIdentifier) -> Option
{ + self.addresses.get(&identifier).copied() + } + + /// Returns the local participant identifier. + pub fn self_identifier(&self) -> DkgIdentifier { + self.identifiers[&self.config.self_address] + } + + /// Returns a flat address -> identifier map for persistence. + pub fn identifier_map(&self) -> Vec<(Address, DkgIdentifier)> { + self.identifiers + .iter() + .map(|(addr, identifier)| (*addr, *identifier)) + .collect() + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/core/mod.rs b/ethexe/dkg-roast/src/engine/dkg/core/mod.rs new file mode 100644 index 00000000000..13b5a188181 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/core/mod.rs @@ -0,0 +1,41 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Core DKG protocol helpers. +//! +//! ```text +//! Round1: generate/receive commitments +//! Round2: generate/receive encrypted shares +//! Finalize: validate shares -> key material +//! ``` + +mod complaints; +mod finalize; +mod identifiers; +mod protocol; +mod round1; +mod round2; + +pub use protocol::{DkgConfig, DkgProtocol, FinalizeResult}; + +#[cfg(test)] +mod tests; + +type Ciphersuite = roast_secp256k1_evm::frost::Secp256K1Keccak256; +type Group = ::Group; +type GroupSerialization = ::Serialization; diff --git a/ethexe/dkg-roast/src/engine/dkg/core/protocol.rs b/ethexe/dkg-roast/src/engine/dkg/core/protocol.rs new file mode 100644 index 00000000000..5e96baab3a7 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/core/protocol.rs @@ -0,0 +1,122 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! DKG Protocol implementation using ROAST/FROST primitives. + +use crate::engine::dkg::DkgErrorKind; +use anyhow::Result; +use ethexe_common::{ + Address, + crypto::{ + DkgComplaint, DkgIdentifier, DkgJustification, DkgKeyPackage, DkgPublicKeyPackage, + DkgRound1, DkgRound2, DkgRound2Culprits, DkgSessionId, DkgVssCommitment, + }, +}; +use rand::rngs::OsRng; +use roast_secp256k1_evm::dkg::{Dealer, Participant}; +use std::collections::BTreeMap; + +/// DKG protocol configuration. +#[derive(Debug, Clone)] +pub struct DkgConfig { + /// Session ID + pub session: DkgSessionId, + /// Threshold (t) + pub threshold: u16, + /// All participants (sorted) + pub participants: Vec
, + /// Address of this participant + pub self_address: Address, +} + +/// Outcome of DKG finalization. +#[derive(Debug)] +pub enum FinalizeResult { + Completed { + key_package: Box, + public_key_package: DkgPublicKeyPackage, + vss_commitment: DkgVssCommitment, + }, + Culprits(DkgRound2Culprits), +} + +/// DKG Protocol handler. +#[derive(Debug)] +pub struct DkgProtocol { + pub(super) config: DkgConfig, + pub(super) identifiers: BTreeMap, + pub(super) addresses: BTreeMap, + pub(super) participant: Participant, + pub(super) dealer: Dealer, + pub(super) round1_packages: BTreeMap, + pub(super) round2_packages: BTreeMap, + pub(super) complaints: Vec, + pub(super) justifications: Vec, + pub(super) round2_culprits: Vec, +} + +impl DkgProtocol { + /// Create a new DKG protocol instance. + pub fn new(mut config: DkgConfig) -> Result { + // Enforce deterministic ordering and local membership. + config.participants.sort(); + if !config.participants.contains(&config.self_address) { + return Err(anyhow::Error::new(DkgErrorKind::SelfNotInParticipants)); + } + + // Derive identifiers; duplicates are rejected. + let mut identifiers = BTreeMap::new(); + for address in config.participants.iter() { + let identifier = DkgIdentifier::derive(address.as_ref()) + .map_err(|_| anyhow::Error::new(DkgErrorKind::InvalidParticipantIdentifier))?; + identifiers.insert(*address, identifier); + } + if identifiers.len() != config.participants.len() { + return Err(anyhow::Error::new(DkgErrorKind::DuplicateParticipants)); + } + + let addresses = identifiers + .iter() + .map(|(address, identifier)| (*identifier, *address)) + .collect::>(); + let participants = identifiers.values().copied().collect::>(); + let mut rng = OsRng; + + // Create participant + dealer roles for this node. + let participant = Participant::new( + identifiers[&config.self_address], + participants.len() as u16, + config.threshold, + &mut rng, + )?; + let dealer = Dealer::new(participants.len() as u16, config.threshold, participants)?; + + Ok(Self { + config, + identifiers, + addresses, + participant, + dealer, + round1_packages: BTreeMap::new(), + round2_packages: BTreeMap::new(), + complaints: Vec::new(), + justifications: Vec::new(), + round2_culprits: Vec::new(), + }) + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/core/round1.rs b/ethexe/dkg-roast/src/engine/dkg/core/round1.rs new file mode 100644 index 00000000000..2639b0b291a --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/core/round1.rs @@ -0,0 +1,76 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Round1 helpers for DKG protocol. + +use super::protocol::DkgProtocol; +use crate::engine::dkg::DkgErrorKind; +use anyhow::{Result, anyhow}; +use ethexe_common::{Address, crypto::DkgRound1}; + +impl DkgProtocol { + /// Generate and register Round1 package for this participant. + pub fn generate_round1(&mut self) -> Result { + // Generate local commitment package and temp key, then loop it back. + let (package, temp_public_key) = self.participant.round1_package()?; + let message = DkgRound1 { + session: self.config.session, + package: package.clone(), + temp_public_key, + }; + + self.receive_round1(self.config.self_address, message.clone())?; + + Ok(message) + } + + /// Process received Round1 package. + pub fn receive_round1(&mut self, sender: Address, message: DkgRound1) -> Result<()> { + // Reject wrong sessions and unknown participants early. + if message.session != self.config.session { + return Err(anyhow::Error::new(DkgErrorKind::SessionIdMismatch)); + } + let identifier = self + .identifier_for(sender) + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::UnknownParticipant))?; + if self.round1_packages.contains_key(&identifier) { + // Ignore duplicates from the same participant. + return Ok(()); + } + + self.dealer + .receive_round1_package( + identifier, + (message.package.clone(), message.temp_public_key), + ) + .map_err(|err| anyhow!("Round1 package rejected: {err}"))?; + + self.round1_packages.insert(identifier, message); + Ok(()) + } + + /// Returns true when all round1 packages have been received. + pub fn is_round1_complete(&self) -> bool { + self.round1_packages.len() == self.config.participants.len() + } + + /// Returns the collected round1 packages (unordered). + pub fn round1_packages(&self) -> Vec { + self.round1_packages.values().cloned().collect() + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/core/round2.rs b/ethexe/dkg-roast/src/engine/dkg/core/round2.rs new file mode 100644 index 00000000000..86b9424ec14 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/core/round2.rs @@ -0,0 +1,119 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Round2 helpers for DKG protocol. + +use super::protocol::DkgProtocol; +use crate::engine::dkg::DkgErrorKind; +use anyhow::{Result, anyhow}; +use ethexe_common::{ + Address, + crypto::{DkgRound2, DkgRound2Culprits}, +}; +use std::collections::BTreeMap; + +impl DkgProtocol { + /// Generate Round2 packages for all participants. + pub fn generate_round2(&mut self) -> Result { + // Round2 requires all round1 packages first. + if !self.is_round1_complete() { + return Err(anyhow::Error::new(DkgErrorKind::Round1NotComplete)); + } + + let round1_packages = self + .round1_packages + .iter() + .map(|(id, msg)| (*id, (msg.package.clone(), msg.temp_public_key))) + .collect::>(); + + // Build encrypted packages for each recipient. + let packages = self.participant.receive_round1_packages(round1_packages)?; + + Ok(DkgRound2 { + session: self.config.session, + packages, + }) + } + + /// Process received Round2 packages. + pub fn receive_round2(&mut self, sender: Address, message: DkgRound2) -> Result<()> { + // Reject wrong sessions and unknown participants early. + if message.session != self.config.session { + return Err(anyhow::Error::new(DkgErrorKind::SessionIdMismatch)); + } + let identifier = self + .identifier_for(sender) + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::UnknownParticipant))?; + if self.round2_packages.contains_key(&identifier) { + // Ignore duplicates from the same participant. + return Ok(()); + } + + self.dealer + .receive_round2_packages_encrypted(identifier, message.packages.clone()) + .map_err(|err| anyhow!("Round2 packages rejected: {err}"))?; + + self.round2_packages.insert(identifier, message); + Ok(()) + } + + /// Returns true when all round2 packages have been received. + pub fn is_round2_complete(&self) -> bool { + self.round2_packages.len() == self.config.participants.len() + } + + /// Process culprits report. + pub fn receive_round2_culprits( + &mut self, + sender: Address, + message: DkgRound2Culprits, + ) -> Result<()> { + // Culprits reports are validated and fed to the dealer. + if message.session != self.config.session { + return Err(anyhow::Error::new(DkgErrorKind::SessionIdMismatch)); + } + let identifier = self + .identifier_for(sender) + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::UnknownParticipant))?; + + let temp_secret_key = + roast_secp256k1_evm::frost::SigningKey::deserialize(&message.temp_secret_key)?; + + self.dealer + .receive_round2_culprits(identifier, message.culprits.clone(), temp_secret_key) + .map_err(|err| anyhow!("Round2 culprits rejected: {err}"))?; + + self.round2_culprits.push(message); + Ok(()) + } + + /// Returns identifiers of participants accused of misbehavior. + pub fn round2_culprits(&self) -> Vec { + self.dealer.round2_culprits().collect() + } + + /// Returns the collected round2 packages (unordered). + pub fn round2_packages(&self) -> Vec { + self.round2_packages.values().cloned().collect() + } + + /// Returns the collected round2 culprits reports. + pub fn round2_culprit_messages(&self) -> Vec { + self.round2_culprits.clone() + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/core/tests.rs b/ethexe/dkg-roast/src/engine/dkg/core/tests.rs new file mode 100644 index 00000000000..170ec3c340f --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/core/tests.rs @@ -0,0 +1,160 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::{DkgConfig, DkgProtocol, FinalizeResult}; +use ethexe_common::{ + Address, + crypto::{DkgRound2Culprits, DkgSessionId}, +}; + +/// Builds a minimal deterministic address set for tests. +fn test_addresses() -> Vec
{ + vec![ + Address::from([1; 20]), + Address::from([2; 20]), + Address::from([3; 20]), + ] +} + +/// Builds a deterministic address list of a requested size. +fn test_addresses_n(count: u8) -> Vec
{ + (0..count).map(|byte| Address::from([byte; 20])).collect() +} + +#[test] +fn dkg_round1_and_round2_complete() { + let participants = test_addresses(); + let session = DkgSessionId { era: 1 }; + let threshold = 2; + + let mut protocols: Vec = participants + .iter() + .map(|address| { + DkgProtocol::new(DkgConfig { + session, + threshold, + participants: participants.clone(), + self_address: *address, + }) + .expect("protocol init") + }) + .collect(); + + let mut round1_messages = Vec::new(); + for protocol in &mut protocols { + round1_messages.push(protocol.generate_round1().expect("round1")); + } + for protocol in &mut protocols { + for (idx, message) in round1_messages.iter().enumerate() { + let from = participants[idx]; + protocol + .receive_round1(from, message.clone()) + .expect("receive round1"); + } + assert!(protocol.is_round1_complete()); + } + + let mut round2_messages = Vec::new(); + for protocol in &mut protocols { + round2_messages.push(protocol.generate_round2().expect("round2")); + } + for protocol in &mut protocols { + for (idx, message) in round2_messages.iter().enumerate() { + let from = participants[idx]; + protocol + .receive_round2(from, message.clone()) + .expect("receive round2"); + } + assert!(protocol.is_round2_complete()); + } + + for protocol in &mut protocols { + match protocol.finalize().expect("finalize") { + FinalizeResult::Completed { .. } => {} + FinalizeResult::Culprits(DkgRound2Culprits { culprits, .. }) => { + panic!("unexpected culprits: {culprits:?}"); + } + } + } +} + +#[test] +fn vss_commitment_size_for_64_validators() { + let participants = test_addresses_n(64); + let session = DkgSessionId { era: 1 }; + let threshold = ((participants.len() * 2 / 3) + 1) as u16; + + let mut protocols: Vec = participants + .iter() + .map(|address| { + DkgProtocol::new(DkgConfig { + session, + threshold, + participants: participants.clone(), + self_address: *address, + }) + .expect("protocol init") + }) + .collect(); + + let round1_messages: Vec<_> = protocols + .iter_mut() + .map(|protocol| protocol.generate_round1().expect("round1")) + .collect(); + for protocol in &mut protocols { + for (idx, message) in round1_messages.iter().enumerate() { + let from = participants[idx]; + protocol + .receive_round1(from, message.clone()) + .expect("receive round1"); + } + assert!(protocol.is_round1_complete()); + } + + let round2_messages: Vec<_> = protocols + .iter_mut() + .map(|protocol| protocol.generate_round2().expect("round2")) + .collect(); + for protocol in &mut protocols { + for (idx, message) in round2_messages.iter().enumerate() { + let from = participants[idx]; + protocol + .receive_round2(from, message.clone()) + .expect("receive round2"); + } + assert!(protocol.is_round2_complete()); + } + + let vss_commitment = match protocols[0].finalize().expect("finalize") { + FinalizeResult::Completed { vss_commitment, .. } => vss_commitment, + FinalizeResult::Culprits(DkgRound2Culprits { culprits, .. }) => { + panic!("unexpected culprits: {culprits:?}"); + } + }; + let serialized = vss_commitment + .serialize() + .expect("serialize vss commitment"); + let size_bytes: usize = serialized.iter().map(|entry| entry.len()).sum(); + println!( + "vss_commitment_bytes={}, coefficients={}, validators={}, threshold={}", + size_bytes, + serialized.len(), + participants.len(), + threshold + ); +} diff --git a/ethexe/dkg-roast/src/engine/dkg/engine.rs b/ethexe/dkg-roast/src/engine/dkg/engine.rs new file mode 100644 index 00000000000..c7dfc9c0315 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/engine.rs @@ -0,0 +1,215 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::{DkgAction, DkgManager, DkgState}; +use crate::engine::dkg::storage::DkgManagerOutput; +use anyhow::{Result, anyhow}; +use ethexe_common::{ + Address, + crypto::{DkgRound1, DkgRound2, DkgRound2Culprits}, + db::OnChainStorageRO, +}; + +/// External inputs for the DKG engine (network + local triggers). +#[derive(Debug, Clone)] +pub enum DkgEngineEvent { + Start { + era: u64, + validators: Vec
, + threshold: u16, + }, + Round1 { + from: Address, + message: Box, + }, + Round2 { + from: Address, + message: DkgRound2, + }, + Round2Culprits { + from: Address, + message: DkgRound2Culprits, + }, + Complaint { + from: Address, + message: ethexe_common::crypto::DkgComplaint, + }, + Justification { + from: Address, + message: ethexe_common::crypto::DkgJustification, + }, +} + +/// DKG engine wraps the manager and persistence layer. +#[derive(Debug)] +pub struct DkgEngine { + manager: DkgManager, + db: DB, +} + +impl DkgEngine +where + DB: super::super::storage::DkgStore + OnChainStorageRO, +{ + /// Creates a new DKG engine bound to a DB and local validator address. + pub fn new(db: DB, self_address: Address) -> Self { + Self { + manager: DkgManager::new(self_address), + db, + } + } + + /// Routes a DKG event through the manager and persists any outputs. + pub fn handle_event(&mut self, event: DkgEngineEvent) -> Result> { + // Resolve the era to load state and apply recovery on errors. + let era = match &event { + DkgEngineEvent::Start { era, .. } => *era, + DkgEngineEvent::Round1 { message, .. } => message.session.era, + DkgEngineEvent::Round2 { message, .. } => message.session.era, + DkgEngineEvent::Round2Culprits { message, .. } => message.session.era, + DkgEngineEvent::Complaint { message, .. } => message.session.era, + DkgEngineEvent::Justification { message, .. } => message.session.era, + }; + + // Dispatch into the manager, which drives the state machine. + let result = match event { + DkgEngineEvent::Start { + era, + validators, + threshold, + } => self.manager.start_dkg(era, validators, threshold), + DkgEngineEvent::Round1 { from, message } => self.manager.process_round1(from, *message), + DkgEngineEvent::Round2 { from, message } => self.manager.process_round2(from, message), + DkgEngineEvent::Round2Culprits { from, message } => { + self.manager.process_round2_culprits(from, message) + } + DkgEngineEvent::Complaint { from, message } => { + self.manager.process_complaint(from, message) + } + DkgEngineEvent::Justification { from, message } => { + self.manager.process_justification(from, message) + } + }; + + // Persist outputs or attempt a restart when errors are recoverable. + match result { + Ok(output) => self.finish_output(output), + Err(err) => { + if let Ok(actions) = self.restart_from_storage(era) { + return Ok(actions); + } + Err(err) + } + } + } + + /// Advances timeouts across active DKG sessions. + pub fn tick_timeouts(&mut self) -> Result> { + let output = self.manager.process_timeouts()?; + self.finish_output(output) + } + + /// Restarts DKG for an era using validators from storage. + pub fn restart_from_storage(&mut self, era: u64) -> Result> { + let Some(validators) = self.db.validators(era) else { + return Err(anyhow!( + "Unable to restart DKG for era {era}: validators missing" + )); + }; + let validators: Vec<_> = validators.into_iter().collect(); + let threshold = ((validators.len() as u64 * 2) / 3).max(1) as u16; + self.reset_dkg_completion(era); + let output = self.manager.restart_dkg(era, validators, threshold)?; + self.finish_output(output) + } + + /// Restarts DKG for an era with an explicit validator set. + pub fn restart_with( + &mut self, + era: u64, + validators: Vec
, + threshold: u16, + ) -> Result> { + self.reset_dkg_completion(era); + let output = self.manager.restart_dkg(era, validators, threshold)?; + self.finish_output(output) + } + + /// Returns the in-memory state for the given era, if any. + pub fn get_state(&self, era: u64) -> Option<&DkgState> { + self.manager.get_state(era) + } + + /// Returns whether DKG completed for the given era. + pub fn is_completed(&self, era: u64) -> bool { + self.db.dkg_completed(era) + } + + #[cfg(any(test, feature = "test-utils"))] + #[allow(dead_code)] + pub fn get_public_key_package( + &self, + era: u64, + ) -> Option { + self.db.public_key_package(era) + } + + #[cfg(any(test, feature = "test-utils"))] + #[allow(dead_code)] + pub fn get_vss_commitment(&self, era: u64) -> Option { + self.db.dkg_vss_commitment(era) + } + + #[cfg(any(test, feature = "test-utils"))] + #[allow(dead_code)] + pub fn get_dkg_share(&self, era: u64) -> Option { + self.db.dkg_share(era) + } + + /// Persists session snapshots and completed outputs, then returns actions. + fn finish_output(&mut self, output: DkgManagerOutput) -> Result> { + let DkgManagerOutput { actions, updates } = output; + for (session_id, state) in updates.session_states { + self.db.set_dkg_session_state(session_id, state); + } + for completed in updates.completions { + let era = completed.share.era; + self.db + .set_public_key_package(era, completed.public_key_package); + self.db.set_dkg_key_package(era, completed.key_package); + self.db + .set_dkg_vss_commitment(era, completed.vss_commitment); + self.db.set_dkg_share(completed.share); + self.db.mutate_dkg_session_state( + ethexe_common::crypto::DkgSessionId { era }, + |state| { + state.completed = true; + }, + ); + } + Ok(actions) + } + + /// Clears the completion flag for a given era in storage. + fn reset_dkg_completion(&mut self, era: u64) { + self.db + .mutate_dkg_session_state(ethexe_common::crypto::DkgSessionId { era }, |state| { + state.completed = false; + }); + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/error.rs b/ethexe/dkg-roast/src/engine/dkg/error.rs new file mode 100644 index 00000000000..a61991ed154 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/error.rs @@ -0,0 +1,65 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use thiserror::Error; + +/// Canonical DKG error categories used across the engine. +#[derive(Debug, Error, Clone, Copy, PartialEq, Eq)] +pub enum DkgErrorKind { + #[error("DKG already in progress")] + AlreadyInProgress, + #[error("No active protocol")] + NoActiveProtocol, + #[error("Missing DKG config")] + MissingConfig, + #[error("Session ID mismatch")] + SessionIdMismatch, + #[error("Unknown participant")] + UnknownParticipant, + #[error("Unknown complainer")] + UnknownComplainer, + #[error("Unknown offender")] + UnknownOffender, + #[error("Self not in participants list")] + SelfNotInParticipants, + #[error("Duplicate participants detected")] + DuplicateParticipants, + #[error("Invalid participant identifier")] + InvalidParticipantIdentifier, + #[error("Round1 not complete")] + Round1NotComplete, + #[error("Round2 not complete")] + Round2NotComplete, + #[error("Missing round2 packages for self")] + MissingRound2PackagesForSelf, + #[error("Self not in validators list")] + SelfNotInValidatorsList, + #[error("Validator index out of range")] + ValidatorIndexOutOfRange, +} + +/// Extension for downcasting `anyhow::Error` into `DkgErrorKind`. +pub trait DkgErrorExt { + fn dkg_error_kind(&self) -> Option; +} + +impl DkgErrorExt for anyhow::Error { + fn dkg_error_kind(&self) -> Option { + self.downcast_ref::().copied() + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/mod.rs b/ethexe/dkg-roast/src/engine/dkg/mod.rs new file mode 100644 index 00000000000..4fde12a2fba --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/mod.rs @@ -0,0 +1,103 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! DKG (Distributed Key Generation) State Machine +//! +//! This module implements Pedersen VSS DKG protocol for validators. +//! The DKG process runs when a new validator set is elected for era+1. +//! +//! ## Protocol Phases: +//! 1. **Round1 (Commitment Phase)**: Each validator generates a secret polynomial +//! and broadcasts Pedersen commitments to all other validators. +//! 2. **Round2 (Share Distribution)**: Each validator sends encrypted shares +//! to other participants with proofs of correctness. +//! 3. **Verification & Culprits**: Validators verify received shares and report +//! culprits if shares are invalid. +//! 4. **Completion**: If no culprits are detected, aggregate public key is computed. +//! +//! ## State Machine: +//! ```text +//! Idle +//! | +//! ├──> Round1Pending (waiting for commits) +//! | | +//! | └──> Round2Pending (waiting for shares) +//! | | +//! | └──> CulpritsPending (cheater detection) +//! | | +//! | └──> Completed (public key package ready) +//! | +//! └──> Failed (insufficient participants or protocol error) +//! ``` +//! +//! ## Message Flow (ASCII): +//! +//! ```text +//! Participant A Participant B +//! | Round1 (commit) -------->| +//! |<-------- Round1 (commit) | +//! | Round2 (shares) --------->| +//! |<-------- Round2 (shares) | +//! | finalize -> key material | +//! ``` + +pub mod core; +pub mod engine; +pub mod error; +pub mod storage; + +pub use core::{DkgConfig, DkgProtocol, FinalizeResult}; +pub use engine::{DkgEngine, DkgEngineEvent}; +pub use error::{DkgErrorExt, DkgErrorKind}; +pub use storage::{DkgAction, DkgEvent, DkgManager, DkgState, DkgStateMachine}; + +use ethexe_common::{ + Address, + crypto::{DkgKeyPackage, DkgPublicKeyPackage, DkgShare, DkgVssCommitment}, +}; + +/// DKG session configuration. +#[derive(Debug, Clone)] +pub struct SessionConfig { + /// Era index for this DKG session + pub era_index: u64, + /// List of validator addresses (sorted) + pub validators: Vec
, + /// Threshold (minimum signers required) + pub threshold: u16, + /// This validator's address + pub self_address: Address, +} + +/// Result of DKG session. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum DkgResult { + /// DKG completed successfully + Success(Box), + /// DKG failed (e.g., insufficient participants) + Failed(String), +} + +/// DKG completion payload (persisted by storage layer). +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct DkgCompleted { + pub public_key_package: DkgPublicKeyPackage, + pub key_package: DkgKeyPackage, + pub vss_commitment: DkgVssCommitment, + pub share: DkgShare, +} diff --git a/ethexe/dkg-roast/src/engine/dkg/storage/manager/core.rs b/ethexe/dkg-roast/src/engine/dkg/storage/manager/core.rs new file mode 100644 index 00000000000..ed4f00a3c04 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/storage/manager/core.rs @@ -0,0 +1,224 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! DKG Manager - Integration layer between consensus and DKG state machine + +use super::{processing, types::ManagerState}; +use crate::engine::dkg::{ + DkgAction, DkgCompleted, DkgEvent, DkgResult, DkgState, DkgStateMachine, SessionConfig, +}; +use anyhow::Result; +use ethexe_common::{ + Address, + crypto::{DkgRound1, DkgRound2, DkgRound2Culprits, DkgSessionId}, + db::DkgSessionState, +}; +use std::collections::HashMap; + +/// Aggregated updates produced by the manager. +#[derive(Debug, Default)] +pub struct DkgManagerUpdates { + pub session_states: Vec<(DkgSessionId, DkgSessionState)>, + pub completions: Vec, +} + +/// Manager output: outbound actions plus persistence updates. +#[derive(Debug)] +pub struct DkgManagerOutput { + pub actions: Vec, + pub updates: DkgManagerUpdates, +} + +/// DKG Manager handles DKG sessions for different eras. +#[derive(Debug)] +pub struct DkgManager { + /// Active DKG state machines per era + state: ManagerState, +} + +impl DkgManager { + /// Create a new DKG manager for the local validator address. + pub fn new(self_address: Address) -> Self { + Self { + state: ManagerState { + sessions: HashMap::new(), + self_address, + }, + } + } + + /// Start DKG for a new era. + pub fn start_dkg( + &mut self, + era_index: u64, + mut validators: Vec
, + threshold: u16, + ) -> Result { + // Skip duplicate starts for the same era. + if self.state.sessions.contains_key(&era_index) { + return Ok(self.empty_output()); + } + + // Sort for deterministic identifiers and share indices. + validators.sort(); + let config = SessionConfig { + era_index, + validators, + threshold, + self_address: self.state.self_address, + }; + + // Initialize and drive the state machine; apply local loopback. + let mut state_machine = DkgStateMachine::new(); + let actions = state_machine.process_event(DkgEvent::Start(config))?; + let actions = processing::apply_local_rounds(&self.state, &mut state_machine, actions)?; + + self.state.sessions.insert(era_index, state_machine); + + Ok(self.build_output(vec![era_index], actions)) + } + + /// Force restart DKG for an era, clearing any in-memory session and re-running. + pub fn restart_dkg( + &mut self, + era_index: u64, + validators: Vec
, + threshold: u16, + ) -> Result { + self.state.sessions.remove(&era_index); + self.start_dkg(era_index, validators, threshold) + } + + /// Process Round1 package. + pub fn process_round1( + &mut self, + from: Address, + message: DkgRound1, + ) -> Result { + let era = message.session.era; + self.handle_event_for_era( + era, + DkgEvent::Round1 { + from, + message: Box::new(message), + }, + ) + } + + /// Process Round2 packages. + pub fn process_round2( + &mut self, + from: Address, + message: DkgRound2, + ) -> Result { + let era = message.session.era; + self.handle_event_for_era( + era, + DkgEvent::Round2 { + from, + message: Box::new(message), + }, + ) + } + + /// Process round2 culprits. + pub fn process_round2_culprits( + &mut self, + from: Address, + message: DkgRound2Culprits, + ) -> Result { + let era = message.session.era; + self.handle_event_for_era(era, DkgEvent::Round2Culprits { from, message }) + } + + /// Process complaint. + pub fn process_complaint( + &mut self, + from: Address, + message: ethexe_common::crypto::DkgComplaint, + ) -> Result { + let era = message.session.era; + self.handle_event_for_era(era, DkgEvent::Complaint { from, message }) + } + + /// Process justification. + pub fn process_justification( + &mut self, + from: Address, + message: ethexe_common::crypto::DkgJustification, + ) -> Result { + let era = message.session.era; + self.handle_event_for_era(era, DkgEvent::Justification { from, message }) + } + + /// Apply timeout ticks across all sessions. + pub fn process_timeouts(&mut self) -> Result { + let actions = processing::collect_timeout_actions(&mut self.state)?; + Ok(self.build_output(self.active_eras(), actions)) + } + + /// Get DKG state for an era. + pub fn get_state(&self, era: u64) -> Option<&DkgState> { + self.state.sessions.get(&era).map(|sm| sm.state()) + } + + /// Build an empty output when no actions are produced. + fn empty_output(&self) -> DkgManagerOutput { + DkgManagerOutput { + actions: Vec::new(), + updates: DkgManagerUpdates::default(), + } + } + + /// Builds output and snapshots state for touched eras. + fn build_output(&self, eras: Vec, actions: Vec) -> DkgManagerOutput { + let updates = self.collect_updates(eras, actions.as_slice()); + DkgManagerOutput { actions, updates } + } + + /// Applies an event to a single-era state machine. + fn handle_event_for_era(&mut self, era: u64, event: DkgEvent) -> Result { + let actions = processing::apply_event(&mut self.state, era, event)?; + Ok(self.build_output(vec![era], actions)) + } + + /// Returns the list of eras with active sessions. + fn active_eras(&self) -> Vec { + self.state.sessions.keys().copied().collect() + } + + /// Snapshots session state and completed outputs for persistence. + fn collect_updates(&self, eras: Vec, actions: &[DkgAction]) -> DkgManagerUpdates { + let mut updates = DkgManagerUpdates::default(); + for era in eras { + if let Some(state_machine) = self.state.sessions.get(&era) { + let session_id = DkgSessionId { era }; + let state = state_machine.snapshot_state(); + updates.session_states.push((session_id, state)); + } + } + for action in actions { + if let DkgAction::Complete(result) = action + && let DkgResult::Success(completed) = result.as_ref() + { + updates.completions.push(completed.as_ref().clone()); + } + } + updates + } +} diff --git a/ethexe/dkg-roast/src/engine/dkg/storage/manager/mod.rs b/ethexe/dkg-roast/src/engine/dkg/storage/manager/mod.rs new file mode 100644 index 00000000000..a5fe6e1ca8c --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/storage/manager/mod.rs @@ -0,0 +1,24 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +mod core; +mod processing; +mod types; + +pub use core::DkgManager; +pub(crate) use core::DkgManagerOutput; diff --git a/ethexe/dkg-roast/src/engine/dkg/storage/manager/processing.rs b/ethexe/dkg-roast/src/engine/dkg/storage/manager/processing.rs new file mode 100644 index 00000000000..7d10566d95d --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/storage/manager/processing.rs @@ -0,0 +1,79 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::types::ManagerState; +use crate::engine::dkg::{DkgAction, DkgEvent, DkgStateMachine}; +use anyhow::Result; + +/// Replays local round1/round2 broadcasts into the state machine to advance phases. +pub(super) fn apply_local_rounds( + state: &ManagerState, + state_machine: &mut DkgStateMachine, + mut actions: Vec, +) -> Result> { + let mut index = 0; + while index < actions.len() { + // Feed our own broadcasts back into the state machine. + let follow_up = match &actions[index] { + DkgAction::BroadcastRound1(round1) => { + state_machine.process_event(DkgEvent::Round1 { + from: state.self_address, + message: round1.clone(), + })? + } + DkgAction::BroadcastRound2(round2) => { + state_machine.process_event(DkgEvent::Round2 { + from: state.self_address, + message: Box::new(round2.clone()), + })? + } + _ => Vec::new(), + }; + if !follow_up.is_empty() { + actions.extend(follow_up); + } + index += 1; + } + Ok(actions) +} + +/// Applies a DKG event to an existing session (if present). +pub(super) fn apply_event( + state: &mut ManagerState, + era: u64, + event: DkgEvent, +) -> Result> { + if let Some(sm) = state.sessions.get_mut(&era) { + let actions = sm.process_event(event)?; + Ok(actions) + } else { + Ok(vec![]) + } +} + +/// Collects timeout actions from all active sessions. +pub(super) fn collect_timeout_actions(state: &mut ManagerState) -> Result> { + let mut all_actions = Vec::new(); + + for (_era, sm) in state.sessions.iter_mut() { + let actions = sm.process_event(DkgEvent::Timeout)?; + all_actions.extend(actions); + } + + Ok(all_actions) +} diff --git a/ethexe/dkg-roast/src/engine/dkg/storage/manager/types.rs b/ethexe/dkg-roast/src/engine/dkg/storage/manager/types.rs new file mode 100644 index 00000000000..1d35515a8b7 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/storage/manager/types.rs @@ -0,0 +1,28 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::engine::dkg::DkgStateMachine; +use ethexe_common::Address; +use std::collections::HashMap; + +/// In-memory manager state shared across DKG sessions. +#[derive(Debug)] +pub(super) struct ManagerState { + pub(super) sessions: HashMap, + pub(super) self_address: Address, +} diff --git a/ethexe/dkg-roast/src/engine/dkg/storage/mod.rs b/ethexe/dkg-roast/src/engine/dkg/storage/mod.rs new file mode 100644 index 00000000000..62efcc80b85 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/storage/mod.rs @@ -0,0 +1,24 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +mod manager; +mod state_machine; + +pub use manager::DkgManager; +pub(crate) use manager::DkgManagerOutput; +pub use state_machine::{DkgAction, DkgEvent, DkgState, DkgStateMachine}; diff --git a/ethexe/dkg-roast/src/engine/dkg/storage/state_machine.rs b/ethexe/dkg-roast/src/engine/dkg/storage/state_machine.rs new file mode 100644 index 00000000000..8a60b84c387 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/dkg/storage/state_machine.rs @@ -0,0 +1,648 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! DKG State Machine + +use crate::engine::dkg::{ + DkgCompleted, DkgErrorKind, DkgResult, SessionConfig, + core::{DkgConfig, DkgProtocol, FinalizeResult}, +}; +use anyhow::{Result, anyhow}; +use ethexe_common::{ + Address, + crypto::{ + DkgComplaint, DkgJustification, DkgKeyPackage, DkgRound1, DkgRound2, DkgRound2Culprits, + DkgSessionId, DkgShare, + }, + db::DkgSessionState, +}; +use std::{ + collections::BTreeSet, + time::{Duration, Instant}, +}; + +/// DKG state machine states. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum DkgState { + /// Idle - no active DKG session + Idle, + /// Round1Pending - waiting for round1 packages from all participants + Round1Pending { started_at: Instant }, + /// Round2Pending - waiting for round2 packages from all participants + Round2Pending { started_at: Instant }, + /// CulpritsPending - waiting for round2 culprits processing + CulpritsPending { started_at: Instant }, + /// Completed - DKG finished successfully + Completed, + /// Failed - DKG failed + Failed(String), +} + +/// Events that can be processed by the state machine. +#[derive(Debug, Clone)] +pub enum DkgEvent { + /// Start a new DKG session + Start(SessionConfig), + /// Received Round1 package + Round1 { + from: Address, + message: Box, + }, + /// Received Round2 packages + Round2 { + from: Address, + message: Box, + }, + /// Received complaint + Complaint { + from: Address, + message: DkgComplaint, + }, + /// Received justification + Justification { + from: Address, + message: DkgJustification, + }, + /// Received Round2 culprits report + Round2Culprits { + from: Address, + message: DkgRound2Culprits, + }, + /// Timeout occurred + Timeout, +} + +/// Actions to be performed after state transition. +#[derive(Debug, Clone)] +pub enum DkgAction { + /// Broadcast Round1 package + BroadcastRound1(Box), + /// Broadcast Round2 packages + BroadcastRound2(DkgRound2), + /// Broadcast complaint + BroadcastComplaint(DkgComplaint), + /// Broadcast round2 culprits + BroadcastRound2Culprits(DkgRound2Culprits), + /// DKG completed with result + Complete(Box), +} + +/// DKG State Machine. +#[derive(Debug)] +pub struct DkgStateMachine { + state: DkgState, + protocol: Option, + config: Option, + excluded: BTreeSet
, + + // Timeouts + round1_timeout: Duration, + round2_timeout: Duration, + culprits_timeout: Duration, +} + +impl Default for DkgStateMachine { + fn default() -> Self { + Self::new() + } +} + +impl DkgStateMachine { + /// Create new DKG state machine. + pub fn new() -> Self { + Self { + state: DkgState::Idle, + protocol: None, + config: None, + excluded: BTreeSet::new(), + round1_timeout: Duration::from_secs(30), + round2_timeout: Duration::from_secs(30), + culprits_timeout: Duration::from_secs(20), + } + } + + /// Get current state. + pub fn state(&self) -> &DkgState { + &self.state + } + + /// Process an event and return actions to perform. + pub fn process_event(&mut self, event: DkgEvent) -> Result> { + match event { + DkgEvent::Start(config) => self.handle_start(config), + DkgEvent::Round1 { from, message } => { + if matches!(self.state, DkgState::Round1Pending { .. }) { + self.handle_round1(from, *message) + } else { + Ok(vec![]) + } + } + DkgEvent::Round2 { from, message } => { + if matches!(self.state, DkgState::Round2Pending { .. }) { + self.handle_round2(from, *message) + } else { + Ok(vec![]) + } + } + DkgEvent::Complaint { from, message } => self.handle_complaint(from, message), + DkgEvent::Justification { from, message } => self.handle_justification(from, message), + DkgEvent::Round2Culprits { from, message } => { + if matches!( + self.state, + DkgState::Round2Pending { .. } | DkgState::CulpritsPending { .. } + ) { + self.handle_round2_culprits(from, message) + } else { + Ok(vec![]) + } + } + DkgEvent::Timeout => self.handle_timeout(), + } + } + + /// Initializes a new DKG session and emits the first round. + fn handle_start(&mut self, config: SessionConfig) -> Result> { + if !matches!(self.state, DkgState::Idle) { + return Err(anyhow::Error::new(DkgErrorKind::AlreadyInProgress)); + } + + let protocol_config = DkgConfig { + session: DkgSessionId { + era: config.era_index, + }, + threshold: config.threshold, + participants: config.validators.clone(), + self_address: config.self_address, + }; + + // Build the protocol instance and generate our round1 package. + let mut protocol = DkgProtocol::new(protocol_config)?; + let round1 = protocol.generate_round1()?; + + self.protocol = Some(protocol); + self.config = Some(config); + self.excluded.clear(); + // Move into round1 collection phase. + self.state = DkgState::Round1Pending { + started_at: Instant::now(), + }; + + Ok(vec![DkgAction::BroadcastRound1(Box::new(round1))]) + } + + /// Handles a round1 package and emits round2 when complete. + fn handle_round1(&mut self, from: Address, message: DkgRound1) -> Result> { + // Track round1 packages until all participants are collected. + let is_complete = { + let protocol = self + .protocol + .as_mut() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::NoActiveProtocol))?; + protocol.receive_round1(from, message)?; + protocol.is_round1_complete() + }; + if is_complete { + // Generate round2 packages once round1 is complete. + let round2 = self + .protocol + .as_mut() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::NoActiveProtocol))? + .generate_round2()?; + self.state = DkgState::Round2Pending { + started_at: Instant::now(), + }; + return Ok(vec![DkgAction::BroadcastRound2(round2)]); + } + + Ok(vec![]) + } + + /// Handles a round2 package and attempts finalize when complete. + fn handle_round2(&mut self, from: Address, message: DkgRound2) -> Result> { + // Track round2 packages until all participants are collected. + let is_complete = { + let protocol = self + .protocol + .as_mut() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::NoActiveProtocol))?; + protocol.receive_round2(from, message)?; + protocol.is_round2_complete() + }; + if is_complete { + return self.try_finalize(); + } + + Ok(vec![]) + } + + /// Handles a complaint message for the current session. + fn handle_complaint(&mut self, from: Address, message: DkgComplaint) -> Result> { + if message.complainer != from { + return Ok(vec![]); + } + let protocol = self + .protocol + .as_mut() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::NoActiveProtocol))?; + protocol.receive_complaint(message)?; + Ok(vec![]) + } + + /// Handles a justification message and updates complaint state. + fn handle_justification( + &mut self, + from: Address, + message: DkgJustification, + ) -> Result> { + if message.offender != from { + return Ok(vec![]); + } + let offender = message.offender; + let protocol = self + .protocol + .as_mut() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::NoActiveProtocol))?; + let is_valid = protocol.receive_justification(message)?; + if is_valid { + Ok(vec![]) + } else { + self.exclude_and_restart(vec![offender]) + } + } + + /// Handles culprits report and triggers exclusion/restart when needed. + fn handle_round2_culprits( + &mut self, + from: Address, + message: DkgRound2Culprits, + ) -> Result> { + let culprit_addresses = { + let protocol = self + .protocol + .as_mut() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::NoActiveProtocol))?; + + protocol.receive_round2_culprits(from, message)?; + + protocol + .round2_culprits() + .into_iter() + .filter_map(|culprit| protocol.address_for_identifier(culprit)) + .collect::>() + }; + + let actions = self.exclude_and_restart(culprit_addresses)?; + if actions.is_empty() { + self.state = DkgState::CulpritsPending { + started_at: Instant::now(), + }; + Ok(vec![]) + } else { + Ok(actions) + } + } + + /// Applies timeout logic for the current phase. + fn handle_timeout(&mut self) -> Result> { + match &self.state { + DkgState::Round1Pending { started_at } => { + if started_at.elapsed() > self.round1_timeout { + self.state = DkgState::Failed("Round1 timeout".to_string()); + return Ok(vec![DkgAction::Complete(Box::new(DkgResult::Failed( + "Round1 timeout".to_string(), + )))]); + } + } + DkgState::Round2Pending { started_at } => { + if started_at.elapsed() > self.round2_timeout { + self.state = DkgState::Failed("Round2 timeout".to_string()); + return Ok(vec![DkgAction::Complete(Box::new(DkgResult::Failed( + "Round2 timeout".to_string(), + )))]); + } + } + DkgState::CulpritsPending { started_at } => { + if started_at.elapsed() > self.culprits_timeout { + self.state = DkgState::Failed("Round2 culprits timeout".to_string()); + return Ok(vec![DkgAction::Complete(Box::new(DkgResult::Failed( + "Round2 culprits timeout".to_string(), + )))]); + } + } + _ => {} + } + + Ok(vec![]) + } + + /// Attempts to finalize DKG and emits completion or culprits. + fn try_finalize(&mut self) -> Result> { + let protocol = self + .protocol + .as_mut() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::NoActiveProtocol))?; + + match protocol.finalize()? { + FinalizeResult::Completed { + key_package, + public_key_package, + vss_commitment, + } => { + self.state = DkgState::Completed; + + let config = self.config.as_ref().unwrap(); + let share = self.build_dkg_share(config, &key_package)?; + + Ok(vec![DkgAction::Complete(Box::new(DkgResult::Success( + Box::new(DkgCompleted { + public_key_package, + key_package: *key_package, + vss_commitment, + share, + }), + )))]) + } + FinalizeResult::Culprits(culprits) => { + self.state = DkgState::CulpritsPending { + started_at: Instant::now(), + }; + let protocol = self + .protocol + .as_ref() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::NoActiveProtocol))?; + let config = self + .config + .as_ref() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::MissingConfig))?; + let mut actions = Vec::new(); + for culprit in culprits.culprits.iter().copied() { + if let Some(offender) = protocol.address_for_identifier(culprit) { + actions.push(DkgAction::BroadcastComplaint(DkgComplaint { + session: protocol.session(), + complainer: config.self_address, + offender, + reason: b"round2_invalid_share".to_vec(), + })); + } + } + actions.insert(0, DkgAction::BroadcastRound2Culprits(culprits)); + Ok(actions) + } + } + } + + /// Excludes offenders and restarts the session if quorum remains. + fn exclude_and_restart(&mut self, offenders: Vec
) -> Result> { + let mut new_excluded = vec![]; + for address in offenders { + if self.excluded.insert(address) { + new_excluded.push(address); + } + } + + if new_excluded.is_empty() { + return Ok(vec![]); + } + + let config = self + .config + .as_ref() + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::MissingConfig))?; + let mut participants = config.validators.clone(); + participants.retain(|addr| !self.excluded.contains(addr)); + if participants.len() < config.threshold as usize { + self.state = DkgState::Failed("Too many culprits".to_string()); + return Ok(vec![DkgAction::Complete(Box::new(DkgResult::Failed( + "Too many culprits".to_string(), + )))]); + } + + let protocol_config = DkgConfig { + session: DkgSessionId { + era: config.era_index, + }, + threshold: config.threshold, + participants: participants.clone(), + self_address: config.self_address, + }; + + let mut protocol = DkgProtocol::new(protocol_config)?; + let round1 = protocol.generate_round1()?; + self.protocol = Some(protocol); + self.state = DkgState::Round1Pending { + started_at: Instant::now(), + }; + + let config = SessionConfig { + era_index: config.era_index, + validators: participants, + threshold: config.threshold, + self_address: config.self_address, + }; + self.config = Some(config); + + Ok(vec![DkgAction::BroadcastRound1(Box::new(round1))]) + } + + /// Builds a persisted DKG share from key package and session config. + fn build_dkg_share( + &self, + config: &SessionConfig, + key_package: &DkgKeyPackage, + ) -> Result { + let index = config + .validators + .iter() + .position(|addr| *addr == config.self_address) + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::SelfNotInValidatorsList))?; + let index = index + .checked_add(1) + .and_then(|idx| u16::try_from(idx).ok()) + .ok_or_else(|| anyhow::Error::new(DkgErrorKind::ValidatorIndexOutOfRange))?; + + let signing_share = key_package.signing_share().serialize(); + let verifying_share = key_package + .verifying_share() + .serialize() + .map_err(|err| anyhow!("Failed to serialize verifying share: {err}"))?; + + Ok(DkgShare { + era: config.era_index, + identifier: *key_package.identifier(), + index, + signing_share, + verifying_share, + threshold: *key_package.min_signers(), + }) + } + + /// Snapshots protocol state for persistence and recovery. + pub fn snapshot_state(&self) -> DkgSessionState { + let Some(protocol) = self.protocol.as_ref() else { + return DkgSessionState::default(); + }; + + DkgSessionState { + identifier_map: protocol.identifier_map(), + round1_packages: protocol.round1_packages(), + round2_packages: protocol.round2_packages(), + complaints: protocol.complaints(), + justifications: protocol.justifications(), + round2_culprits: protocol.round2_culprit_messages(), + completed: matches!(self.state, DkgState::Completed), + } + } +} + +#[cfg(test)] +mod tests { + use super::{DkgAction, DkgEvent, DkgState, DkgStateMachine}; + use crate::engine::dkg::{DkgConfig, DkgProtocol, FinalizeResult, SessionConfig}; + use ethexe_common::{ + Address, + crypto::{DkgRound1, DkgRound2, DkgSessionId}, + }; + + /// Builds a small deterministic validator set for tests. + fn test_addresses() -> Vec
{ + vec![ + Address::from([1; 20]), + Address::from([2; 20]), + Address::from([3; 20]), + ] + } + + #[test] + fn state_machine_completes_rounds() { + let participants = test_addresses(); + let self_address = participants[0]; + let session = DkgSessionId { era: 1 }; + let threshold = 2; + + let mut state_machine = DkgStateMachine::new(); + let actions = state_machine + .process_event(DkgEvent::Start(SessionConfig { + era_index: session.era, + validators: participants.clone(), + threshold, + self_address, + })) + .expect("start"); + + assert!(matches!( + state_machine.state(), + DkgState::Round1Pending { .. } + )); + + let self_round1 = match &actions[..] { + [DkgAction::BroadcastRound1(message)] => *message.clone(), + other => panic!("unexpected start actions: {other:?}"), + }; + + let mut round1_messages: Vec<(Address, DkgRound1)> = vec![(self_address, self_round1)]; + + let mut protocols: Vec<(Address, DkgProtocol)> = participants[1..] + .iter() + .map(|address| { + ( + *address, + DkgProtocol::new(DkgConfig { + session, + threshold, + participants: participants.clone(), + self_address: *address, + }) + .expect("protocol init"), + ) + }) + .collect(); + + for (address, protocol) in protocols.iter_mut() { + let round1 = protocol.generate_round1().expect("round1"); + round1_messages.push((*address, round1)); + } + + for (_, protocol) in protocols.iter_mut() { + for (from, message) in &round1_messages { + protocol + .receive_round1(*from, message.clone()) + .expect("receive round1"); + } + } + + let mut self_round2 = None; + for (from, message) in round1_messages.iter().skip(1) { + let actions = state_machine + .process_event(DkgEvent::Round1 { + from: *from, + message: Box::new(message.clone()), + }) + .expect("round1 event"); + for action in actions { + if let DkgAction::BroadcastRound2(round2) = action { + self_round2 = Some(round2); + } + } + } + + let self_round2 = self_round2.expect("self round2 action"); + assert!(matches!( + state_machine.state(), + DkgState::Round2Pending { .. } + )); + + let mut round2_messages: Vec<(Address, DkgRound2)> = vec![(self_address, self_round2)]; + for (address, protocol) in protocols.iter_mut() { + let round2 = protocol.generate_round2().expect("round2"); + round2_messages.push((*address, round2)); + } + + for (_, protocol) in protocols.iter_mut() { + for (from, message) in &round2_messages { + protocol + .receive_round2(*from, message.clone()) + .expect("receive round2"); + } + } + + let mut completed = false; + for (from, message) in &round2_messages { + let actions = state_machine + .process_event(DkgEvent::Round2 { + from: *from, + message: Box::new(message.clone()), + }) + .expect("round2 event"); + for action in actions { + if let DkgAction::Complete(result) = action { + completed = matches!(*result, super::DkgResult::Success(_)); + } + } + } + + assert!(completed, "DKG should complete successfully"); + assert!(matches!(state_machine.state(), DkgState::Completed)); + + for (_, protocol) in protocols.iter_mut() { + match protocol.finalize().expect("finalize") { + FinalizeResult::Completed { .. } => {} + other => panic!("unexpected finalize result: {other:?}"), + } + } + } +} diff --git a/ethexe/dkg-roast/src/engine/mod.rs b/ethexe/dkg-roast/src/engine/mod.rs new file mode 100644 index 00000000000..19eef3ff481 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/mod.rs @@ -0,0 +1,36 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::engine::{dkg::DkgAction, roast::RoastMessage}; +use anyhow::Result; +use std::time::Instant; + +pub mod dkg; +pub mod prelude; +pub mod roast; +pub mod storage; + +/// Abstraction for engine integrations (time + outbound publishing). +pub trait EngineContext { + /// Returns the current time for timeout calculations. + fn now(&self) -> Instant; + /// Publishes a DKG action to the validator network. + fn publish_dkg_action(&mut self, action: DkgAction) -> Result<()>; + /// Publishes a ROAST message to the validator network. + fn publish_roast_message(&mut self, message: RoastMessage) -> Result<()>; +} diff --git a/ethexe/dkg-roast/src/engine/prelude.rs b/ethexe/dkg-roast/src/engine/prelude.rs new file mode 100644 index 00000000000..b0300899222 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/prelude.rs @@ -0,0 +1,32 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +pub use crate::engine::{ + dkg::{ + DkgAction, DkgCompleted, DkgEngine, DkgEngineEvent, DkgEvent, DkgManager, DkgResult, + DkgState, DkgStateMachine, SessionConfig as DkgSessionConfig, + core::{DkgConfig, DkgProtocol, FinalizeResult}, + }, + roast::{ + CoordinatorAction, CoordinatorConfig, CoordinatorEvent, ParticipantAction, + ParticipantConfig, ParticipantEvent, RoastCoordinator, RoastEngine, RoastEngineEvent, + RoastManager, RoastMessage, RoastParticipant, RoastResult, + SessionConfig as RoastSessionConfig, + }, + storage::{DkgStore, RoastStore}, +}; diff --git a/ethexe/dkg-roast/src/engine/roast/core/mod.rs b/ethexe/dkg-roast/src/engine/roast/core/mod.rs new file mode 100644 index 00000000000..7f80403ecb9 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/core/mod.rs @@ -0,0 +1,66 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Core ROAST participant helpers. +//! +//! ```text +//! SignRequest -> NonceCommit -> SigningPackage -> PartialSignature +//! ``` + +mod participant; +mod tweak; + +pub use participant::{ParticipantAction, ParticipantConfig, ParticipantEvent, RoastParticipant}; +pub(crate) use tweak::{tweak_key_package, tweak_public_key_package}; + +#[cfg(test)] +mod tests; + +use ethexe_common::{ + Address, + crypto::{DkgSessionId, SignAggregate}, +}; +use gprimitives::H256; + +/// ROAST signing session configuration. +#[derive(Debug, Clone)] +pub struct SessionConfig { + /// DKG session ID (era index) + pub session: DkgSessionId, + /// Message hash to sign + pub msg_hash: H256, + /// ActorId for key tweaking + pub tweak_target: gprimitives::ActorId, + /// Leader election attempt counter + pub attempt: u32, + /// Threshold (minimum signers) + pub threshold: u16, + /// All participants (sorted) + pub participants: Vec
, + /// This participant's address + pub self_address: Address, +} + +/// Result of ROAST signing session. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum RoastResult { + /// Signing completed successfully + Success(SignAggregate), + /// Signing failed + Failed(String), +} diff --git a/ethexe/dkg-roast/src/engine/roast/core/participant.rs b/ethexe/dkg-roast/src/engine/roast/core/participant.rs new file mode 100644 index 00000000000..2e49ba30114 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/core/participant.rs @@ -0,0 +1,305 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! ROAST Participant Implementation + +use super::tweak_key_package; +use anyhow::{Result, anyhow}; +use ethexe_common::{ + Address, + crypto::{ + DkgIdentifier, DkgKeyPackage, PreNonceCommitment, SignNonceCommit, SignNoncePackage, + SignSessionRequest, SignShare, tweak::hash_to_scalar, + }, +}; +use rand::rngs::OsRng; +use roast_secp256k1_evm::frost::{ + SigningPackage, + round1::{self, SigningCommitments, SigningNonces}, + round2::{self, SignatureShare}, +}; +use std::collections::BTreeMap; + +/// Participant configuration +#[derive(Debug, Clone)] +/// Participant configuration (timeouts, etc.). +pub struct ParticipantConfig { + /// This participant's address + pub self_address: Address, +} + +/// Participant state +#[derive(Debug, Clone, PartialEq, Eq)] +/// Participant state machine phases. +pub enum ParticipantState { + /// Idle + Idle, + /// Nonce sent, waiting for signing package + NonceSent, + /// Partial signature sent + PartialSent, +} + +/// Events that participant can process +#[derive(Debug, Clone)] +/// Events handled by the participant state machine. +pub enum ParticipantEvent { + /// Received signing request from coordinator + SignRequest { + request: SignSessionRequest, + key_package: Box, + identifiers: BTreeMap, + pre_nonce: Option, + }, + /// Received signing package from coordinator + SigningPackage(SignNoncePackage), +} + +/// Actions participant should perform +#[derive(Debug, Clone)] +/// Actions emitted by the participant (outbound messages). +pub enum ParticipantAction { + /// Send nonce commitment to coordinator + SendNonceCommit(SignNonceCommit), + /// Send partial signature to coordinator + SendPartialSignature(SignShare), +} + +/// ROAST Participant +#[derive(Debug)] +/// ROAST participant state machine (per signing session). +pub struct RoastParticipant { + state: ParticipantState, + config: ParticipantConfig, + current_session: Option, + key_package: Option, + signing_nonces: Option, + identifiers: BTreeMap, +} + +impl RoastParticipant { + /// Create new participant + /// Creates a new participant with the given config. + pub fn new(config: ParticipantConfig) -> Self { + Self { + state: ParticipantState::Idle, + config, + current_session: None, + key_package: None, + signing_nonces: None, + identifiers: BTreeMap::new(), + } + } + + /// Get current state + /// Returns the current participant state. + pub fn state(&self) -> &ParticipantState { + &self.state + } + + /// Process event and return actions + /// Drives the participant state machine with an event. + pub fn process_event(&mut self, event: ParticipantEvent) -> Result> { + match event { + ParticipantEvent::SignRequest { + request, + key_package, + identifiers, + pre_nonce, + } => self.handle_sign_request(request, *key_package, identifiers, pre_nonce), + ParticipantEvent::SigningPackage(package) => self.handle_signing_package(package), + } + } + + /// Handles a new sign request and emits the nonce commitment. + fn handle_sign_request( + &mut self, + request: SignSessionRequest, + key_package: DkgKeyPackage, + identifiers: BTreeMap, + pre_nonce: Option, + ) -> Result> { + if !matches!(self.state, ParticipantState::Idle) { + return Err(anyhow!("Participant already in session")); + } + + // Cache identifier map for this session. + self.identifiers = identifiers; + + let expected_identifier = self + .identifiers + .get(&self.config.self_address) + .copied() + .ok_or_else(|| anyhow!("Self not in participants list"))?; + if expected_identifier != *key_package.identifier() { + return Err(anyhow!("Key package identifier does not match DKG map")); + } + + // Apply per-message tweak to the key package. + let tweak = hash_to_scalar(request.tweak_target); + let tweaked_key_package = tweak_key_package(&key_package, tweak)?; + + // Use pre-generated nonces if available; otherwise create fresh ones. + let (signing_nonces, signing_commitments) = match pre_nonce { + Some(pre_nonce) => { + let signing_nonces = SigningNonces::deserialize(&pre_nonce.nonces) + .map_err(|err| anyhow!("Failed to deserialize signing nonces: {err}"))?; + let signing_commitments = + SigningCommitments::deserialize(&pre_nonce.commitments) + .map_err(|err| anyhow!("Failed to deserialize commitments: {err}"))?; + if *signing_nonces.commitments() != signing_commitments { + return Err(anyhow!("Pre-nonce commitments mismatch")); + } + (signing_nonces, signing_commitments) + } + None => { + let mut rng = OsRng; + round1::commit(tweaked_key_package.signing_share(), &mut rng) + } + }; + + let signing_commitments = signing_commitments + .serialize() + .map_err(|err| anyhow!("Failed to serialize commitments: {err}"))?; + + // Persist in-memory session state for the next phase. + let session = request.session; + let msg_hash = request.msg_hash; + self.key_package = Some(tweaked_key_package); + self.signing_nonces = Some(signing_nonces); + self.current_session = Some(request); + self.state = ParticipantState::NonceSent; + + let commit_msg = SignNonceCommit { + session, + from: self.config.self_address, + msg_hash, + nonce_commit: signing_commitments, + }; + + Ok(vec![ParticipantAction::SendNonceCommit(commit_msg)]) + } + + /// Handles the signing package and emits the partial signature. + fn handle_signing_package( + &mut self, + package: SignNoncePackage, + ) -> Result> { + if !matches!(self.state, ParticipantState::NonceSent) { + tracing::debug!( + state = ?self.state, + "Ignoring signing package in unexpected participant state" + ); + return Ok(vec![]); + } + + if let Some(current) = &self.current_session + && (current.session != package.session || current.msg_hash != package.msg_hash) + { + tracing::debug!( + expected_session = ?current.session, + expected_hash = %current.msg_hash, + got_session = ?package.session, + got_hash = %package.msg_hash, + "Ignoring signing package for different session" + ); + return Ok(vec![]); + } + + let current = self + .current_session + .as_ref() + .ok_or_else(|| anyhow!("No current session"))?; + + if current.session != package.session { + return Err(anyhow!("Session ID mismatch")); + } + if current.msg_hash != package.msg_hash { + return Err(anyhow!("Message hash mismatch")); + } + + let self_identifier = self + .identifiers + .get(&self.config.self_address) + .copied() + .ok_or_else(|| anyhow!("Self identifier not found"))?; + + // Rebuild signing commitments map in identifier order. + let mut commitments = BTreeMap::new(); + for (addr, bytes) in &package.commitments { + let identifier = self + .identifiers + .get(addr) + .ok_or_else(|| anyhow!("Unknown participant commitment"))?; + let signing_commitments = SigningCommitments::deserialize(bytes) + .map_err(|err| anyhow!("Failed to deserialize commitments: {err}"))?; + commitments.insert(*identifier, signing_commitments); + } + + if !commitments.contains_key(&self_identifier) { + return Ok(vec![]); + } + + let signing_package = SigningPackage::new(commitments, package.msg_hash.as_bytes()); + + let signing_nonces = self + .signing_nonces + .take() + .ok_or_else(|| anyhow!("Missing signing nonces"))?; + let key_package = self.key_package.as_ref().ok_or_else(|| { + anyhow::Error::new(crate::engine::roast::RoastErrorKind::MissingKeyPackage) + })?; + + // Produce partial signature for the signing package. + let signature_share: SignatureShare = + round2::sign(&signing_package, &signing_nonces, key_package) + .map_err(|err| anyhow!("Failed to sign: {err}"))?; + + // Generate next-round commitments for potential retries. + let mut rng = OsRng; + let (next_signing_nonces, next_commitments) = + round1::commit(key_package.signing_share(), &mut rng); + self.signing_nonces = Some(next_signing_nonces); + + let next_commitments = next_commitments + .serialize() + .map_err(|err| anyhow!("Failed to serialize next commitments: {err}"))?; + + let partial_sig = SignShare { + session: package.session, + from: self.config.self_address, + msg_hash: package.msg_hash, + partial_sig: signature_share.serialize(), + next_commitments, + }; + + self.state = ParticipantState::PartialSent; + + Ok(vec![ParticipantAction::SendPartialSignature(partial_sig)]) + } + + /// Reset to idle state + /// Resets internal state for a fresh session. + pub fn reset(&mut self) { + self.state = ParticipantState::Idle; + self.current_session = None; + self.key_package = None; + self.signing_nonces = None; + self.identifiers.clear(); + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/core/tests.rs b/ethexe/dkg-roast/src/engine/roast/core/tests.rs new file mode 100644 index 00000000000..f48bd0a8751 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/core/tests.rs @@ -0,0 +1,524 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::{ParticipantAction, ParticipantConfig, ParticipantEvent, RoastParticipant}; +use crate::engine::{ + dkg::{DkgAction, DkgConfig, DkgEngine, DkgEngineEvent, DkgProtocol, FinalizeResult}, + roast::{ + RoastEngine, RoastEngineEvent, RoastMessage, + core::{participant::ParticipantState, tweak_public_key_package}, + }, +}; +use anyhow::{Result, anyhow}; +use ethexe_common::{ + Address, + crypto::{ + DkgIdentifier, DkgKeyPackage, DkgSessionId, SignKind, SignNoncePackage, SignSessionRequest, + tweak::hash_to_scalar, + }, + k256::{EncodedPoint, FieldBytes}, +}; +use ethexe_db::Database; +use gprimitives::{ActorId, H256}; +use roast_secp256k1_evm::frost::{Signature, VerifyingKey}; +use std::collections::{BTreeMap, VecDeque}; + +struct EngineNode { + address: Address, + dkg: DkgEngine, + roast: RoastEngine, +} + +struct SimpleNetwork { + nodes: BTreeMap, +} + +impl SimpleNetwork { + fn new(num_validators: usize) -> Self { + let mut nodes = BTreeMap::new(); + for idx in 0..num_validators { + let address = Address::from([(idx as u8).saturating_add(1); 20]); + let db = Database::memory(); + nodes.insert( + address, + EngineNode { + address, + dkg: DkgEngine::new(db.clone(), address), + roast: RoastEngine::new(db, address), + }, + ); + } + Self { nodes } + } + + fn validator_addresses(&self) -> Vec
{ + self.nodes.keys().copied().collect() + } + + fn coordinator_address(&self) -> Address { + self.validator_addresses() + .first() + .copied() + .expect("non-empty validator set") + } + + fn run_dkg(&mut self, era: u64, threshold: u16, max_steps: usize) -> Result> { + let participants = self.validator_addresses(); + let mut queue = VecDeque::new(); + + for node in self.nodes.values_mut() { + let actions = node.dkg.handle_event(DkgEngineEvent::Start { + era, + validators: participants.clone(), + threshold, + })?; + for action in actions { + queue.push_back((node.address, action)); + } + } + + self.process_dkg_queue(queue, max_steps)?; + Ok(participants) + } + + fn process_dkg_queue( + &mut self, + mut queue: VecDeque<(Address, DkgAction)>, + max_steps: usize, + ) -> Result<()> { + let mut steps = 0; + while let Some((sender, action)) = queue.pop_front() { + steps += 1; + if steps > max_steps { + return Err(anyhow!("Exceeded max DKG steps")); + } + match action { + DkgAction::BroadcastRound1(message) => { + for node in self.nodes.values_mut() { + let actions = node.dkg.handle_event(DkgEngineEvent::Round1 { + from: sender, + message: message.clone(), + })?; + for action in actions { + queue.push_back((node.address, action)); + } + } + } + DkgAction::BroadcastRound2(message) => { + for node in self.nodes.values_mut() { + let actions = node.dkg.handle_event(DkgEngineEvent::Round2 { + from: sender, + message: message.clone(), + })?; + for action in actions { + queue.push_back((node.address, action)); + } + } + } + DkgAction::BroadcastComplaint(message) => { + for node in self.nodes.values_mut() { + let actions = node.dkg.handle_event(DkgEngineEvent::Complaint { + from: sender, + message: message.clone(), + })?; + for action in actions { + queue.push_back((node.address, action)); + } + } + } + DkgAction::BroadcastRound2Culprits(message) => { + for node in self.nodes.values_mut() { + let actions = node.dkg.handle_event(DkgEngineEvent::Round2Culprits { + from: sender, + message: message.clone(), + })?; + for action in actions { + queue.push_back((node.address, action)); + } + } + } + DkgAction::Complete(_) => {} + } + } + + Ok(()) + } + + #[allow(clippy::too_many_arguments)] + fn run_roast_signing( + &mut self, + coordinator_addr: Address, + msg_hash: H256, + era: u64, + tweak_target: ActorId, + threshold: u16, + participants: Vec
, + max_steps: usize, + ) -> Result { + let messages = { + let coordinator = self + .nodes + .get_mut(&coordinator_addr) + .ok_or_else(|| anyhow!("Missing coordinator node"))?; + coordinator + .roast + .handle_event(RoastEngineEvent::StartSigning { + msg_hash, + era, + tweak_target, + threshold, + participants, + })? + }; + + let mut queue = VecDeque::new(); + for message in messages { + queue.push_back((coordinator_addr, message)); + } + + self.process_roast_queue(queue, max_steps)?; + + self.nodes + .get(&coordinator_addr) + .and_then(|node| node.roast.get_signature(msg_hash, era)) + .ok_or_else(|| anyhow!("Missing aggregate signature")) + } + + fn process_roast_queue( + &mut self, + mut queue: VecDeque<(Address, RoastMessage)>, + max_steps: usize, + ) -> Result<()> { + let mut steps = 0; + while let Some((sender, message)) = queue.pop_front() { + steps += 1; + if steps > max_steps { + return Err(anyhow!("Exceeded max ROAST steps")); + } + + for node in self.nodes.values_mut() { + let events = match &message { + RoastMessage::SignSessionRequest(request) => { + node.roast + .handle_event(RoastEngineEvent::SignSessionRequest { + from: sender, + request: request.clone(), + })? + } + RoastMessage::SignNonceCommit(commit) => { + node.roast.handle_event(RoastEngineEvent::NonceCommit { + commit: commit.clone(), + })? + } + RoastMessage::SignNoncePackage(package) => { + node.roast.handle_event(RoastEngineEvent::NoncePackage { + package: package.clone(), + })? + } + RoastMessage::SignShare(partial) => { + node.roast.handle_event(RoastEngineEvent::SignShare { + partial: partial.clone(), + })? + } + RoastMessage::SignCulprits(culprits) => { + node.roast.handle_event(RoastEngineEvent::SignCulprits { + culprits: culprits.clone(), + })? + } + RoastMessage::SignAggregate(aggregate) => { + node.roast.handle_event(RoastEngineEvent::SignAggregate { + aggregate: aggregate.clone(), + })? + } + }; + + for event in events { + queue.push_back((node.address, event)); + } + } + } + + Ok(()) + } + + fn assert_dkg_completed(&self, era: u64) { + for (address, node) in &self.nodes { + assert!( + node.dkg.is_completed(era), + "Validator {:?} did not complete DKG", + address + ); + assert!( + node.dkg.get_public_key_package(era).is_some(), + "Validator {:?} missing public key package", + address + ); + } + } + + fn public_key_packages(&self, era: u64) -> Vec { + self.nodes + .values() + .filter_map(|node| node.dkg.get_public_key_package(era)) + .collect() + } +} + +#[test] +fn signing_package_ignored_when_idle() { + let self_address = Address::from([1; 20]); + let mut participant = RoastParticipant::new(ParticipantConfig { self_address }); + let package = SignNoncePackage { + session: DkgSessionId { era: 1 }, + msg_hash: H256([9; 32]), + commitments: vec![(self_address, vec![1, 2, 3])], + }; + + let actions = participant + .process_event(ParticipantEvent::SigningPackage(package)) + .expect("process signing package"); + + assert!(actions.is_empty()); + assert!(matches!(participant.state(), ParticipantState::Idle)); +} + +/// Runs an in-memory DKG to build identifiers and key packages for tests. +fn build_dkg_materials( + participants: &[Address], + session: DkgSessionId, + threshold: u16, +) -> ( + BTreeMap, + BTreeMap, +) { + let mut protocols: Vec<(Address, DkgProtocol)> = participants + .iter() + .map(|address| { + ( + *address, + DkgProtocol::new(DkgConfig { + session, + threshold, + participants: participants.to_vec(), + self_address: *address, + }) + .expect("protocol init"), + ) + }) + .collect(); + + let mut round1_messages = Vec::new(); + for (address, protocol) in protocols.iter_mut() { + let round1 = protocol.generate_round1().expect("round1"); + round1_messages.push((*address, round1)); + } + + for (_, protocol) in protocols.iter_mut() { + for (from, message) in &round1_messages { + protocol + .receive_round1(*from, message.clone()) + .expect("receive round1"); + } + } + + let mut round2_messages = Vec::new(); + for (address, protocol) in protocols.iter_mut() { + let round2 = protocol.generate_round2().expect("round2"); + round2_messages.push((*address, round2)); + } + + for (_, protocol) in protocols.iter_mut() { + for (from, message) in &round2_messages { + protocol + .receive_round2(*from, message.clone()) + .expect("receive round2"); + } + } + + let mut identifiers = BTreeMap::new(); + let mut key_packages = BTreeMap::new(); + for (address, protocol) in protocols.iter_mut() { + let identifier = protocol.identifier_for(*address).expect("identifier"); + identifiers.insert(*address, identifier); + + let key_package = match protocol.finalize().expect("finalize") { + FinalizeResult::Completed { key_package, .. } => *key_package, + other => panic!("unexpected finalize result: {other:?}"), + }; + key_packages.insert(*address, key_package); + } + + (identifiers, key_packages) +} + +#[test] +fn participant_signs_after_request_and_package() { + let participants = vec![ + Address::from([1; 20]), + Address::from([2; 20]), + Address::from([3; 20]), + ]; + let self_address = participants[0]; + let session = DkgSessionId { era: 1 }; + let threshold = 2; + let (identifiers, key_packages) = build_dkg_materials(&participants, session, threshold); + + let request = SignSessionRequest { + session, + leader: self_address, + attempt: 0, + msg_hash: H256([7; 32]), + tweak_target: ActorId::from([9; 32]), + threshold, + participants: participants.clone(), + kind: SignKind::BatchCommitment, + }; + + let mut participant = RoastParticipant::new(ParticipantConfig { self_address }); + let actions = participant + .process_event(ParticipantEvent::SignRequest { + request: request.clone(), + key_package: Box::new( + key_packages + .get(&self_address) + .expect("key package") + .clone(), + ), + identifiers: identifiers.clone(), + pre_nonce: None, + }) + .expect("sign request"); + + let commit = match &actions[..] { + [ParticipantAction::SendNonceCommit(commit)] => commit.clone(), + other => panic!("unexpected actions: {other:?}"), + }; + + assert!(matches!(participant.state(), ParticipantState::NonceSent)); + + let commitments = participants + .iter() + .map(|address| (*address, commit.nonce_commit.clone())) + .collect::>(); + let package = SignNoncePackage { + session, + msg_hash: request.msg_hash, + commitments, + }; + + let actions = participant + .process_event(ParticipantEvent::SigningPackage(package)) + .expect("signing package"); + + match &actions[..] { + [ParticipantAction::SendPartialSignature(partial)] => { + assert_eq!(partial.session, session); + assert_eq!(partial.from, self_address); + assert_eq!(partial.msg_hash, request.msg_hash); + } + other => panic!("unexpected actions: {other:?}"), + } + + assert!(matches!(participant.state(), ParticipantState::PartialSent)); +} + +#[test] +fn roast_signature_verifies_with_tweak() { + let mut network = SimpleNetwork::new(4); + let era = 1; + let threshold = 3; + let participants = network.run_dkg(era, threshold, 256).expect("run dkg"); + network.assert_dkg_completed(era); + + let coordinator = network.coordinator_address(); + let msg_hash = H256([7; 32]); + let tweak_target = ActorId::from([9; 32]); + + let aggregate = network + .run_roast_signing( + coordinator, + msg_hash, + era, + tweak_target, + threshold, + participants, + 512, + ) + .expect("run roast signing"); + + let public_key_package = network + .public_key_packages(era) + .into_iter() + .next() + .expect("public key package"); + let tweaked_package = + tweak_public_key_package(&public_key_package, hash_to_scalar(tweak_target)) + .expect("tweak public key package"); + let tweaked_pk: [u8; 33] = tweaked_package + .verifying_key() + .serialize() + .expect("serialize tweaked verifying key") + .as_slice() + .try_into() + .expect("tweaked verifying key size"); + + assert_eq!(aggregate.tweaked_pk, tweaked_pk); + + let (r_x, r_y, z) = aggregate.signature_components(); + let r_point = + EncodedPoint::from_affine_coordinates(&FieldBytes::from(r_x), &FieldBytes::from(r_y), true); + let mut signature_bytes = [0u8; 65]; + signature_bytes[..33].copy_from_slice(r_point.as_bytes()); + signature_bytes[33..].copy_from_slice(&z); + + let signature = Signature::deserialize(&signature_bytes).expect("deserialize signature"); + let verifying_key = + VerifyingKey::deserialize(&aggregate.tweaked_pk).expect("deserialize verifying key"); + + verifying_key + .verify(msg_hash.as_bytes(), &signature) + .expect("verify aggregate signature"); + + let bad_tweak_target = ActorId::from([8; 32]); + let bad_tweaked_package = + tweak_public_key_package(&public_key_package, hash_to_scalar(bad_tweak_target)) + .expect("tweak public key package (bad)"); + let bad_tweaked_pk: [u8; 33] = bad_tweaked_package + .verifying_key() + .serialize() + .expect("serialize bad tweaked verifying key") + .as_slice() + .try_into() + .expect("bad tweaked verifying key size"); + let bad_verifying_key = + VerifyingKey::deserialize(&bad_tweaked_pk).expect("deserialize bad verifying key"); + assert!( + bad_verifying_key + .verify(msg_hash.as_bytes(), &signature) + .is_err(), + "signature must not verify with a different tweak" + ); + + let wrong_msg_hash = H256([8; 32]); + assert!( + verifying_key + .verify(wrong_msg_hash.as_bytes(), &signature) + .is_err(), + "signature must not verify for a different message" + ); +} diff --git a/ethexe/dkg-roast/src/engine/roast/core/tweak.rs b/ethexe/dkg-roast/src/engine/roast/core/tweak.rs new file mode 100644 index 00000000000..5ca3882d13b --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/core/tweak.rs @@ -0,0 +1,104 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use anyhow::{Result, anyhow}; +use ethexe_common::{ + crypto::{ + DkgKeyPackage, DkgPublicKeyPackage, + tweak::{tweak_pubkey, tweak_share}, + }, + k256::{Scalar, elliptic_curve::PrimeField}, +}; +use roast_secp256k1_evm::frost::{ + VerifyingKey, + keys::{KeyPackage, PublicKeyPackage, SigningShare, VerifyingShare}, +}; +use std::collections::BTreeMap; + +/// Parses a 32-byte scalar from raw bytes. +fn scalar_from_bytes(bytes: &[u8]) -> Result { + let mut buf = [0u8; 32]; + if bytes.len() != buf.len() { + return Err(anyhow!("Invalid scalar length")); + } + buf.copy_from_slice(bytes); + Option::::from(Scalar::from_repr(buf.into())).ok_or_else(|| anyhow!("Malformed scalar")) +} + +/// Applies a tweak to a signing share. +fn tweaked_signing_share(share: &SigningShare, tweak: Scalar) -> Result { + let scalar = scalar_from_bytes(&share.serialize())?; + let tweaked = tweak_share(scalar, tweak); + SigningShare::deserialize(&tweaked.to_bytes()) + .map_err(|err| anyhow!("Failed to deserialize tweaked signing share: {err}")) +} + +/// Applies a tweak to a verifying share. +fn tweaked_verifying_share(share: &VerifyingShare, tweak: Scalar) -> Result { + let bytes = share.serialize()?; + let compressed: [u8; 33] = bytes + .as_slice() + .try_into() + .map_err(|_| anyhow!("Invalid verifying share length"))?; + let tweaked = tweak_pubkey(&compressed, tweak)?; + VerifyingShare::deserialize(&tweaked) + .map_err(|err| anyhow!("Failed to deserialize tweaked verifying share: {err}")) +} + +/// Applies a tweak to a verifying key. +fn tweaked_verifying_key(key: &VerifyingKey, tweak: Scalar) -> Result { + let bytes = key.serialize()?; + let compressed: [u8; 33] = bytes + .as_slice() + .try_into() + .map_err(|_| anyhow!("Invalid verifying key length"))?; + let tweaked = tweak_pubkey(&compressed, tweak)?; + VerifyingKey::deserialize(&tweaked) + .map_err(|err| anyhow!("Failed to deserialize tweaked verifying key: {err}")) +} + +/// Applies a tweak to a key package (signing + verifying shares + key). +pub(crate) fn tweak_key_package( + key_package: &DkgKeyPackage, + tweak: Scalar, +) -> Result { + let signing_share = tweaked_signing_share(key_package.signing_share(), tweak)?; + let verifying_share = tweaked_verifying_share(key_package.verifying_share(), tweak)?; + let verifying_key = tweaked_verifying_key(key_package.verifying_key(), tweak)?; + + Ok(KeyPackage::new( + *key_package.identifier(), + signing_share, + verifying_share, + verifying_key, + *key_package.min_signers(), + )) +} + +/// Applies a tweak to the public key package (verifying shares + key). +pub(crate) fn tweak_public_key_package( + public_key_package: &DkgPublicKeyPackage, + tweak: Scalar, +) -> Result { + let mut verifying_shares = BTreeMap::new(); + for (identifier, share) in public_key_package.verifying_shares() { + verifying_shares.insert(*identifier, tweaked_verifying_share(share, tweak)?); + } + let verifying_key = tweaked_verifying_key(public_key_package.verifying_key(), tweak)?; + Ok(PublicKeyPackage::new(verifying_shares, verifying_key)) +} diff --git a/ethexe/dkg-roast/src/engine/roast/engine.rs b/ethexe/dkg-roast/src/engine/roast/engine.rs new file mode 100644 index 00000000000..a0883c240d4 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/engine.rs @@ -0,0 +1,152 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::RoastMessage; +use crate::engine::roast::RoastManager; +use anyhow::Result; +use ethexe_common::{ + Address, + crypto::{ + SignAggregate, SignCulprits, SignNonceCommit, SignNoncePackage, SignSessionRequest, + SignShare, + }, +}; +use gprimitives::{ActorId, H256}; + +/// External inputs for the ROAST engine (network + local triggers). +#[derive(Debug, Clone)] +pub enum RoastEngineEvent { + StartSigning { + msg_hash: H256, + era: u64, + tweak_target: ActorId, + threshold: u16, + participants: Vec
, + }, + SignSessionRequest { + from: Address, + request: SignSessionRequest, + }, + NonceCommit { + commit: SignNonceCommit, + }, + NoncePackage { + package: SignNoncePackage, + }, + SignShare { + partial: SignShare, + }, + SignCulprits { + culprits: SignCulprits, + }, + SignAggregate { + aggregate: SignAggregate, + }, +} + +/// ROAST engine wraps the manager for signing sessions. +#[derive(Debug)] +pub struct RoastEngine { + manager: RoastManager, +} + +impl RoastEngine +where + DB: crate::engine::storage::RoastStore, +{ + /// Creates a new ROAST engine bound to a DB and local validator address. + pub fn new(db: DB, self_address: Address) -> Self { + Self { + manager: RoastManager::new(db, self_address), + } + } + + /// Routes a ROAST event through the manager. + pub fn handle_event(&mut self, event: RoastEngineEvent) -> Result> { + match event { + RoastEngineEvent::StartSigning { + msg_hash, + era, + tweak_target, + threshold, + participants, + } => self + .manager + .start_signing(msg_hash, era, tweak_target, threshold, participants), + RoastEngineEvent::SignSessionRequest { from, request } => { + self.manager.process_sign_request(from, request) + } + RoastEngineEvent::NonceCommit { commit } => self.manager.process_nonce_commit(commit), + RoastEngineEvent::NoncePackage { package } => { + self.manager.process_nonce_package(package) + } + RoastEngineEvent::SignShare { partial } => { + self.manager.process_partial_signature(partial) + } + RoastEngineEvent::SignCulprits { culprits } => { + self.manager.process_culprits(culprits)?; + Ok(vec![]) + } + RoastEngineEvent::SignAggregate { aggregate } => { + self.manager.process_aggregate(aggregate)?; + Ok(vec![]) + } + } + } + + /// Advances timeout-driven retries for active sessions. + pub fn tick_timeouts(&mut self) -> Result> { + self.manager.process_timeouts() + } + + /// Returns the stored aggregate signature, if available. + pub fn get_signature(&self, msg_hash: H256, era: u64) -> Option { + self.manager.get_signature(msg_hash, era) + } + + #[cfg(any(test, feature = "test-utils"))] + #[allow(dead_code)] + pub fn get_cached_signature( + &self, + msg_hash: H256, + era: u64, + tweak_target: ActorId, + ) -> Option { + self.manager + .get_cached_signature(msg_hash, era, tweak_target) + } + + #[allow(dead_code)] + pub fn get_pre_nonce_cache( + &self, + era: u64, + tweak_target: ActorId, + ) -> Option> { + self.manager.get_pre_nonce_cache(era, tweak_target) + } + + #[allow(dead_code)] + pub fn set_pre_nonce_cache( + &self, + era: u64, + tweak_target: ActorId, + cache: Vec, + ) { + self.manager.set_pre_nonce_cache(era, tweak_target, cache); + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/error.rs b/ethexe/dkg-roast/src/engine/roast/error.rs new file mode 100644 index 00000000000..13b9cd3fd11 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/error.rs @@ -0,0 +1,45 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use thiserror::Error; + +/// Canonical ROAST error categories used across the engine. +#[derive(Debug, Error, Clone, Copy, PartialEq, Eq)] +pub enum RoastErrorKind { + #[error("Missing key package")] + MissingKeyPackage, + #[error("Missing DKG share details")] + MissingDkgShare, + #[error("Key package identifier mismatch")] + KeyPackageIdentifierMismatch, + #[error("Key package threshold mismatch")] + KeyPackageThresholdMismatch, + #[error("DKG share index mismatch")] + DkgShareIndexMismatch, +} + +/// Extension for downcasting `anyhow::Error` into `RoastErrorKind`. +pub trait RoastErrorExt { + fn roast_error_kind(&self) -> Option; +} + +impl RoastErrorExt for anyhow::Error { + fn roast_error_kind(&self) -> Option { + self.downcast_ref::().copied() + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/mod.rs b/ethexe/dkg-roast/src/engine/roast/mod.rs new file mode 100644 index 00000000000..a180d787120 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/mod.rs @@ -0,0 +1,81 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! ROAST (Robust Asynchronous Schnorr Threshold) Signing +//! +//! This module implements the ROAST protocol for threshold signatures using FROST. +//! ROAST provides robustness against Byzantine participants and network failures. +//! +//! ## Protocol Overview: +//! +//! 1. **Leader Election**: Deterministic leader selection based on validators, msg_hash, and era +//! 2. **Nonce Commitment Phase**: Participants send nonce commitments to the leader +//! 3. **Partial Signature Phase**: Leader aggregates nonces and participants send partial signatures +//! 4. **Aggregation**: Leader combines partial signatures into final 96-byte signature +//! 5. **Failover**: If leader fails, elect next leader and retry +//! +//! ## Key Features: +//! +//! - **Byzantine Fault Tolerance**: Works even if up to (n - threshold) participants fail +//! - **Asynchronous**: No global synchronization required +//! - **Deterministic Leaders**: Leader election is deterministic and verifiable +//! - **Key Tweaking**: Support for ActorId-specific signing +//! +//! ## State Machine: +//! +//! ```text +//! Idle +//! | +//! ├──> WaitingForNonces (leader collects nonce commitments) +//! | | +//! | └──> WaitingForPartials (leader collects partial signatures) +//! | | +//! | └──> Completed (final signature ready) +//! | +//! └──> Failed (timeout or insufficient participants) +//! ``` +//! +//! ## Message Flow (ASCII): +//! +//! ```text +//! Leader Participants +//! | SignSessionRequest -> | +//! | <- SignNonceCommit | +//! | SignNoncePackage -> | +//! | <- SignShare | +//! | SignAggregate -> | +//! ``` +//! +//! Retries rotate the leader and exclude missing signers when timeouts occur. + +pub mod core; +mod engine; +mod error; +pub mod storage; + +pub use crate::policy::select_roast_leader as select_leader; +pub use core::{ + ParticipantAction, ParticipantConfig, ParticipantEvent, RoastParticipant, RoastResult, + SessionConfig, +}; +pub use engine::{RoastEngine, RoastEngineEvent}; +pub use error::{RoastErrorExt, RoastErrorKind}; +pub use storage::{ + CoordinatorAction, CoordinatorConfig, CoordinatorEvent, RoastCoordinator, RoastManager, + RoastMessage, +}; diff --git a/ethexe/dkg-roast/src/engine/roast/storage/coordinator.rs b/ethexe/dkg-roast/src/engine/roast/storage/coordinator.rs new file mode 100644 index 00000000000..fb9e92fe6e0 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/coordinator.rs @@ -0,0 +1,526 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! ROAST Coordinator (Leader) Implementation + +use crate::{ + engine::roast::core::{RoastResult, SessionConfig, tweak_public_key_package}, + policy::{dkg_session_id, select_roast_leader}, +}; +use anyhow::{Result, anyhow}; +use ethexe_common::{ + Address, + crypto::{ + DkgIdentifier, SignAggregate, SignCulprits, SignKind, SignNonceCommit, SignNoncePackage, + SignSessionRequest, SignShare, tweak::hash_to_scalar, + }, + db::{DkgStorageRO, SignSessionState, SignStorageRW}, + ecdsa::PublicKey, +}; +use roast_secp256k1_evm::{ + Coordinator, + error::RoastError, + frost::{Signature, round1::SigningCommitments, round2::SignatureShare}, +}; +use std::{ + collections::BTreeMap, + time::{Duration, Instant}, +}; + +/// Coordinator configuration +#[derive(Debug, Clone)] +/// Coordinator timeout configuration. +pub struct CoordinatorConfig { + /// Timeout for collecting nonce commitments + pub nonce_timeout: Duration, + /// Timeout for collecting partial signatures + pub partial_timeout: Duration, +} + +impl Default for CoordinatorConfig { + fn default() -> Self { + Self { + nonce_timeout: Duration::from_secs(30), + partial_timeout: Duration::from_secs(30), + } + } +} + +/// Coordinator state +#[derive(Debug, Clone, PartialEq, Eq)] +/// Coordinator state machine phases. +pub enum CoordinatorState { + /// Idle - no active signing session + Idle, + /// Waiting for nonce commitments + WaitingForNonces { started_at: Instant }, + /// Waiting for partial signatures + WaitingForPartials { started_at: Instant }, + /// Signing completed + Completed(SignAggregate), + /// Signing failed + Failed(String), +} + +/// Events that coordinator can process +#[derive(Debug, Clone)] +/// Events handled by the coordinator state machine. +pub enum CoordinatorEvent { + /// Start new signing session + Start(SessionConfig), + /// Received nonce commitment + NonceCommit(SignNonceCommit), + /// Received partial signature + PartialSignature(SignShare), + /// Timeout occurred + Timeout, +} + +/// Actions to perform after processing event +#[derive(Debug, Clone)] +/// Actions emitted by the coordinator (broadcasts + completion). +pub enum CoordinatorAction { + /// Broadcast signing request to participants + BroadcastRequest(SignSessionRequest), + /// Broadcast signing package to participants + BroadcastSigningPackage(SignNoncePackage), + /// Broadcast final aggregated signature + BroadcastAggregate(SignAggregate), + /// Broadcast malicious signer report + BroadcastCulprits(SignCulprits), + /// Complete with result + Complete(RoastResult), +} + +/// ROAST Coordinator (Leader) +#[derive(Debug)] +/// ROAST coordinator state machine (per signing session). +pub struct RoastCoordinator { + state: CoordinatorState, + config: CoordinatorConfig, + session_config: Option, + db: DB, + coordinator: Option, + identifier_by_address: BTreeMap, + address_by_identifier: BTreeMap, + tweaked_public_key: Option<[u8; 33]>, +} + +impl RoastCoordinator +where + DB: DkgStorageRO + SignStorageRW + Clone, +{ + /// Creates a new coordinator with DB access and timeouts. + pub fn new(db: DB, config: CoordinatorConfig) -> Self { + Self { + state: CoordinatorState::Idle, + config, + session_config: None, + db, + coordinator: None, + identifier_by_address: BTreeMap::new(), + address_by_identifier: BTreeMap::new(), + tweaked_public_key: None, + } + } + + /// Returns the current coordinator state. + pub fn state(&self) -> &CoordinatorState { + &self.state + } + + /// Process event and return actions + /// Drives the coordinator state machine with an event. + pub fn process_event(&mut self, event: CoordinatorEvent) -> Result> { + match event { + CoordinatorEvent::Start(config) => self.handle_start(config), + CoordinatorEvent::NonceCommit(commit) => self.handle_nonce_commit(commit), + CoordinatorEvent::PartialSignature(partial) => self.handle_partial_signature(partial), + CoordinatorEvent::Timeout => self.handle_timeout(), + } + } + + /// Handles session start and emits the initial sign request. + fn handle_start(&mut self, mut config: SessionConfig) -> Result> { + if !matches!(self.state, CoordinatorState::Idle) { + return Err(anyhow!("Coordinator already active")); + } + + // Ensure deterministic participant order and leader eligibility. + config.participants.sort(); + let expected_leader = select_roast_leader( + &config.participants, + config.msg_hash, + config.session.era, + config.attempt, + ); + if expected_leader != config.self_address { + return Err(anyhow!("Self is not elected leader for this attempt")); + } + // Load identifier map from DKG state if available; derive otherwise. + self.identifier_by_address = if let Some(state) = self + .db + .dkg_session_state(dkg_session_id(config.session.era)) + { + if state.identifier_map.is_empty() { + BTreeMap::new() + } else { + let map: BTreeMap = + state.identifier_map.into_iter().collect(); + if !config + .participants + .iter() + .all(|addr| map.contains_key(addr)) + { + return Err(anyhow!("Missing identifiers for some participants")); + } + map + } + } else { + BTreeMap::new() + }; + if self.identifier_by_address.is_empty() { + self.identifier_by_address = config + .participants + .iter() + .map(|addr| { + let identifier = DkgIdentifier::derive(addr.as_ref()) + .map_err(|_| anyhow!("Failed to derive identifier"))?; + Ok((*addr, identifier)) + }) + .collect::>>()?; + } + self.address_by_identifier = self + .identifier_by_address + .iter() + .map(|(addr, id)| (*id, *addr)) + .collect(); + + // Load base public key package and apply tweak. + let Some(base_public_key_package) = self.db.public_key_package(config.session.era) else { + return Err(anyhow!("Missing public key package for era")); + }; + let tweak = hash_to_scalar(config.tweak_target); + let public_key_package = tweak_public_key_package(&base_public_key_package, tweak)?; + + let verifying_key = public_key_package + .verifying_key() + .serialize() + .map_err(|err| anyhow!("Failed to serialize verifying key: {err}"))?; + let tweaked_pk: [u8; 33] = verifying_key + .as_slice() + .try_into() + .map_err(|_| anyhow!("Invalid verifying key length"))?; + self.tweaked_public_key = Some(tweaked_pk); + + // Instantiate the FROST coordinator with tweaked key and message. + let coordinator = Coordinator::new( + config.participants.len() as u16, + config.threshold, + public_key_package, + config.msg_hash.as_bytes().to_vec(), + ) + .map_err(|err| anyhow!("Failed to create coordinator: {err}"))?; + + self.coordinator = Some(coordinator); + self.state = CoordinatorState::WaitingForNonces { + started_at: Instant::now(), + }; + + // Broadcast the initial sign request as leader. + let request = SignSessionRequest { + session: config.session, + leader: config.self_address, + attempt: config.attempt, + msg_hash: config.msg_hash, + tweak_target: config.tweak_target, + threshold: config.threshold, + participants: config.participants.clone(), + kind: SignKind::ArbitraryHash, + }; + + self.persist_state()?; + self.session_config = Some(config); + + Ok(vec![CoordinatorAction::BroadcastRequest(request)]) + } + + /// Handles incoming nonce commitments and emits signing package when ready. + fn handle_nonce_commit(&mut self, commit: SignNonceCommit) -> Result> { + let coordinator = self + .coordinator + .as_mut() + .ok_or_else(|| anyhow!("No active coordinator"))?; + + let commit_session = commit.session; + let commit_msg_hash = commit.msg_hash; + let commit_from = commit.from; + + // Map sender address to its DKG identifier. + let identifier = self + .identifier_by_address + .get(&commit_from) + .copied() + .ok_or_else(|| anyhow!("Unknown participant"))?; + + let signing_commitments = SigningCommitments::deserialize(&commit.nonce_commit) + .map_err(|err| anyhow!("Failed to deserialize commitments: {err}"))?; + + // Feed commitment into the coordinator and detect malicious signers. + let status = match coordinator.receive(identifier, None, signing_commitments) { + Ok(status) => status, + Err(RoastError::MaliciousSigner(_)) => { + return Ok(vec![CoordinatorAction::BroadcastCulprits(SignCulprits { + session: commit.session, + msg_hash: commit.msg_hash, + culprits: vec![commit.from], + })]); + } + Err(err) => return Err(anyhow!("Coordinator receive failed: {err}")), + }; + + self.db + .mutate_sign_session_state(commit_msg_hash, commit_session.era, move |state| { + if !state + .nonce_commits + .iter() + .any(|existing| existing.from == commit_from) + { + state.nonce_commits.push(commit); + } + }); + + if let roast_secp256k1_evm::SessionStatus::Started { + signers, + signing_package, + } = status + { + // Threshold reached: broadcast signing package. + self.state = CoordinatorState::WaitingForPartials { + started_at: Instant::now(), + }; + self.persist_state()?; + + let mut commitments = Vec::new(); + for (identifier, commitment) in signing_package.signing_commitments() { + if !signers.contains(identifier) { + continue; + } + let addr = self + .address_by_identifier + .get(identifier) + .copied() + .ok_or_else(|| anyhow!("Unknown signer identifier"))?; + let bytes = commitment + .serialize() + .map_err(|err| anyhow!("Failed to serialize commitments: {err}"))?; + commitments.push((addr, bytes)); + } + commitments.sort_by_key(|(addr, _)| *addr); + + let package = SignNoncePackage { + session: commit_session, + msg_hash: commit_msg_hash, + commitments, + }; + + return Ok(vec![CoordinatorAction::BroadcastSigningPackage(package)]); + } + + self.persist_state()?; + Ok(vec![]) + } + + /// Handles partial signatures and emits aggregate when completed. + fn handle_partial_signature(&mut self, partial: SignShare) -> Result> { + let coordinator = self + .coordinator + .as_mut() + .ok_or_else(|| anyhow!("No active coordinator"))?; + + let partial_session = partial.session; + let partial_msg_hash = partial.msg_hash; + let partial_from = partial.from; + + // Map sender address to its DKG identifier. + let identifier = self + .identifier_by_address + .get(&partial_from) + .copied() + .ok_or_else(|| anyhow!("Unknown participant"))?; + + let signature_share = SignatureShare::deserialize(&partial.partial_sig) + .map_err(|err| anyhow!("Failed to deserialize signature share: {err}"))?; + let signing_commitments = SigningCommitments::deserialize(&partial.next_commitments) + .map_err(|err| anyhow!("Failed to deserialize commitments: {err}"))?; + + // Feed partial into the coordinator and detect malicious signers. + let status = + match coordinator.receive(identifier, Some(signature_share), signing_commitments) { + Ok(status) => status, + Err(RoastError::MaliciousSigner(_)) => { + return Ok(vec![CoordinatorAction::BroadcastCulprits(SignCulprits { + session: partial.session, + msg_hash: partial.msg_hash, + culprits: vec![partial.from], + })]); + } + Err(err) => return Err(anyhow!("Coordinator receive failed: {err}")), + }; + + self.db + .mutate_sign_session_state(partial_msg_hash, partial_session.era, move |state| { + if !state + .sign_shares + .iter() + .any(|existing| existing.from == partial_from) + { + state.sign_shares.push(partial); + } + }); + + if let roast_secp256k1_evm::SessionStatus::Finished { signature } = status { + // Aggregate signature is complete; persist and emit. + let aggregate = self.build_aggregate(partial_session, partial_msg_hash, signature)?; + self.state = CoordinatorState::Completed(aggregate); + + let CoordinatorState::Completed(aggregate) = &self.state else { + return Err(anyhow!("Coordinator state missing aggregate")); + }; + let aggregate_for_db = aggregate.clone(); + let config = self.session_config.as_ref().unwrap(); + self.db + .mutate_sign_session_state(config.msg_hash, config.session.era, |state| { + state.aggregate = Some(aggregate_for_db); + state.completed = true; + }); + + let aggregate_for_action = aggregate.clone(); + return Ok(vec![ + CoordinatorAction::BroadcastAggregate(aggregate_for_action.clone()), + CoordinatorAction::Complete(RoastResult::Success(aggregate_for_action)), + ]); + } + + self.persist_state()?; + Ok(vec![]) + } + + /// Applies timeout logic to the current coordinator phase. + fn handle_timeout(&mut self) -> Result> { + match &self.state { + CoordinatorState::WaitingForNonces { started_at } => { + if started_at.elapsed() > self.config.nonce_timeout { + self.state = CoordinatorState::Failed("Nonce timeout".to_string()); + return Ok(vec![CoordinatorAction::Complete(RoastResult::Failed( + "Nonce timeout".to_string(), + ))]); + } + } + CoordinatorState::WaitingForPartials { started_at } => { + if started_at.elapsed() > self.config.partial_timeout { + self.state = CoordinatorState::Failed("Partial timeout".to_string()); + return Ok(vec![CoordinatorAction::Complete(RoastResult::Failed( + "Partial timeout".to_string(), + ))]); + } + } + _ => {} + } + + Ok(vec![]) + } + + /// Builds the on-wire aggregate signature from the FROST output. + fn build_aggregate( + &self, + session: ethexe_common::crypto::DkgSessionId, + msg_hash: gprimitives::H256, + signature: Signature, + ) -> Result { + // Convert FROST signature into 96-byte (R_x || R_y || z). + let tweaked_pk = self + .tweaked_public_key + .ok_or_else(|| anyhow!("Missing tweaked public key"))?; + + let signature_bytes = signature + .serialize() + .map_err(|err| anyhow!("Failed to serialize signature: {err}"))?; + + let mut r_bytes = [0u8; 33]; + let r_slice = signature_bytes + .get(..33) + .ok_or_else(|| anyhow!("Signature missing R"))?; + r_bytes.copy_from_slice(r_slice); + + let r_uncompressed = PublicKey::from_bytes(r_bytes) + .map_err(|err| anyhow!("Invalid signature R: {err}"))? + .to_uncompressed(); + let (r_x, r_y) = r_uncompressed.split_at(32); + + let z_bytes = signature_bytes + .get(33..65) + .ok_or_else(|| anyhow!("Signature missing z"))?; + + let mut sig96 = [0u8; 96]; + sig96[..32].copy_from_slice(r_x); + sig96[32..64].copy_from_slice(r_y); + sig96[64..96].copy_from_slice(z_bytes); + + Ok(SignAggregate { + session, + msg_hash, + tweaked_pk, + signature96: sig96, + }) + } + + /// Persists the current session state to the backing store. + fn persist_state(&self) -> Result<()> { + let Some(config) = self.session_config.as_ref() else { + return Ok(()); + }; + + let request = self + .session_config + .as_ref() + .map(|config| SignSessionRequest { + session: config.session, + leader: config.self_address, + attempt: config.attempt, + msg_hash: config.msg_hash, + tweak_target: config.tweak_target, + threshold: config.threshold, + participants: config.participants.clone(), + kind: SignKind::ArbitraryHash, + }); + + let state = SignSessionState { + request, + nonce_commits: vec![], + sign_shares: vec![], + aggregate: None, + completed: matches!(self.state, CoordinatorState::Completed(_)), + }; + + self.db + .set_sign_session_state(config.msg_hash, config.session.era, state); + + Ok(()) + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/actions.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/actions.rs new file mode 100644 index 00000000000..dcb0648c1ee --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/actions.rs @@ -0,0 +1,73 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::types::RoastMessage; +use crate::engine::prelude::{CoordinatorAction, ParticipantAction}; +use anyhow::Result; + +/// Converts coordinator actions into outbound ROAST messages. +pub(super) fn coordinator_actions_to_outbound( + actions: Vec, +) -> Result> { + let mut messages = vec![]; + + // Convert coordinator actions into network messages. + for action in actions { + match action { + CoordinatorAction::BroadcastRequest(request) => { + messages.push(RoastMessage::SignSessionRequest(request)); + } + CoordinatorAction::BroadcastSigningPackage(package) => { + messages.push(RoastMessage::SignNoncePackage(package)); + } + CoordinatorAction::BroadcastAggregate(aggregate) => { + messages.push(RoastMessage::SignAggregate(aggregate)); + } + CoordinatorAction::BroadcastCulprits(culprits) => { + messages.push(RoastMessage::SignCulprits(culprits)); + } + CoordinatorAction::Complete(_result) => { + // Completion is handled internally by state transitions. + tracing::info!("ROAST signing completed"); + } + } + } + + Ok(messages) +} + +/// Converts participant actions into outbound ROAST messages. +pub(super) fn participant_actions_to_outbound( + actions: Vec, +) -> Result> { + let mut messages = vec![]; + + // Convert participant actions into network messages. + for action in actions { + match action { + ParticipantAction::SendNonceCommit(commit) => { + messages.push(RoastMessage::SignNonceCommit(commit)); + } + ParticipantAction::SendPartialSignature(partial) => { + messages.push(RoastMessage::SignShare(partial)); + } + } + } + + Ok(messages) +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/cache.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/cache.rs new file mode 100644 index 00000000000..3c518144acd --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/cache.rs @@ -0,0 +1,76 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::types::{ROAST_CACHE_KEEP_ERAS, RoastMessage}; +use crate::engine::storage::RoastStore; +use ethexe_common::crypto::{SignAggregate, SignSessionRequest}; +use gprimitives::{ActorId, H256}; + +/// Prunes ROAST caches older than the configured era window. +pub(super) fn prune_caches_if_needed(db: &DB, era: u64) { + // Retain a small window of recent eras to keep cache bounded. + let min_era = era.saturating_sub(ROAST_CACHE_KEEP_ERAS); + let (sig_removed, nonce_removed) = db.prune_roast_caches_before(min_era); + if sig_removed > 0 || nonce_removed > 0 { + tracing::debug!( + era, + min_era, + sig_removed, + nonce_removed, + "Pruned ROAST caches" + ); + } +} + +/// Loads cached aggregate signature and wraps it as a network message. +pub(super) fn cached_signature_message( + db: &DB, + era: u64, + tweak_target: ActorId, + msg_hash: H256, +) -> Option { + // Fetch cached aggregate signature if present. + db.signature_cache(era, tweak_target, msg_hash) + .map(RoastMessage::SignAggregate) +} + +/// Convenience wrapper to use request fields for cache lookup. +pub(super) fn cached_signature_for_request( + db: &DB, + request: &SignSessionRequest, +) -> Option { + // Convenience wrapper to fetch cache using request fields. + cached_signature_message( + db, + request.session.era, + request.tweak_target, + request.msg_hash, + ) +} + +/// Stores aggregate signature in the cache for fast reuse. +pub(super) fn store_aggregate( + db: &DB, + era: u64, + tweak_target: ActorId, + msg_hash: H256, + aggregate: SignAggregate, +) { + // Persist aggregate for fast reuse in subsequent requests. + db.set_signature_cache(era, tweak_target, msg_hash, aggregate); +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/cache.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/cache.rs new file mode 100644 index 00000000000..25c78a43a0e --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/cache.rs @@ -0,0 +1,67 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::super::RoastManager; +use crate::engine::storage::RoastStore; +use ethexe_common::crypto::SignAggregate; +use gprimitives::{ActorId, H256}; + +impl RoastManager +where + DB: RoastStore, +{ + /// Returns completed signature from session state, if any. + pub fn get_signature(&self, msg_hash: H256, era: u64) -> Option { + self.db + .sign_session_state(msg_hash, era) + .and_then(|state| state.aggregate) + } + + #[cfg(any(test, feature = "test-utils"))] + #[allow(dead_code)] + /// Returns cached aggregate signature (test helper). + pub fn get_cached_signature( + &self, + msg_hash: H256, + era: u64, + tweak_target: ActorId, + ) -> Option { + self.db.signature_cache(era, tweak_target, msg_hash) + } + + #[allow(dead_code)] + /// Returns the pre-nonce cache for a given era/target. + pub fn get_pre_nonce_cache( + &self, + era: u64, + tweak_target: ActorId, + ) -> Option> { + self.db.pre_nonce_cache(era, tweak_target) + } + + #[allow(dead_code)] + /// Sets the pre-nonce cache for a given era/target. + pub fn set_pre_nonce_cache( + &self, + era: u64, + tweak_target: ActorId, + cache: Vec, + ) { + self.db.set_pre_nonce_cache(era, tweak_target, cache); + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/ingest.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/ingest.rs new file mode 100644 index 00000000000..29c103e7bf3 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/ingest.rs @@ -0,0 +1,278 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::super::{RoastManager, actions, cache, types::RoastMessage}; +use crate::{ + engine::{ + roast::storage::coordinator::{CoordinatorAction, CoordinatorEvent}, + storage::RoastStore, + }, + policy::{ + RoastSessionId, RoastTimeoutStage, build_roast_retry_plan, missing_signers_after_timeout, + roast_session_id, + }, +}; +use anyhow::Result; +use ethexe_common::crypto::{ + SignAggregate, SignCulprits, SignNonceCommit, SignSessionRequest, SignShare, +}; +use std::time::Instant; + +impl RoastManager +where + DB: RoastStore, +{ + /// Processes a nonce commitment on the coordinator path. + pub fn process_nonce_commit(&mut self, commit: SignNonceCommit) -> Result> { + let session_id = roast_session_id(commit.msg_hash, commit.session.era); + // Ignore commits for unknown sessions unless a coordinator is active or persisted. + + // Drop duplicate commits from the same signer. + if self + .db + .sign_session_state(commit.msg_hash, commit.session.era) + .is_some_and(|state| state.nonce_commits.iter().any(|c| c.from == commit.from)) + { + return Ok(vec![]); + } + + if !self.coordinators.contains_key(&session_id) + && self + .db + .sign_session_state(commit.msg_hash, commit.session.era) + .is_none() + { + return Ok(vec![]); + } + + let mut messages = vec![]; + // Restore coordinator state from DB if needed. + if !self.coordinators.contains_key(&session_id) { + let mut restored = self.restore_coordinator(session_id)?; + messages.append(&mut restored); + } + + if let Some(coordinator) = self.coordinators.get_mut(&session_id) { + // Ignore excluded signers for this retry attempt. + if self + .excluded + .get(&session_id) + .is_some_and(|set| set.contains(&commit.from)) + { + return Ok(messages); + } + // Drive coordinator state machine with the new commit. + let actions = coordinator.process_event(CoordinatorEvent::NonceCommit(commit))?; + if let Some(progress) = self.session_progress.get_mut(&session_id) { + progress.last_activity = Instant::now(); + } + let has_signing_package = actions + .iter() + .any(|action| matches!(action, CoordinatorAction::BroadcastSigningPackage(_))); + let mut next = actions::coordinator_actions_to_outbound(actions)?; + messages.append(&mut next); + + // If threshold reached but no package broadcast, consider retry plan. + // If enough commits arrived but we didn't broadcast a package, retry. + if !has_signing_package + && let Some(state) = self + .db + .sign_session_state(session_id.msg_hash, session_id.era) + && let Some(request) = state.request.as_ref() + && state.nonce_commits.len() >= request.threshold as usize + { + let missing = + missing_signers_after_timeout(RoastTimeoutStage::Nonce, request, &state); + + if !missing.is_empty() { + let entry = self.excluded.entry(session_id).or_default(); + entry.extend(missing); + + let current_attempt = self + .session_progress + .get(&session_id) + .map(|progress| progress.attempt) + .unwrap_or(request.attempt); + + if let Some(plan) = build_roast_retry_plan( + session_id, + current_attempt, + &request.participants, + request.threshold, + Some(entry), + ) { + let participants = plan.participants; + if plan.leader == self.self_address { + let mut next = self.start_as_coordinator( + session_id, + plan.attempt, + request.tweak_target, + request.threshold, + participants.clone(), + )?; + messages.append(&mut next); + } else { + let retry_request = SignSessionRequest { + session: request.session, + leader: plan.leader, + attempt: plan.attempt, + msg_hash: request.msg_hash, + tweak_target: request.tweak_target, + threshold: request.threshold, + participants: participants.clone(), + kind: request.kind, + }; + messages.push(RoastMessage::SignSessionRequest(retry_request)); + } + if let Some(progress) = self.session_progress.get_mut(&session_id) { + progress.last_activity = Instant::now(); + progress.attempt = plan.attempt; + progress.leader = plan.leader; + progress.participants = participants; + progress.leader_request_seen = plan.leader == self.self_address; + } + } + } + } + Ok(messages) + } else { + Ok(messages) + } + } + + /// Processes a partial signature on the coordinator path. + pub fn process_partial_signature(&mut self, partial: SignShare) -> Result> { + let session_id = roast_session_id(partial.msg_hash, partial.session.era); + // Ignore partials for unknown sessions unless a coordinator is active or persisted. + + // Drop duplicate partials from the same signer. + if self + .db + .sign_session_state(partial.msg_hash, partial.session.era) + .is_some_and(|state| state.sign_shares.iter().any(|s| s.from == partial.from)) + { + return Ok(vec![]); + } + + if !self.coordinators.contains_key(&session_id) + && self + .db + .sign_session_state(partial.msg_hash, partial.session.era) + .is_none() + { + return Ok(vec![]); + } + + let mut messages = vec![]; + // Restore coordinator state from DB if needed. + if !self.coordinators.contains_key(&session_id) { + let mut restored = self.restore_coordinator(session_id)?; + messages.append(&mut restored); + } + + if let Some(coordinator) = self.coordinators.get_mut(&session_id) { + // Ignore excluded signers for this retry attempt. + if self + .excluded + .get(&session_id) + .is_some_and(|set| set.contains(&partial.from)) + { + return Ok(messages); + } + // Drive coordinator state machine with the new partial. + let actions = coordinator.process_event(CoordinatorEvent::PartialSignature(partial))?; + if let Some(progress) = self.session_progress.get_mut(&session_id) { + progress.last_activity = Instant::now(); + } + let mut next = actions::coordinator_actions_to_outbound(actions)?; + messages.append(&mut next); + Ok(messages) + } else { + Ok(messages) + } + } + + /// Records culprits for exclusion during retries. + pub fn process_culprits(&mut self, culprits: SignCulprits) -> Result<()> { + // Exclude malicious signers for future retries. + let session_id = roast_session_id(culprits.msg_hash, culprits.session.era); + let entry = self.excluded.entry(session_id).or_default(); + for culprit in culprits.culprits { + entry.insert(culprit); + } + Ok(()) + } + + /// Process received aggregate signature. + pub fn process_aggregate(&mut self, aggregate: SignAggregate) -> Result<()> { + // Store the aggregate signature in the database. + let session_id = roast_session_id(aggregate.msg_hash, aggregate.session.era); + + // Update session state with the aggregate. + let mut state = self + .db + .sign_session_state(session_id.msg_hash, session_id.era) + .unwrap_or_default(); + let tweak_target = state.request.as_ref().map(|request| request.tweak_target); + state.aggregate = Some(aggregate.clone()); + self.db + .set_sign_session_state(session_id.msg_hash, session_id.era, state); + // Cache aggregate for quick lookup in future sessions. + if let Some(tweak_target) = tweak_target { + cache::store_aggregate( + &self.db, + session_id.era, + tweak_target, + session_id.msg_hash, + aggregate, + ); + } + + // Clean up in-memory state once aggregate is persisted. + self.coordinators.remove(&session_id); + self.participants.remove(&session_id); + self.session_progress.remove(&session_id); + + Ok(()) + } + + /// Restores coordinator state for a session when persisted state exists. + fn restore_coordinator(&mut self, session_id: RoastSessionId) -> Result> { + // Attempt to rebuild coordinator from persisted session state. + let Some(state) = self + .db + .sign_session_state(session_id.msg_hash, session_id.era) + else { + return Ok(vec![]); + }; + let Some(request) = state.request else { + return Ok(vec![]); + }; + if request.leader != self.self_address { + return Ok(vec![]); + } + + self.start_as_coordinator( + session_id, + request.attempt, + request.tweak_target, + request.threshold, + request.participants, + ) + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/mod.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/mod.rs new file mode 100644 index 00000000000..ba1ed9d0013 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/mod.rs @@ -0,0 +1,22 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +mod cache; +mod ingest; +mod start; +mod timeouts; diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/start.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/start.rs new file mode 100644 index 00000000000..fa703b8a01a --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/start.rs @@ -0,0 +1,184 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::super::{ + RoastManager, actions, cache, + types::{RoastMessage, SessionProgress}, +}; +use crate::{ + engine::{ + roast::{ + core::SessionConfig, + storage::coordinator::{CoordinatorEvent, RoastCoordinator}, + }, + storage::RoastStore, + }, + policy::{RoastSessionId, dkg_session_id, roast_session_id, select_roast_leader}, +}; +use anyhow::Result; +use ethexe_common::{ + Address, + crypto::{SignKind, SignSessionRequest}, +}; +use gprimitives::{ActorId, H256}; +use std::time::Instant; + +impl RoastManager +where + DB: RoastStore, +{ + /// Starts a ROAST signing session (leader or participant path). + pub fn start_signing( + &mut self, + msg_hash: H256, + era: u64, + tweak_target: ActorId, + threshold: u16, + mut participants: Vec
, + ) -> Result> { + // Prune caches by era to keep memory bounded. + cache::prune_caches_if_needed(&self.db, era); + tracing::debug!( + era, + msg_hash = %msg_hash, + participants = participants.len(), + threshold, + "ROAST start signing requested" + ); + + // Serve from cache when aggregate is already available. + if let Some(message) = + cache::cached_signature_message(&self.db, era, tweak_target, msg_hash) + { + tracing::debug!( + era, + msg_hash = %msg_hash, + tweak_target = %tweak_target, + cache_hit = true, + "ROAST signature cache hit" + ); + return Ok(vec![message]); + } + tracing::debug!( + era, + msg_hash = %msg_hash, + tweak_target = %tweak_target, + cache_hit = false, + "ROAST signature cache miss" + ); + + // Compute session id and elect leader deterministically. + let session_id = roast_session_id(msg_hash, era); + let attempt = 0; + participants.sort(); + let leader = select_roast_leader(&participants, msg_hash, era, attempt); + + if leader == self.self_address { + tracing::debug!( + era, + msg_hash = %msg_hash, + leader = %leader, + "ROAST start signing as coordinator" + ); + // Leader starts as coordinator locally. + self.start_as_coordinator(session_id, attempt, tweak_target, threshold, participants) + } else { + tracing::debug!( + era, + msg_hash = %msg_hash, + leader = %leader, + "ROAST start signing as participant; broadcasting request" + ); + // Broadcast request to the elected leader. + let request = SignSessionRequest { + session: dkg_session_id(era), + leader, + attempt, + msg_hash, + tweak_target, + threshold, + participants: participants.clone(), + kind: SignKind::ArbitraryHash, + }; + // Track session progress to dedupe and gate retries. + self.session_progress.insert( + session_id, + SessionProgress { + last_activity: Instant::now(), + attempt, + participants, + threshold, + tweak_target, + leader, + leader_request_seen: false, + }, + ); + Ok(vec![RoastMessage::SignSessionRequest(request)]) + } + } + + /// Starts a signing session as coordinator (leader-only). + pub(crate) fn start_as_coordinator( + &mut self, + session_id: RoastSessionId, + attempt: u32, + tweak_target: ActorId, + threshold: u16, + participants: Vec
, + ) -> Result> { + // Ensure this node is still the elected leader for this attempt. + let leader = + select_roast_leader(&participants, session_id.msg_hash, session_id.era, attempt); + if leader != self.self_address { + return Ok(vec![]); + } + let config = SessionConfig { + session: dkg_session_id(session_id.era), + msg_hash: session_id.msg_hash, + tweak_target, + attempt, + threshold, + participants, + self_address: self.self_address, + }; + + // Build coordinator state machine with tweaked key. + let mut coordinator = + RoastCoordinator::new(self.db.clone(), self.coordinator_config.clone()); + + let participants = config.participants.clone(); + let threshold = config.threshold; + let tweak_target = config.tweak_target; + let actions = coordinator.process_event(CoordinatorEvent::Start(config))?; + self.coordinators.insert(session_id, coordinator); + self.session_progress.insert( + session_id, + SessionProgress { + last_activity: Instant::now(), + attempt, + participants, + threshold, + tweak_target, + leader: self.self_address, + leader_request_seen: true, + }, + ); + + actions::coordinator_actions_to_outbound(actions) + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/timeouts.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/timeouts.rs new file mode 100644 index 00000000000..e4652f81694 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/coordinator/timeouts.rs @@ -0,0 +1,211 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::super::{RoastManager, actions, types::RoastMessage}; +use crate::{ + engine::{ + roast::{ + core::RoastResult, + storage::coordinator::{CoordinatorAction, CoordinatorEvent}, + }, + storage::RoastStore, + }, + policy::{ + build_roast_retry_plan, dkg_session_id, missing_signers_after_timeout, + roast_timeout_elapsed, roast_timeout_stage_from_reason, roast_timeout_stage_from_state, + }, +}; +use anyhow::Result; +use ethexe_common::crypto::{SignKind, SignSessionRequest}; +use std::time::Instant; + +impl RoastManager +where + DB: RoastStore, +{ + /// Drives timeout-based retries for coordinator and participant sessions. + pub fn process_timeouts(&mut self) -> Result> { + if !self.coordinators.is_empty() + || !self.participants.is_empty() + || !self.session_progress.is_empty() + { + // Only log when there is active ROAST state to process. + tracing::debug!( + coordinators = self.coordinators.len(), + participants = self.participants.len(), + sessions = self.session_progress.len(), + "ROAST timeout sweep" + ); + } + let mut messages = vec![]; + // First pass: drive coordinator timeouts and track missing signers. + let session_ids: Vec<_> = self.coordinators.keys().copied().collect(); + for session_id in session_ids { + let actions = if let Some(coordinator) = self.coordinators.get_mut(&session_id) { + coordinator.process_event(CoordinatorEvent::Timeout)? + } else { + continue; + }; + + for action in &actions { + let CoordinatorAction::Complete(RoastResult::Failed(reason)) = action else { + continue; + }; + // Record missing signers for retry plan when a timeout fails a session. + let Some(state) = self + .db + .sign_session_state(session_id.msg_hash, session_id.era) + else { + continue; + }; + let Some(ref request) = state.request else { + continue; + }; + + let Some(stage) = roast_timeout_stage_from_reason(reason) else { + continue; + }; + let missing = missing_signers_after_timeout(stage, request, &state); + + if missing.is_empty() { + continue; + } + + let entry = self.excluded.entry(session_id).or_default(); + let excluded_count_before = entry.len(); + entry.extend(missing); + if entry.len() != excluded_count_before { + tracing::debug!( + era = session_id.era, + msg_hash = %session_id.msg_hash, + excluded = entry.len(), + "Excluded missing signers after timeout" + ); + } + } + + let mut next = actions::coordinator_actions_to_outbound(actions)?; + messages.append(&mut next); + } + + // Second pass: drive participant-side session progress timeouts. + let now = Instant::now(); + let sessions: Vec<_> = self.session_progress.keys().copied().collect(); + for session_id in sessions { + let progress = match self.session_progress.get(&session_id) { + Some(progress) => progress, + None => continue, + }; + let state = self + .db + .sign_session_state(session_id.msg_hash, session_id.era); + // Determine whether we are waiting for nonces or partials. + let stage = roast_timeout_stage_from_state(state.as_ref()); + let Some(timeout) = roast_timeout_elapsed( + now, + progress.last_activity, + stage, + self.coordinator_config.nonce_timeout, + self.coordinator_config.partial_timeout, + ) else { + continue; + }; + + tracing::debug!( + era = session_id.era, + msg_hash = %session_id.msg_hash, + attempt = progress.attempt, + timeout = ?timeout, + "ROAST session timeout triggered" + ); + + // Reset participant state before retrying. + self.participants.remove(&session_id); + + // Build retry plan with exclusions; skip if below threshold. + let Some(plan) = build_roast_retry_plan( + session_id, + progress.attempt, + &progress.participants, + progress.threshold, + self.excluded.get(&session_id), + ) else { + tracing::debug!( + era = session_id.era, + msg_hash = %session_id.msg_hash, + participants = progress.participants.len(), + threshold = progress.threshold, + "Skipping ROAST retry due to insufficient participants" + ); + continue; + }; + + tracing::debug!( + era = session_id.era, + msg_hash = %session_id.msg_hash, + next_attempt = plan.attempt, + next_leader = %plan.leader, + participants = plan.participants.len(), + "ROAST retry leader selected" + ); + + let participants = plan.participants; + if plan.leader == self.self_address { + // Resume as coordinator if we are the new leader. + let mut next = self.start_as_coordinator( + session_id, + plan.attempt, + progress.tweak_target, + progress.threshold, + participants.clone(), + )?; + messages.append(&mut next); + } else { + let request = SignSessionRequest { + session: dkg_session_id(session_id.era), + leader: plan.leader, + attempt: plan.attempt, + msg_hash: session_id.msg_hash, + tweak_target: progress.tweak_target, + threshold: progress.threshold, + participants: participants.clone(), + kind: SignKind::ArbitraryHash, + }; + tracing::debug!( + era = session_id.era, + msg_hash = %session_id.msg_hash, + next_attempt = plan.attempt, + next_leader = %plan.leader, + "ROAST broadcasting retry sign request" + ); + messages.push(RoastMessage::SignSessionRequest(request)); + } + + // Update session progress tracking for the new attempt. + if let Some(entry) = self.session_progress.get_mut(&session_id) { + entry.last_activity = now; + entry.attempt = plan.attempt; + entry.leader = plan.leader; + entry.participants = participants; + entry.leader_request_seen = plan.leader == self.self_address; + } + } + + Ok(messages) + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/mod.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/mod.rs new file mode 100644 index 00000000000..274ebed1d7f --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/mod.rs @@ -0,0 +1,79 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +mod actions; +mod cache; +mod coordinator; +mod participant; +mod session; +mod types; + +use crate::{ + engine::{ + roast::{ + core::{ParticipantConfig, RoastParticipant}, + storage::coordinator::CoordinatorConfig, + }, + storage::RoastStore, + }, + policy::RoastSessionId, +}; +use ethexe_common::Address; +use std::collections::{BTreeSet, HashMap}; + +pub use types::RoastMessage; + +/// ROAST Manager handles threshold signing sessions. +#[derive(Debug)] +pub struct RoastManager { + /// Active coordinator sessions (when we are leader) + coordinators: + HashMap>, + /// Active participant sessions (when we are participant) + participants: HashMap, + /// Observed session progress for timeouts/failover + session_progress: HashMap, + /// Excluded signers per session + excluded: HashMap>, + /// Database + db: DB, + /// This validator's address + self_address: Address, + /// Configuration + coordinator_config: CoordinatorConfig, + participant_config: ParticipantConfig, +} + +impl RoastManager +where + DB: RoastStore, +{ + /// Create new ROAST manager. + pub fn new(db: DB, self_address: Address) -> Self { + Self { + coordinators: HashMap::new(), + participants: HashMap::new(), + session_progress: HashMap::new(), + excluded: HashMap::new(), + db, + self_address, + coordinator_config: CoordinatorConfig::default(), + participant_config: ParticipantConfig { self_address }, + } + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/participant.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/participant.rs new file mode 100644 index 00000000000..10973fc5b95 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/participant.rs @@ -0,0 +1,284 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::{RoastManager, actions, cache, session, types::RoastMessage}; +use crate::{ + engine::{ + prelude::{ParticipantEvent, RoastParticipant}, + storage::RoastStore, + }, + policy::{roast_session_id, select_roast_leader}, +}; +use anyhow::Result; +use ethexe_common::{ + Address, + crypto::{SignNoncePackage, SignSessionRequest}, + db::SignSessionState, +}; +use std::time::Instant; + +impl RoastManager +where + DB: RoastStore, +{ + /// Processes a sign request on the participant path. + pub fn process_sign_request( + &mut self, + from: Address, + request: SignSessionRequest, + ) -> Result> { + // Keep caches bounded for the target era. + cache::prune_caches_if_needed(&self.db, request.session.era); + + // Return cached aggregate when available. + if let Some(message) = cache::cached_signature_for_request(&self.db, &request) { + tracing::debug!( + era = request.session.era, + msg_hash = %request.msg_hash, + tweak_target = %request.tweak_target, + cache_hit = true, + "ROAST signature cache hit" + ); + return Ok(vec![message]); + } + tracing::debug!( + era = request.session.era, + msg_hash = %request.msg_hash, + tweak_target = %request.tweak_target, + cache_hit = false, + "ROAST signature cache miss" + ); + + let session_id = roast_session_id(request.msg_hash, request.session.era); + + if self.participants.contains_key(&session_id) { + return Ok(vec![]); + } + + // Drop stale attempts or conflicting leader requests. + if let Some(progress) = self.session_progress.get(&session_id) { + tracing::debug!( + era = request.session.era, + msg_hash = %request.msg_hash, + from = %from, + attempt = request.attempt, + progress_attempt = progress.attempt, + progress_leader = %progress.leader, + request_leader = %request.leader, + "ROAST sign request progress check" + ); + if request.attempt < progress.attempt { + return Ok(vec![]); + } + if request.attempt == progress.attempt && request.leader == progress.leader { + if progress.leader_request_seen && request.leader != self.self_address { + return Ok(vec![]); + } + if from != request.leader { + return Ok(vec![]); + } + } + } + + // Enforce deterministic participant ordering and leader election. + session::ensure_sorted_participants(&request)?; + let expected_leader = select_roast_leader( + &request.participants, + request.msg_hash, + request.session.era, + request.attempt, + ); + if expected_leader != request.leader { + return Err(anyhow::anyhow!("Unexpected leader for attempt")); + } + + if request.leader == self.self_address { + // If we are the leader, but the request came from elsewhere, restart locally. + if from != request.leader { + tracing::debug!( + era = request.session.era, + msg_hash = %request.msg_hash, + attempt = request.attempt, + "ROAST sign request restart as coordinator" + ); + return self.start_as_coordinator( + roast_session_id(request.msg_hash, request.session.era), + request.attempt, + request.tweak_target, + request.threshold, + request.participants, + ); + } + } else if from != request.leader { + // Track progress for visibility but do not participate. + let should_update = self + .session_progress + .get(&session_id) + .map(|progress| request.attempt >= progress.attempt) + .unwrap_or(true); + if should_update { + tracing::debug!( + era = request.session.era, + msg_hash = %request.msg_hash, + attempt = request.attempt, + leader = %request.leader, + "ROAST sign request observed from different peer; tracking progress" + ); + self.session_progress.insert( + session_id, + super::types::SessionProgress { + last_activity: Instant::now(), + attempt: request.attempt, + participants: request.participants, + threshold: request.threshold, + tweak_target: request.tweak_target, + leader: request.leader, + leader_request_seen: false, + }, + ); + } + return Ok(vec![]); + } + + // Load DKG material required to participate. + let Some(key_package) = self.db.dkg_key_package(request.session.era) else { + return Err(anyhow::Error::new( + crate::engine::roast::RoastErrorKind::MissingKeyPackage, + )); + }; + let Some(share) = self.db.dkg_share(request.session.era) else { + return Err(anyhow::Error::new( + crate::engine::roast::RoastErrorKind::MissingDkgShare, + )); + }; + + if *key_package.identifier() != share.identifier { + return Err(anyhow::Error::new( + crate::engine::roast::RoastErrorKind::KeyPackageIdentifierMismatch, + )); + } + if *key_package.min_signers() != share.threshold { + return Err(anyhow::Error::new( + crate::engine::roast::RoastErrorKind::KeyPackageThresholdMismatch, + )); + } + if share.threshold != request.threshold { + return Err(anyhow::anyhow!("Request threshold mismatch")); + } + // Check that our share index matches the participant list. + let expected_index = request + .participants + .iter() + .position(|addr| *addr == self.self_address) + .and_then(|idx| idx.checked_add(1)) + .and_then(|idx| u16::try_from(idx).ok()) + .ok_or_else(|| anyhow::anyhow!("Self not in participants list"))?; + if share.index != expected_index { + return Err(anyhow::Error::new( + crate::engine::roast::RoastErrorKind::DkgShareIndexMismatch, + )); + } + + // Build identifier map (from DKG state when available). + let identifiers = + session::identifiers_for_session(&self.db, request.session.era, &request.participants)?; + // Consume one pre-generated nonce if available. + let (pre_nonce, remaining_cache) = self + .db + .pre_nonce_cache(request.session.era, request.tweak_target) + .map_or((None, None), |mut cache| { + let pre_nonce = cache.pop(); + (pre_nonce, Some(cache)) + }); + tracing::debug!( + era = request.session.era, + tweak_target = %request.tweak_target, + cache_hit = pre_nonce.is_some(), + "ROAST pre-nonce cache lookup" + ); + if let Some(cache) = remaining_cache { + self.db + .set_pre_nonce_cache(request.session.era, request.tweak_target, cache); + } + let attempt = request.attempt; + let threshold = request.threshold; + let tweak_target = request.tweak_target; + let leader = request.leader; + let participants = request.participants.clone(); + + // Ensure sign session state exists for coordinator recovery. + if self + .db + .sign_session_state(request.msg_hash, request.session.era) + .is_none() + { + self.db.set_sign_session_state( + request.msg_hash, + request.session.era, + SignSessionState { + request: Some(request.clone()), + nonce_commits: vec![], + sign_shares: vec![], + aggregate: None, + completed: false, + }, + ); + } + + let mut participant = RoastParticipant::new(self.participant_config.clone()); + let actions = participant.process_event(ParticipantEvent::SignRequest { + request, + key_package: Box::new(key_package), + identifiers, + pre_nonce, + })?; + + self.participants.insert(session_id, participant); + self.session_progress.insert( + session_id, + super::types::SessionProgress { + last_activity: Instant::now(), + attempt, + participants, + threshold, + tweak_target, + leader, + leader_request_seen: true, + }, + ); + + actions::participant_actions_to_outbound(actions) + } + + /// Processes a signing package from the coordinator (participant). + pub fn process_nonce_package( + &mut self, + package: SignNoncePackage, + ) -> Result> { + let session_id = roast_session_id(package.msg_hash, package.session.era); + + if let Some(participant) = self.participants.get_mut(&session_id) { + let actions = participant.process_event(ParticipantEvent::SigningPackage(package))?; + if let Some(progress) = self.session_progress.get_mut(&session_id) { + progress.last_activity = Instant::now(); + } + return actions::participant_actions_to_outbound(actions); + } + Ok(vec![]) + } +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/session.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/session.rs new file mode 100644 index 00000000000..cb492e6f65d --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/session.rs @@ -0,0 +1,63 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use crate::{engine::storage::RoastStore, policy::dkg_session_id}; +use ethexe_common::{ + Address, + crypto::{DkgIdentifier, SignSessionRequest}, +}; +use std::collections::BTreeMap; + +/// Ensures participants are sorted for deterministic leader selection. +pub(super) fn ensure_sorted_participants(request: &SignSessionRequest) -> anyhow::Result<()> { + // Deterministic ordering is required for leader selection and indices. + if !request.participants.is_sorted() { + return Err(anyhow::anyhow!("Participants list must be sorted")); + } + Ok(()) +} + +/// Returns the address -> identifier map for a signing session. +pub(super) fn identifiers_for_session( + db: &DB, + era: u64, + participants: &[Address], +) -> anyhow::Result> { + // Prefer persisted identifier map from DKG session state when available. + if let Some(state) = db.dkg_session_state(dkg_session_id(era)) + && !state.identifier_map.is_empty() + { + let map: BTreeMap = state.identifier_map.into_iter().collect(); + if participants.iter().all(|addr| map.contains_key(addr)) { + return Ok(map); + } + return Err(anyhow::anyhow!("Missing identifiers for some participants")); + } + + // Fallback: derive identifiers from sorted participant addresses. + let mut sorted = participants.to_vec(); + sorted.sort(); + sorted + .iter() + .map(|addr| { + let identifier = DkgIdentifier::derive(addr.as_ref()) + .map_err(|_| anyhow::anyhow!("Failed to derive identifier"))?; + Ok((*addr, identifier)) + }) + .collect::>>() +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/manager/types.rs b/ethexe/dkg-roast/src/engine/roast/storage/manager/types.rs new file mode 100644 index 00000000000..d20c35bf54d --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/manager/types.rs @@ -0,0 +1,51 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use ethexe_common::{ + Address, + crypto::{ + SignAggregate, SignCulprits, SignNonceCommit, SignNoncePackage, SignSessionRequest, + SignShare, + }, +}; +use gprimitives::ActorId; +use std::time::Instant; + +#[derive(Debug)] +pub(super) struct SessionProgress { + pub(super) last_activity: Instant, + pub(super) attempt: u32, + pub(super) participants: Vec
, + pub(super) threshold: u16, + pub(super) tweak_target: ActorId, + pub(super) leader: Address, + pub(super) leader_request_seen: bool, +} + +pub(super) const ROAST_CACHE_KEEP_ERAS: u64 = 3; + +/// Outbound ROAST messages produced by manager/coordinator. +#[derive(Debug, Clone)] +pub enum RoastMessage { + SignSessionRequest(SignSessionRequest), + SignNonceCommit(SignNonceCommit), + SignNoncePackage(SignNoncePackage), + SignShare(SignShare), + SignAggregate(SignAggregate), + SignCulprits(SignCulprits), +} diff --git a/ethexe/dkg-roast/src/engine/roast/storage/mod.rs b/ethexe/dkg-roast/src/engine/roast/storage/mod.rs new file mode 100644 index 00000000000..64adfbca324 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/roast/storage/mod.rs @@ -0,0 +1,23 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +mod coordinator; +mod manager; + +pub use coordinator::{CoordinatorAction, CoordinatorConfig, CoordinatorEvent, RoastCoordinator}; +pub use manager::{RoastManager, RoastMessage}; diff --git a/ethexe/dkg-roast/src/engine/storage.rs b/ethexe/dkg-roast/src/engine/storage.rs new file mode 100644 index 00000000000..1df906a8006 --- /dev/null +++ b/ethexe/dkg-roast/src/engine/storage.rs @@ -0,0 +1,36 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use ethexe_common::db::{DkgStorageRO, DkgStorageRW, SignStorageRO, SignStorageRW}; +use ethexe_db::Database; + +/// Storage bound required by the DKG engine. +pub trait DkgStore: DkgStorageRO + DkgStorageRW + Clone {} + +impl DkgStore for Database {} + +/// Storage bound required by the ROAST engine (DKG + sign session state). +pub trait RoastStore: DkgStorageRO + SignStorageRO + SignStorageRW + Clone { + fn prune_roast_caches_before(&self, min_era: u64) -> (usize, usize); +} + +impl RoastStore for Database { + fn prune_roast_caches_before(&self, min_era: u64) -> (usize, usize) { + self.prune_roast_caches_before(min_era) + } +} diff --git a/ethexe/dkg-roast/src/lib.rs b/ethexe/dkg-roast/src/lib.rs new file mode 100644 index 00000000000..1a9bbbf26bf --- /dev/null +++ b/ethexe/dkg-roast/src/lib.rs @@ -0,0 +1,25 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! DKG/ROAST engines and policy utilities extracted from consensus. + +pub mod engine; +pub mod policy; + +// Re-export for compatibility with previous `ethexe-consensus` layout. +pub use engine::{dkg, roast}; diff --git a/ethexe/dkg-roast/src/policy.rs b/ethexe/dkg-roast/src/policy.rs new file mode 100644 index 00000000000..5ed86fb1f9c --- /dev/null +++ b/ethexe/dkg-roast/src/policy.rs @@ -0,0 +1,330 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use ethexe_common::{ + Address, + crypto::{DkgSessionId, SignSessionRequest}, + db::SignSessionState, +}; +use gprimitives::H256; +use std::{ + collections::BTreeSet, + time::{Duration, Instant}, +}; + +/// Lightweight identifier for ROAST sessions (era + message hash). +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub(crate) struct RoastSessionId { + pub msg_hash: H256, + pub era: u64, +} + +/// Builds a ROAST session id from message hash and era. +pub(crate) fn roast_session_id(msg_hash: H256, era: u64) -> RoastSessionId { + RoastSessionId { msg_hash, era } +} + +/// Builds the DKG session id for an era. +pub(crate) fn dkg_session_id(era: u64) -> DkgSessionId { + DkgSessionId { era } +} + +/// Deterministically selects a ROAST leader for the given attempt. +pub fn select_roast_leader( + participants: &[Address], + msg_hash: H256, + era: u64, + attempt: u32, +) -> Address { + let mut participants = participants.to_vec(); + participants.sort(); + let mut leader = ethexe_common::crypto::frost::elect_leader(&participants, &msg_hash, era); + for _ in 0..attempt { + leader = ethexe_common::crypto::frost::next_leader(leader, &participants); + } + leader +} + +/// Retry plan containing the next leader and participant set. +#[derive(Debug, Clone)] +pub(crate) struct RoastRetryPlan { + pub attempt: u32, + pub leader: Address, + pub participants: Vec
, +} + +/// Timeout stage used to identify missing signers. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub(crate) enum RoastTimeoutStage { + Nonce, + Partial, +} + +/// Builds a retry plan for a session, excluding missing signers. +pub(crate) fn build_roast_retry_plan( + session_id: RoastSessionId, + current_attempt: u32, + participants: &[Address], + threshold: u16, + excluded: Option<&BTreeSet
>, +) -> Option { + let next_attempt = current_attempt.saturating_add(1); + let mut participants = participants.to_vec(); + if let Some(excluded) = excluded { + // Remove excluded signers from the retry set. + participants.retain(|addr| !excluded.contains(addr)); + } + // Abort retries if threshold is no longer achievable. + if participants.len() < threshold as usize { + return None; + } + let leader = select_roast_leader( + &participants, + session_id.msg_hash, + session_id.era, + next_attempt, + ); + Some(RoastRetryPlan { + attempt: next_attempt, + leader, + participants, + }) +} + +/// Returns the set of signers missing for the given timeout stage. +pub(crate) fn missing_signers_after_timeout( + stage: RoastTimeoutStage, + request: &SignSessionRequest, + state: &SignSessionState, +) -> BTreeSet
{ + let mut missing = BTreeSet::new(); + match stage { + RoastTimeoutStage::Nonce => { + for addr in &request.participants { + if !state + .nonce_commits + .iter() + .any(|commit| &commit.from == addr) + { + missing.insert(*addr); + } + } + } + RoastTimeoutStage::Partial => { + for addr in &request.participants { + if !state.sign_shares.iter().any(|share| &share.from == addr) { + missing.insert(*addr); + } + } + } + } + missing +} + +/// Maps timeout error strings to timeout stages. +pub(crate) fn roast_timeout_stage_from_reason(reason: &str) -> Option { + if reason.contains("Nonce") { + Some(RoastTimeoutStage::Nonce) + } else if reason.contains("Partial") { + Some(RoastTimeoutStage::Partial) + } else { + None + } +} + +/// Infers timeout stage from persisted session state. +pub(crate) fn roast_timeout_stage_from_state( + state: Option<&SignSessionState>, +) -> RoastTimeoutStage { + if state.is_some_and(|state| !state.sign_shares.is_empty()) { + RoastTimeoutStage::Partial + } else { + RoastTimeoutStage::Nonce + } +} + +/// Returns the duration for a timeout stage. +pub(crate) fn roast_timeout_duration( + stage: RoastTimeoutStage, + nonce_timeout: Duration, + partial_timeout: Duration, +) -> Duration { + match stage { + RoastTimeoutStage::Nonce => nonce_timeout, + RoastTimeoutStage::Partial => partial_timeout, + } +} + +/// Returns Some(duration) if the timeout has elapsed. +pub(crate) fn roast_timeout_elapsed( + now: Instant, + last_activity: Instant, + stage: RoastTimeoutStage, + nonce_timeout: Duration, + partial_timeout: Duration, +) -> Option { + let timeout = roast_timeout_duration(stage, nonce_timeout, partial_timeout); + if now.duration_since(last_activity) >= timeout { + Some(timeout) + } else { + None + } +} + +/// Returns true if a ROAST request error should trigger DKG restart. +/// Returns true when a ROAST error warrants a retry/restart path. +pub fn is_recoverable_roast_request_error(err: &anyhow::Error) -> bool { + use crate::engine::roast::{RoastErrorExt, RoastErrorKind}; + + // Recoverable errors trigger a DKG restart to refresh key material. + matches!( + err.roast_error_kind(), + Some( + RoastErrorKind::MissingKeyPackage + | RoastErrorKind::MissingDkgShare + | RoastErrorKind::KeyPackageIdentifierMismatch + | RoastErrorKind::KeyPackageThresholdMismatch + | RoastErrorKind::DkgShareIndexMismatch + ) + ) +} + +/// Policy decision for DKG errors. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +/// High-level decision for DKG error handling. +pub enum DkgPolicyDecision { + Restart, + Ignore, +} + +/// Determines whether to restart DKG after an error. +/// Maps a DKG error into a policy decision. +pub fn dkg_error_policy(err: &anyhow::Error) -> DkgPolicyDecision { + use crate::engine::dkg::{DkgErrorExt, DkgErrorKind}; + + match err.dkg_error_kind() { + Some(DkgErrorKind::AlreadyInProgress) => DkgPolicyDecision::Ignore, + _ => DkgPolicyDecision::Restart, + } +} + +#[cfg(test)] +mod tests { + use super::*; + use ethexe_common::crypto::SignShare; + + fn sample_share() -> SignShare { + SignShare { + session: DkgSessionId { era: 1 }, + from: Address([1u8; 20]), + msg_hash: H256::zero(), + partial_sig: Vec::new(), + next_commitments: Vec::new(), + } + } + + #[test] + fn roast_timeout_stage_from_reason_matches_expected() { + assert_eq!( + roast_timeout_stage_from_reason("Nonce timeout"), + Some(RoastTimeoutStage::Nonce) + ); + assert_eq!( + roast_timeout_stage_from_reason("Partial timeout"), + Some(RoastTimeoutStage::Partial) + ); + assert_eq!(roast_timeout_stage_from_reason("Other"), None); + } + + #[test] + fn roast_timeout_stage_from_state_prefers_partial_after_shares() { + let empty_state = SignSessionState::default(); + assert_eq!( + roast_timeout_stage_from_state(Some(&empty_state)), + RoastTimeoutStage::Nonce + ); + + let mut with_shares = SignSessionState::default(); + with_shares.sign_shares.push(sample_share()); + assert_eq!( + roast_timeout_stage_from_state(Some(&with_shares)), + RoastTimeoutStage::Partial + ); + assert_eq!( + roast_timeout_stage_from_state(None), + RoastTimeoutStage::Nonce + ); + } + + #[test] + fn roast_timeout_elapsed_tracks_stage_deadlines() { + let now = Instant::now(); + let last_activity = now - Duration::from_secs(5); + let nonce_timeout = Duration::from_secs(2); + let partial_timeout = Duration::from_secs(10); + + let elapsed = roast_timeout_elapsed( + now, + last_activity, + RoastTimeoutStage::Nonce, + nonce_timeout, + partial_timeout, + ); + assert_eq!(elapsed, Some(nonce_timeout)); + + let not_elapsed = roast_timeout_elapsed( + now, + last_activity, + RoastTimeoutStage::Partial, + nonce_timeout, + partial_timeout, + ); + assert_eq!(not_elapsed, None); + } + + #[test] + fn build_roast_retry_plan_filters_excluded_and_bumps_attempt() { + let session_id = RoastSessionId { + msg_hash: H256::zero(), + era: 7, + }; + let participants = vec![Address([1u8; 20]), Address([2u8; 20]), Address([3u8; 20])]; + let mut excluded = BTreeSet::new(); + excluded.insert(Address([2u8; 20])); + + let plan = + build_roast_retry_plan(session_id, 0, &participants, 2, Some(&excluded)).unwrap(); + assert_eq!(plan.attempt, 1); + assert_eq!(plan.participants.len(), 2); + assert!(!plan.participants.contains(&Address([2u8; 20]))); + } + + #[test] + fn build_roast_retry_plan_returns_none_when_below_threshold() { + let session_id = RoastSessionId { + msg_hash: H256::zero(), + era: 7, + }; + let participants = vec![Address([1u8; 20]), Address([2u8; 20])]; + let mut excluded = BTreeSet::new(); + excluded.insert(Address([2u8; 20])); + + let plan = build_roast_retry_plan(session_id, 0, &participants, 2, Some(&excluded)); + assert!(plan.is_none()); + } +} diff --git a/ethexe/ethereum/Cargo.toml b/ethexe/ethereum/Cargo.toml index e6a31a66619..0a81ebdff0e 100644 --- a/ethexe/ethereum/Cargo.toml +++ b/ethexe/ethereum/Cargo.toml @@ -35,7 +35,6 @@ roast-secp256k1-evm.workspace = true serde.workspace = true nonempty.workspace = true rand.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] alloy = { workspace = true, features = [ diff --git a/ethexe/ethereum/Middleware.json b/ethexe/ethereum/Middleware.json index 7bdebd48f8a..1f7c1d999bb 100644 --- a/ethexe/ethereum/Middleware.json +++ b/ethexe/ethereum/Middleware.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowedVaultImplVersion","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"changeSlashExecutor","inputs":[{"name":"newRole","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"changeSlashRequester","inputs":[{"name":"newRole","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"collateral","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"disableOperator","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"disableVault","inputs":[{"name":"vault","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"distributeOperatorRewards","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"distributeStakerRewards","inputs":[{"name":"_commitment","type":"tuple","internalType":"struct Gear.StakerRewardsCommitment","components":[{"name":"distribution","type":"tuple[]","internalType":"struct Gear.StakerRewards[]","components":[{"name":"vault","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"totalAmount","type":"uint256","internalType":"uint256"},{"name":"token","type":"address","internalType":"address"}]},{"name":"timestamp","type":"uint48","internalType":"uint48"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"enableOperator","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"enableVault","inputs":[{"name":"vault","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"eraDuration","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"executeSlash","inputs":[{"name":"slashes","type":"tuple[]","internalType":"struct IMiddleware.SlashIdentifier[]","components":[{"name":"vault","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getActiveOperatorsStakeAt","inputs":[{"name":"ts","type":"uint48","internalType":"uint48"}],"outputs":[{"name":"activeOperators","type":"address[]","internalType":"address[]"},{"name":"stakes","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getOperatorStakeAt","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"ts","type":"uint48","internalType":"uint48"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_params","type":"tuple","internalType":"struct IMiddleware.InitParams","components":[{"name":"owner","type":"address","internalType":"address"},{"name":"eraDuration","type":"uint48","internalType":"uint48"},{"name":"minVaultEpochDuration","type":"uint48","internalType":"uint48"},{"name":"operatorGracePeriod","type":"uint48","internalType":"uint48"},{"name":"vaultGracePeriod","type":"uint48","internalType":"uint48"},{"name":"minVetoDuration","type":"uint48","internalType":"uint48"},{"name":"minSlashExecutionDelay","type":"uint48","internalType":"uint48"},{"name":"allowedVaultImplVersion","type":"uint64","internalType":"uint64"},{"name":"vetoSlasherImplType","type":"uint64","internalType":"uint64"},{"name":"maxResolverSetEpochsDelay","type":"uint256","internalType":"uint256"},{"name":"maxAdminFee","type":"uint256","internalType":"uint256"},{"name":"collateral","type":"address","internalType":"address"},{"name":"router","type":"address","internalType":"address"},{"name":"symbiotic","type":"tuple","internalType":"struct Gear.SymbioticContracts","components":[{"name":"vaultRegistry","type":"address","internalType":"address"},{"name":"operatorRegistry","type":"address","internalType":"address"},{"name":"networkRegistry","type":"address","internalType":"address"},{"name":"middlewareService","type":"address","internalType":"address"},{"name":"networkOptIn","type":"address","internalType":"address"},{"name":"stakerRewardsFactory","type":"address","internalType":"address"},{"name":"operatorRewards","type":"address","internalType":"address"},{"name":"roleSlashRequester","type":"address","internalType":"address"},{"name":"roleSlashExecutor","type":"address","internalType":"address"},{"name":"vetoResolver","type":"address","internalType":"address"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"makeElectionAt","inputs":[{"name":"ts","type":"uint48","internalType":"uint48"},{"name":"maxValidators","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"maxAdminFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxResolverSetEpochsDelay","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"minSlashExecutionDelay","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"minVaultEpochDuration","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"minVetoDuration","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"operatorGracePeriod","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"registerOperator","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerVault","inputs":[{"name":"_vault","type":"address","internalType":"address"},{"name":"_rewards","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestSlash","inputs":[{"name":"data","type":"tuple[]","internalType":"struct IMiddleware.SlashData[]","components":[{"name":"operator","type":"address","internalType":"address"},{"name":"ts","type":"uint48","internalType":"uint48"},{"name":"vaults","type":"tuple[]","internalType":"struct IMiddleware.VaultSlashData[]","components":[{"name":"vault","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"subnetwork","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"symbioticContracts","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.SymbioticContracts","components":[{"name":"vaultRegistry","type":"address","internalType":"address"},{"name":"operatorRegistry","type":"address","internalType":"address"},{"name":"networkRegistry","type":"address","internalType":"address"},{"name":"middlewareService","type":"address","internalType":"address"},{"name":"networkOptIn","type":"address","internalType":"address"},{"name":"stakerRewardsFactory","type":"address","internalType":"address"},{"name":"operatorRewards","type":"address","internalType":"address"},{"name":"roleSlashRequester","type":"address","internalType":"address"},{"name":"roleSlashExecutor","type":"address","internalType":"address"},{"name":"vetoResolver","type":"address","internalType":"address"}]}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unregisterOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unregisterVault","inputs":[{"name":"vault","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"vaultGracePeriod","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"vetoSlasherImplType","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AlreadyAdded","inputs":[]},{"type":"error","name":"AlreadyEnabled","inputs":[]},{"type":"error","name":"BurnerHookNotSupported","inputs":[]},{"type":"error","name":"DelegatorNotInitialized","inputs":[]},{"type":"error","name":"EnumerableMapNonexistentKey","inputs":[{"name":"key","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"IncompatibleSlasherType","inputs":[]},{"type":"error","name":"IncompatibleStakerRewardsVersion","inputs":[]},{"type":"error","name":"IncompatibleVaultVersion","inputs":[]},{"type":"error","name":"IncorrectTimestamp","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidStakerRewardsVault","inputs":[]},{"type":"error","name":"NonFactoryStakerRewards","inputs":[]},{"type":"error","name":"NonFactoryVault","inputs":[]},{"type":"error","name":"NotEnabled","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"NotRegisteredOperator","inputs":[]},{"type":"error","name":"NotRegisteredVault","inputs":[]},{"type":"error","name":"NotRouter","inputs":[]},{"type":"error","name":"NotSlashExecutor","inputs":[]},{"type":"error","name":"NotSlashRequester","inputs":[]},{"type":"error","name":"NotVaultOwner","inputs":[]},{"type":"error","name":"OperatorDoesNotExist","inputs":[]},{"type":"error","name":"OperatorDoesNotOptIn","inputs":[]},{"type":"error","name":"OperatorGracePeriodNotPassed","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"ResolverMismatch","inputs":[]},{"type":"error","name":"ResolverSetDelayTooLong","inputs":[]},{"type":"error","name":"SafeCastOverflowedUintDowncast","inputs":[{"name":"bits","type":"uint8","internalType":"uint8"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SlasherNotInitialized","inputs":[]},{"type":"error","name":"UnknownCollateral","inputs":[]},{"type":"error","name":"UnsupportedBurner","inputs":[]},{"type":"error","name":"UnsupportedDelegatorHook","inputs":[]},{"type":"error","name":"VaultGracePeriodNotPassed","inputs":[]},{"type":"error","name":"VaultWrongEpochDuration","inputs":[]},{"type":"error","name":"VetoDurationTooLong","inputs":[]},{"type":"error","name":"VetoDurationTooShort","inputs":[]}],"bytecode":{"object":"0x6080806040523460aa575f516020613c925f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b604051613be390816100af8239f35b6001600160401b0319166001600160401b039081175f516020613c925f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c806305c4fdf9146124855780630a71094c146121dd5780632633b70f146121295780632acde09814611fd1578063373bba1f14611f9b5780633ccce78914611f5e5780633d15e74e14611f315780634455a38f14611efe578063461e7a8e14611ec85780636c2eb35014611a6f5780636d1064eb14611a025780636e5c7932146119c1578063709d06ae1461198b578063715018a614611922578063729e2f361461180457806379a8b245146117ce5780637fbe95b51461140b57806386c241a1146113ad5780638da5cb5b14611378578063936f43301461133b578063945cf2dd1461130557806396115bc2146112395780639e0323111461120b578063ab122753146107db578063af962995146105c8578063b5e5ad121461054f578063bcf339341461037f578063c639e2d614610351578063c9b0b1e91461031a578063ceebb69a146102ec578063d55a5bdf146102b2578063d8dfeb4514610279578063d99ddfc71461023b578063d99fcd661461020e578063f2fde38b146101e15763f887ea40146101a6575f80fd5b346101de57806003193601126101de575f516020613ba35f395f51905f5254600701546040516001600160a01b039091168152602090f35b80fd5b50346101de5760203660031901126101de5761020b6101fe612e1b565b610206613699565b613472565b80f35b50346101de57806003193601126101de5761020b60125f516020613ba35f395f51905f5254013390613593565b50346101de5760403660031901126101de57602061027161025a612e1b565b610262612e5a565b9061026c8261371d565b61342f565b604051908152f35b50346101de57806003193601126101de575f516020613ba35f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346101de57806003193601126101de5760206001600160401b0360035f516020613ba35f395f51905f5254015460401c16604051908152f35b50346101de57806003193601126101de57602060045f516020613ba35f395f51905f52540154604051908152f35b50346101de57806003193601126101de5760206001600160401b0360035f516020613ba35f395f51905f5254015416604051908152f35b50346101de57806003193601126101de57602060055f516020613ba35f395f51905f52540154604051908152f35b50346101de57806003193601126101de5761012060405161039f81612eab565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015201526101405f516020613ba35f395f51905f52546040516103f381612eab565b60018060a01b036008830154169182825260018060a01b036009820154166020830190815260018060a01b03600a830154166040840190815260018060a01b03600b840154166060850190815260018060a01b03600c850154166080860190815260018060a01b03600d860154169160a0870192835260018060a01b03600e870154169360c0880194855260018060a01b03600f880154169560e0890196875261012060018060a01b0360108a015416986101008b01998a52601160018060a01b03910154169901988952604051998a5260018060a01b0390511660208a015260018060a01b03905116604089015260018060a01b03905116606088015260018060a01b03905116608087015260018060a01b0390511660a086015260018060a01b0390511660c085015260018060a01b0390511660e084015260018060a01b0390511661010083015260018060a01b03905116610120820152f35b50346101de5760203660031901126101de5761058b90610575610570612e45565b61330e565b9091604051938493604085526040850190612e6f565b8381036020850152602080845192838152019301915b8181106105af575050500390f35b82518452859450602093840193909201916001016105a1565b50346101de5760203660031901126101de576004356001600160401b0381116107d757366023820112156107d75780600401356001600160401b0381116107d3576024820191602436918360061b0101116107d3575f516020613ba35f395f51905f5254601001546001600160a01b031633036107c4576020905f90845b818110610651578580f35b61065c818387612f8a565b5f516020613ba35f395f51905f525490919061069b906015016001600160a01b0361068685612f41565b16906001915f520160205260405f2054151590565b156107b5576004856001600160a01b036106b485612f41565b166040519283809263b134427160e01b82525afa9283156107aa576107229387928a9161077d575b50828a604051936106ed8386612edb565b81855289368487013760405197889586948593635ca61c3760e11b855201356004840152604060248401526044830190612fdc565b03926001600160a01b03165af191821561077257600192610745575b5001610646565b61076490863d881161076b575b61075c8183612edb565b810190612fcd565b505f61073e565b503d610752565b6040513d89823e3d90fd5b61079d9150833d85116107a3575b6107958183612edb565b810190612fae565b5f6106dc565b503d61078b565b6040513d8a823e3d90fd5b633b2fc1c360e21b8752600487fd5b632249f71f60e21b8352600483fd5b8280fd5b5080fd5b50346101de576102e03660031901126101de575f516020613bc35f395f51905f52546001600160401b0360ff8260401c1615911680159081611203575b60011490816111f9575b1590816111f0575b506111e1578060016001600160401b03195f516020613bc35f395f51905f525416175f516020613bc35f395f51905f52556111b1575b6004356001600160a01b03811681036107d3576108879061087f6139c3565b6102066139c3565b61088f6139c3565b604090815161089e8382612edb565b601f815260208101907f6d6964646c65776172652e73746f726167652e4d6964646c657761726556310082526108d2613699565b5190205f19810190811161119d5782519060208201908152602082526108f88483612edb565b60ff199151902016805f516020613ba35f395f51905f525560243565ffffffffffff8116810361119957815465ffffffffffff191665ffffffffffff91821617825560443590811681036111995781546bffffffffffff000000000000191660309190911b65ffffffffffff60301b1617815560643565ffffffffffff8116810361119957815465ffffffffffff60601b191660609190911b65ffffffffffff60601b1617815560843565ffffffffffff8116810361119957815465ffffffffffff60901b191660909190911b65ffffffffffff60901b1617815560a43565ffffffffffff8116810361119957815465ffffffffffff60c01b191660c09190911b65ffffffffffff60c01b1617815560c43565ffffffffffff811681036111995765ffffffffffff60018301911665ffffffffffff19825416178155600282019161012435835560e4356001600160401b0381168103611191576001600160401b036003830191166001600160401b0319825416178155610104356001600160401b03811681036111955781546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16179055610164356001600160a01b0381168103611191576006820180546001600160a01b0319166001600160a01b039283161790553060601b6004830155610144356005830155610184359081168103611191576007820180546001600160a01b0319166001600160a01b039283161790556101a4359081168103611191576008820180546001600160a01b0319166001600160a01b039283161790556101c4359081168103611191576009820180546001600160a01b0319166001600160a01b03909216919091179055610b7e612f13565b600a820180546001600160a01b0319166001600160a01b03909216919091179055610ba7612f2a565b600b820180546001600160a01b0319166001600160a01b0392831617905561022435908116810361119157600c820180546001600160a01b0319166001600160a01b0392831617905561024435908116810361119157600d820180546001600160a01b0319166001600160a01b0392831617905561026435908116810361119157600e820180546001600160a01b0319166001600160a01b0392831617905561028435908116810361119157600f820180546001600160a01b0319166001600160a01b039283161790556102a4359081168103611191576010820180546001600160a01b0319166001600160a01b039283161790556102c4359081168103611191576011820180546001600160a01b0319166001600160a01b039283161790558690610cd1612f13565b16803b156107d75781809160048951809481936387140b5b60e01b83525af180156111725761117c575b506001600160a01b03610d0c612f2a565b16803b156107d757818091602489518094819363b7d8e1a960e01b83523060048401525af1801561117257611159575b5050549065ffffffffffff8216156111155765ffffffffffff8260301c16918060011b6601fffffffffffe65fffffffffffe8216911681036111015783106110a0578265ffffffffffff8260601c161061102a578265ffffffffffff8260901c1610610fc05760c01c65ffffffffffff16908115610f7c575465ffffffffffff16908115610f275765ffffffffffff91610dd591613000565b1611610e97576003905410610e3e57610dec575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f516020613bc35f395f51905f5254165f516020613bc35f395f51905f52555160018152a180f35b815162461bcd60e51b815260206004820152602c60248201527f5265736f6c766572207365742065706f6368732064656c6179206d757374206260448201526b65206174206c65617374203360a01b6064820152608490fd5b825162461bcd60e51b815260206004820152605f60248201527f5665746f206475726174696f6e20616e6420736c61736820657865637574696f60448201527f6e2064656c6179206d757374206265206c657373207468616e206f722065717560648201527f616c20746f206d696e207661756c74732065706f6368206475726174696f6e00608482015260a490fd5b855162461bcd60e51b815260206004820152602860248201527f4d696e20736c61736820657865637574696f6e2064656c61792063616e6e6f74604482015267206265207a65726f60c01b6064820152608490fd5b855162461bcd60e51b815260206004820152601c60248201527f5665746f206475726174696f6e2063616e6e6f74206265207a65726f000000006044820152606490fd5b855162461bcd60e51b815260206004820152602481018790527f5661756c7420677261636520706572696f64206d75737420626520626967676560448201527f72207468616e206d696e207661756c74732065706f6368206475726174696f6e6064820152608490fd5b855162461bcd60e51b815260206004820152604360248201527f4f70657261746f7220677261636520706572696f64206d75737420626520626960448201527f67676572207468616e206d696e207661756c74732065706f636820647572617460648201526234b7b760e91b608482015260a490fd5b855162461bcd60e51b815260206004820152603460248201527f4d696e207661756c74732065706f6368206475726174696f6e206d75737420626044820152736520626967676572207468616e2032206572617360601b6064820152608490fd5b634e487b7160e01b88526011600452602488fd5b845162461bcd60e51b815260206004820152601b60248201527f457261206475726174696f6e2063616e6e6f74206265207a65726f00000000006044820152606490fd5b8161116391612edb565b61116e57855f610d3c565b8580fd5b87513d84823e3d90fd5b8161118691612edb565b61116e57855f610cfb565b8680fd5b8780fd5b8480fd5b634e487b7160e01b84526011600452602484fd5b600160401b60ff60401b195f516020613bc35f395f51905f525416175f516020613bc35f395f51905f5255610860565b63f92ee8a960e01b8252600482fd5b9050155f61082a565b303b159150610822565b829150610818565b50346101de57806003193601126101de57602060025f516020613ba35f395f51905f52540154604051908152f35b50346101de5760203660031901126101de57611253612e1b565b5f516020613ba35f395f51905f52546001600160a01b0390911690601281019061129d61128084846139ee565b65ffffffffffff81169165ffffffffffff8260301c169160601c90565b5065ffffffffffff81161592915082156112d5575b50506112c657906112c2916139a9565b5080f35b63f1c9810160e01b8352600483fd5b65ffffffffffff9192506112fa8291826112ee4261397a565b955460601c1690613000565b169116105f806112b2565b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460301c16604051908152f35b50346101de5760203660031901126101de5761020b611358612e1b565b611361816134e3565b60155f516020613ba35f395f51905f52540161361d565b50346101de57806003193601126101de575f516020613b835f395f51905f52546040516001600160a01b039091168152602090f35b50346101de5760203660031901126101de576113c7612e1b565b5f516020613ba35f395f51905f525460100180549091906001600160a01b031633036107c45781546001600160a01b0319166001600160a01b039190911617905580f35b50346101de5760403660031901126101de576004356001600160401b0381116107d757606060031982360301126107d757604051606081018181106001600160401b038211176117ba5760405281600401356001600160401b0381116117b6578201366023820112156117b657600481013561148681612efc565b916114946040519384612edb565b818352602060048185019360061b830101019036821161119157602401915b8183106117585750505081526114d6604460208301936024810135855201612e31565b90604081019182526114e6612e5a565b935f516020613ba35f395f51905f525490600782019460018060a01b03865416330361174957845160068401546001600160a01b0391821691160361173a57819594939550606093829565ffffffffffff60056015870196019916926020965b895180518a10156116f3578961155b9161304a565b5180516001600160a01b03165f908152600189016020526040902054156107b557908b91866116148b6116068b6115f46115a38f6112809060018060a01b038a5116906139ee565b9a546040516001600160a01b03909c169b925090506115c28683612edb565b838252604051936115d38786612edb565b845260405197889687015260408601526080606086015260a0850190612fdc565b838103601f1901608085015290612fdc565b03601f198101835282612edb565b85548751838d0180519096909290916001600160a01b039081169116823b156116ef57908c809493926116746040519788968795869463239723ed60e01b8652600486015260248501526044840152608060648401526084830190612fdc565b03925af180156116e4579089916116cf575b5050916116c791600193519151604051926bffffffffffffffffffffffff199060601b168c8401526034830152603482526116c2605483612edb565b6132ce565b980197611546565b816116d991612edb565b61119557875f611686565b6040513d8b823e3d90fd5b8c80fd5b8861172c86848651915160405192858401526bffffffffffffffffffffffff199060601b166040830152603482526116c2605483612edb565b818151910120604051908152f35b63039a1fd760e21b8252600482fd5b639165520160e01b8252600482fd5b60408336031261119157604051604081018181106001600160401b038211176117a25791602091604093845261178d86612e31565b815282860135838201528152019201916114b3565b634e487b7160e01b89526041600452602489fd5b8380fd5b634e487b7160e01b84526041600452602484fd5b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460901c16604051908152f35b50346101de5760603660031901126101de5761181e612e1b565b5f516020613ba35f395f51905f5254600781015460243592604435926001600160a01b0390921691338390036119135760068101546001600160a01b039283169216820361190457600e01546001600160a01b031691859190833b156107d3576084908360405195869485936348a78da760e01b8552600485015260248401528860448401528760648401525af180156118f9576118e4575b60208383604051908382019283526040820152604081526118d9606082612edb565b519020604051908152f35b6118ef848092612edb565b6107d357826118b7565b6040513d86823e3d90fd5b63039a1fd760e21b8652600486fd5b639165520160e01b8652600486fd5b50346101de57806003193601126101de5761193b613699565b5f516020613b835f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460601c16604051908152f35b50346101de5760403660031901126101de576119fe6119ea6119e1612e45565b6024359061306b565b604051918291602083526020830190612e6f565b0390f35b50346101de5760203660031901126101de57611a1c612e1b565b5f516020613ba35f395f51905f5254600f0180549091906001600160a01b03163303611a605781546001600160a01b0319166001600160a01b039190911617905580f35b633fdc220360e01b8352600483fd5b50346101de57806003193601126101de57611a88613699565b5f516020613bc35f395f51905f525460ff8160401c16908115611eb3575b50611ea4575f516020613bc35f395f51905f52805468ffffffffffffffffff1916680100000000000000021790555f516020613b835f395f51905f5254611af8906001600160a01b031661087f6139c3565b5f516020613ba35f395f51905f525460408051611b158282612edb565b601f815260208101907f6d6964646c65776172652e73746f726167652e4d6964646c65776172655632008252611b49613699565b5190205f19810190811161119d578151906020820190815260208252611b6f8383612edb565b9051902060ff19165f516020613ba35f395f51905f528190558254815465ffffffffffff90911665ffffffffffff19821681178355845465ffffffffffff60301b166001600160601b031990921617178155908254825465ffffffffffff60601b191665ffffffffffff60601b9091161782558254825465ffffffffffff60901b191665ffffffffffff60901b9091161782558254825465ffffffffffff60c01b191665ffffffffffff60c01b90911617825565ffffffffffff60018401541665ffffffffffff60018401911665ffffffffffff1982541617905560028301546002830155611ca2600384016001600160401b03808254169181600387019316821984541617835554841c1667ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b1916179055565b60068381015490830180546001600160a01b039283166001600160a01b031991821617909155600480860154908501556005808601549085015560078086015490850180549190931691161790556008808301908401848403611dbc575b50508392601281019260128101955b8454811015611d365780611d2f611d28600193886136cc565b908a6136fb565b5001611d0f565b50601590810192910184805b8254811015611d695780611d62611d5b600193866136cc565b90886136fb565b5001611d42565b507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260208460ff60401b195f516020613bc35f395f51905f5254165f516020613bc35f395f51905f52555160028152a180f35b5481546001600160a01b03199081166001600160a01b039283161790925560098581015490850180548416918316919091179055600a8086015490850180548416918316919091179055600b8086015490850180548416918316919091179055600c8086015490850180548416918316919091179055600d8086015490850180548416918316919091179055600e8086015490850180548416918316919091179055600f808601549085018054841691831691909117905560108086015490850180548416918316919091179055601180860154908501805490931691161790555f80611d00565b63f92ee8a960e01b8152600490fd5b600291506001600160401b031610155f611aa6565b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460c01c16604051908152f35b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545416604051908152f35b50346101de57806003193601126101de5761020b60125f516020613ba35f395f51905f525401339061361d565b50346101de5760203660031901126101de5761020b611f7b612e1b565b611f84816134e3565b60155f516020613ba35f395f51905f525401613593565b50346101de57806003193601126101de57602065ffffffffffff60015f516020613ba35f395f51905f5254015416604051908152f35b50346101de57806003193601126101de575f516020613ba35f395f51905f525460098101546040516302910f8b60e31b815233600482015290602090829060249082906001600160a01b03165afa9081156120f057839161210a575b50156120fb57600c8101546040516308834cb560e21b815233600482015230602482015290602090829060449082906001600160a01b03165afa9081156120f05783916120c1575b50156120b25761209b9065ffffffffffff61208f4261397a565b169060123391016136fb565b156120a35780f35b63f411c32760e01b8152600490fd5b6396cc2bc360e01b8252600482fd5b6120e3915060203d6020116120e9575b6120db8183612edb565b810190613032565b5f612075565b503d6120d1565b6040513d85823e3d90fd5b6325878fa360e21b8252600482fd5b612123915060203d6020116120e9576120db8183612edb565b5f61202d565b50346101de5760203660031901126101de57612143612e1b565b61214c816134e3565b5f516020613ba35f395f51905f52546001600160a01b0390911690601581019061217961128084846139ee565b5065ffffffffffff81161592915082156121ad575b505061219e57906112c2916139a9565b6347a11ef760e11b8352600483fd5b65ffffffffffff9192506121d28291826121c64261397a565b955460901c1690613000565b169116105f8061218e565b50346101de5760203660031901126101de576001600160401b03600435116101de573660236004350112156101de576001600160401b0360043560040135116101de573660246004356004013560051b6004350101116101de575f516020613ba35f395f51905f5254600f8101546001600160a01b031633036124765781906020905b600435600401358310156124725760248360051b6004350101356082196004353603018112156111995760043501906122bc6001600160a01b036122a660248501612f41565b165f908152601383016020526040902054151590565b1561246357845b6122d36064840160248501612f55565b9050811015612456576122f6816122f06064860160248701612f55565b90612f8a565b6123206001600160a01b0361230a83612f41565b165f908152601685016020526040902054151590565b156107b557869190600490866001600160a01b0361233d83612f41565b166040519384809263b134427160e01b82525afa9182156118f9578492612437575b5060048501549161237260248801612f41565b604488013565ffffffffffff8116900361116e57889586946123f760405161239a8882612edb565b838152601f1988013689830137604051998a978896879563545ce38960e01b8752600487015260018060a01b031660248601520135604484015265ffffffffffff60448d013516606484015260a0608484015260a4830190612fdc565b03926001600160a01b03165af19182156107725760019261241a575b50016122c3565b61243090863d881161076b5761075c8183612edb565b505f612413565b61244f919250873d89116107a3576107958183612edb565b905f61235f565b5092600191500191612260565b6303fa1eaf60e41b8552600485fd5b8380f35b633fdc220360e01b8252600482fd5b5034612b47576040366003190112612b475761249f612e1b565b6024356001600160a01b038116929190839003612b47576124bf816134e3565b5f516020613ba35f395f51905f525460088101546040516302910f8b60e31b81526001600160a01b038085166004830181905294939260209183916024918391165afa908115612cd9575f91612dfc575b5015612ded5760405163054fd4d560e41b8152602081600481875afa908115612cd9575f91612dce575b5060038201906001600160401b0380835416911603612dbf5760405163d8dfeb4560e01b8152602081600481885afa908115612cd9575f91612da0575b5060068301546001600160a01b03908116911603612d91576040516327f843b560e11b8152602081600481885afa908115612cd9575f91612d72575b5065ffffffffffff80845460301c169116908110612d635760405163142186b760e21b8152602081600481895afa908115612cd9575f91612d44575b5015612d3557604051630ce9b79360e41b8152602081600481895afa908115612cd9575f91612d16575b50600484810180546040516368adba0760e11b81529283015292916001600160a01b031690602081602481855afa908115612cd9575f91612ce4575b5019612c87575b602060049160405192838092637f5a7c7b60e01b82525afa9081156107aa578891612c68575b506001600160a01b0316612c5657604051630dd83c7f60e31b81526020816004818a5afa9081156107aa578891612c37575b5015612c285760405163b134427160e01b81526020816004818a5afa9081156107aa578891612c09575b50604051635d927f4560e11b81526001600160a01b039190911693602082600481885afa9182156116e4578992612bdd575b506001600160401b0380915460401c16911603612bce57604051631a684c7560e11b8152602081600481875afa9081156107aa578891612baf575b50612ba05760405163e054e08b60e01b8152602081600481875afa9081156107aa578891612b71575b5065ffffffffffff855460c01c1665ffffffffffff821610612b62576127a865ffffffffffff918260018801541690613000565b1611612b535760405163bc6eac5b60e01b8152602081600481865afa908115610772578791612b1d575b50600284015410612b0e57549060209261282a846040516127f38282612edb565b898152601f19820195863684840137604051938492839263cd05b8a160e01b84526004840152604060248401526044830190612fdc565b0381865afa9081156107aa578891612af1575b506001600160a01b031680612aca575060110154604051926001600160a01b039091169061286b8585612edb565b8784523685850137813b15611191579186916128b193836040518096819582946348b47ce960e11b84528460048501526024840152606060448401526064830190612fdc565b03925af18015612a1b57908591612ab5575b50505b6040516313c085b760e11b81528181600481875afa908115612a1b578591612a98575b506001600160a01b031615612a89575f516020613ba35f395f51905f52549260248260018060a01b03600d87015416604051928380926302910f8b60e31b82528b60048301525afa908115612a52578691612a6c575b5015612a5d5760405163411557d160e01b815282816004818a5afa908115612a52578691612a35575b506001600160a01b031603612a265760405163054fd4d560e41b81528181600481895afa918215612a1b57916001600160401b039160029387926129ee575b505016036129df57601561209b939465ffffffffffff6129c64261397a565b1660609190911b6001600160601b0319161792016136fb565b63ded51c0b60e01b8352600483fd5b612a0d9250803d10612a14575b612a058183612edb565b810190613556565b5f806129a7565b503d6129fb565b6040513d87823e3d90fd5b630a724f6160e01b8452600484fd5b612a4c9150833d85116107a3576107958183612edb565b5f612968565b6040513d88823e3d90fd5b6346e01c4360e11b8552600485fd5b612a839150833d85116120e9576120db8183612edb565b5f61293f565b630c6b5ff760e31b8452600484fd5b612aaf9150823d84116107a3576107958183612edb565b5f6128e9565b81612abf91612edb565b6117b657835f6128c3565b6011909101546001600160a01b03161491506128c6905057633cc6586560e21b8452600484fd5b612b089150853d87116107a3576107958183612edb565b5f61283d565b633a2662c360e11b8652600486fd5b90506020813d602011612b4b575b81612b3860209383612edb565b81010312612b4757515f6127d2565b5f80fd5b3d9150612b2b565b6307cfe49360e51b8652600486fd5b633062eb1960e21b8852600488fd5b612b93915060203d602011612b99575b612b8b8183612edb565b810190613575565b5f612774565b503d612b81565b63447984b360e11b8752600487fd5b612bc8915060203d6020116120e9576120db8183612edb565b5f61274b565b63f8c618c760e01b8752600487fd5b6001600160401b03919250612c01829160203d602011612a1457612a058183612edb565b929150612710565b612c22915060203d6020116107a3576107958183612edb565b5f6126de565b631501f36360e21b8752600487fd5b612c50915060203d6020116120e9576120db8183612edb565b5f6126b4565b60016221bb1360e11b03198752600487fd5b612c81915060203d6020116107a3576107958183612edb565b5f612682565b803b15612b47576040516323f752d560e01b81525f600482018190525f1960248301528160448183865af18015612cd957612cc3575b5061265c565b612cd09198505f90612edb565b5f966020612cbd565b6040513d5f823e3d90fd5b90506020813d602011612d0e575b81612cff60209383612edb565b81010312612b4757515f612655565b3d9150612cf2565b612d2f915060203d6020116107a3576107958183612edb565b5f612619565b636e549c1760e11b5f5260045ffd5b612d5d915060203d6020116120e9576120db8183612edb565b5f6125ef565b634934476760e01b5f5260045ffd5b612d8b915060203d602011612b9957612b8b8183612edb565b5f6125b3565b63039a1fd760e21b5f5260045ffd5b612db9915060203d6020116107a3576107958183612edb565b5f612577565b63bfcdc45f60e01b5f5260045ffd5b612de7915060203d602011612a1457612a058183612edb565b5f61253a565b635b19e4bb60e01b5f5260045ffd5b612e15915060203d6020116120e9576120db8183612edb565b5f612510565b600435906001600160a01b0382168203612b4757565b35906001600160a01b0382168203612b4757565b6004359065ffffffffffff82168203612b4757565b6024359065ffffffffffff82168203612b4757565b90602080835192838152019201905f5b818110612e8c5750505090565b82516001600160a01b0316845260209384019390920191600101612e7f565b61014081019081106001600160401b03821117612ec757604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b03821117612ec757604052565b6001600160401b038111612ec75760051b60200190565b6101e4356001600160a01b0381168103612b475790565b610204356001600160a01b0381168103612b475790565b356001600160a01b0381168103612b475790565b903590601e1981360301821215612b4757018035906001600160401b038211612b4757602001918160061b36038313612b4757565b9190811015612f9a5760061b0190565b634e487b7160e01b5f52603260045260245ffd5b90816020910312612b4757516001600160a01b0381168103612b475790565b90816020910312612b47575190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9065ffffffffffff8091169116019065ffffffffffff821161301e57565b634e487b7160e01b5f52601160045260245ffd5b90816020910312612b4757518015158103612b475790565b8051821015612f9a5760209160051b010190565b9190820180921161301e57565b9181156132785761307b8361330e565b9281518181111561326f575f5f198201828111925b80831061319657505050506001945f1982019082821161301e576130b4828761304a565b5183975b855189101561318857816130cc8a8a61304a565b51036130e8576001810180911161301e576001909801976130b8565b9395975050909294505b60018211613103575b505050815290565b604051602081019165ffffffffffff60d01b9060d01b1682526006815261312b602682612edb565b5190209080156131745761314091068361305e565b5f19810190811161301e5761316b906001600160a01b0390613162908661304a565b5116918461304a565b525f80806130fb565b634e487b7160e01b5f52601260045260245ffd5b9395975050909294506130f2565b9296958792959891945f935b61301e578685035f190186811161301e5784101561325c576131c4848961304a565b51600185019485811161301e57858c826001946131e28f9a8f61304a565b51116131f3575b50505001936131a2565b613253918d61322383613206878461304a565b5192613212828261304a565b5161321d898361304a565b5261304a565b52858060a01b03613234858361304a565b51169361321d878060a01b0361324a858561304a565b5116918361304a565b525f8c826131e9565b9491989560019197989493500191613090565b50509150915090565b60405162461bcd60e51b815260206004820152602860248201527f4d61782076616c696461746f7273206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608490fd5b61330c906020808095946040519684889551918291018487015e8401908282015f8152815193849201905e01015f815203601f198101845283612edb565b565b906133188261371d565b60125f516020613ba35f395f51905f52540180549261333684612efc565b916133446040519384612edb565b848352601f1961335386612efc565b0136602085013761336385612efc565b946133716040519687612edb565b808652601f1961338082612efc565b013660208801375f925f925b8284106133a0575050505080825283529190565b909192936133d56133dc846133b588866136cc565b93909365ffffffffffff81169165ffffffffffff8260301c169160601c90565b50906137a7565b156134255783613401916133f0848a61304a565b6001600160a01b0382169052613800565b61340b828a61304a565b526001810180911161301e57600190945b0192919061338c565b509360019061341c565b9061345b816133d561128060125f516020613ba35f395f51905f52540160018060a01b038716906139ee565b1561346c5761346991613800565b90565b50505f90565b6001600160a01b031680156134d0575f516020613b835f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b604051632474521560e21b81525f600482015233602482015290602090829060449082906001600160a01b03165afa908115612cd9575f91613537575b501561352857565b630e7fea9d60e01b5f5260045ffd5b613550915060203d6020116120e9576120db8183612edb565b5f613520565b90816020910312612b4757516001600160401b0381168103612b475790565b90816020910312612b47575165ffffffffffff81168103612b475790565b65ffffffffffff916135b16112806001600160a01b038316846139ee565b919490941693841590811561360b575b506135fc576135f99365ffffffffffff60301b6135dd4261397a565b60301b161760609190911b6001600160601b03191617916136fb565b50565b633f54562b60e11b5f5260045ffd5b65ffffffffffff91501615155f6135c1565b65ffffffffffff9161363b6112806001600160a01b038316846139ee565b9490911615159081613688575b50613679576135f99265ffffffffffff6136614261397a565b1660609190911b6001600160601b03191617916136fb565b637952fbad60e11b5f5260045ffd5b65ffffffffffff915016155f613648565b5f516020613b835f395f51905f52546001600160a01b031633036136b957565b63118cdaa760e01b5f523360045260245ffd5b91906136da60029184613a45565b90549060031b1c92835f520160205260405f20549160018060a01b03169190565b613469929160018060a01b031691825f526002820160205260405f2055613b35565b5f516020613ba35f395f51905f52549065ffffffffffff61373d4261397a565b1665ffffffffffff8216101561379057613774915465ffffffffffff808260601c169160901c168082105f1461379f575090613000565b65ffffffffffff806137854261397a565b169116111561379057565b63686c69fd60e01b5f5260045ffd5b905090613000565b65ffffffffffff16801515929190836137ed575b50826137c657505090565b65ffffffffffff16801592509082156137de57505090565b65ffffffffffff161115905090565b65ffffffffffff8316101592505f6137bb565b5f516020613ba35f395f51905f52546015810180546004909201545f95948694602093869391905b868810613839575050505050505050565b90919293949596986133d5613852866133b58d866136cc565b1561397057604051630ce9b79360e41b8152908890829060049082906001600160a01b03165afa908115612cd9576138ee9189915f91613953575b506040519061389c8383612edb565b5f825289368484013760405163e02f693760e01b8152600481018990526001600160a01b038816602482015265ffffffffffff8a16604482015260806064820152938492839182916084830190612fdc565b03916001600160a01b03165afa908115612cd9575f91613925575b506139169060019261305e565b995b0196959493929190613828565b90508781813d831161394c575b61393c8183612edb565b81010312612b4757516001613909565b503d613932565b61396a9150823d84116107a3576107958183612edb565b5f61388d565b5098600190613918565b65ffffffffffff81116139925765ffffffffffff1690565b6306dfcc6560e41b5f52603060045260245260445ffd5b9061346991815f52600281016020525f6040812055613a5a565b60ff5f516020613bc35f395f51905f525460401c16156139df57565b631afcd79f60e31b5f5260045ffd5b90805f526002820160205260405f2054918183159182613a25575b5050613a13575090565b63015ab34360e11b5f5260045260245ffd5b613a3d92506001915f520160205260405f2054151590565b15815f613a09565b8054821015612f9a575f5260205f2001905f90565b906001820191815f528260205260405f20548015155f14613b2d575f19810181811161301e5782545f1981019190821161301e57818103613ae2575b50505080548015613ace575f190190613aaf8282613a45565b8154905f199060031b1b19169055555f526020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b613b18613af2613b029386613a45565b90549060031b1c92839286613a45565b819391549060031b91821b915f19901b19161790565b90555f528360205260405f20555f8080613a96565b505050505f90565b5f82815260018201602052604090205461346c57805490600160401b821015612ec75782613b6d613b02846001809601855584613a45565b90558054925f520160205260405f205560019056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993000b8c56af6cc9ad401ad225bfe96df77f3049ba17eadac1cb95ee89df1e69d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"2167:21819:152:-:0;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;7894:76:30;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;7983:34:30;7979:146;;-1:-1:-1;2167:21819:152;;;;;;;;;7979:146:30;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;8085:29:30;;2167:21819:152;;8085:29:30;7979:146;;;;7894:76;7936:23;;;-1:-1:-1;7936:23:30;;-1:-1:-1;7936:23:30;2167:21819:152;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f5f3560e01c806305c4fdf9146124855780630a71094c146121dd5780632633b70f146121295780632acde09814611fd1578063373bba1f14611f9b5780633ccce78914611f5e5780633d15e74e14611f315780634455a38f14611efe578063461e7a8e14611ec85780636c2eb35014611a6f5780636d1064eb14611a025780636e5c7932146119c1578063709d06ae1461198b578063715018a614611922578063729e2f361461180457806379a8b245146117ce5780637fbe95b51461140b57806386c241a1146113ad5780638da5cb5b14611378578063936f43301461133b578063945cf2dd1461130557806396115bc2146112395780639e0323111461120b578063ab122753146107db578063af962995146105c8578063b5e5ad121461054f578063bcf339341461037f578063c639e2d614610351578063c9b0b1e91461031a578063ceebb69a146102ec578063d55a5bdf146102b2578063d8dfeb4514610279578063d99ddfc71461023b578063d99fcd661461020e578063f2fde38b146101e15763f887ea40146101a6575f80fd5b346101de57806003193601126101de575f516020613ba35f395f51905f5254600701546040516001600160a01b039091168152602090f35b80fd5b50346101de5760203660031901126101de5761020b6101fe612e1b565b610206613699565b613472565b80f35b50346101de57806003193601126101de5761020b60125f516020613ba35f395f51905f5254013390613593565b50346101de5760403660031901126101de57602061027161025a612e1b565b610262612e5a565b9061026c8261371d565b61342f565b604051908152f35b50346101de57806003193601126101de575f516020613ba35f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346101de57806003193601126101de5760206001600160401b0360035f516020613ba35f395f51905f5254015460401c16604051908152f35b50346101de57806003193601126101de57602060045f516020613ba35f395f51905f52540154604051908152f35b50346101de57806003193601126101de5760206001600160401b0360035f516020613ba35f395f51905f5254015416604051908152f35b50346101de57806003193601126101de57602060055f516020613ba35f395f51905f52540154604051908152f35b50346101de57806003193601126101de5761012060405161039f81612eab565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015201526101405f516020613ba35f395f51905f52546040516103f381612eab565b60018060a01b036008830154169182825260018060a01b036009820154166020830190815260018060a01b03600a830154166040840190815260018060a01b03600b840154166060850190815260018060a01b03600c850154166080860190815260018060a01b03600d860154169160a0870192835260018060a01b03600e870154169360c0880194855260018060a01b03600f880154169560e0890196875261012060018060a01b0360108a015416986101008b01998a52601160018060a01b03910154169901988952604051998a5260018060a01b0390511660208a015260018060a01b03905116604089015260018060a01b03905116606088015260018060a01b03905116608087015260018060a01b0390511660a086015260018060a01b0390511660c085015260018060a01b0390511660e084015260018060a01b0390511661010083015260018060a01b03905116610120820152f35b50346101de5760203660031901126101de5761058b90610575610570612e45565b61330e565b9091604051938493604085526040850190612e6f565b8381036020850152602080845192838152019301915b8181106105af575050500390f35b82518452859450602093840193909201916001016105a1565b50346101de5760203660031901126101de576004356001600160401b0381116107d757366023820112156107d75780600401356001600160401b0381116107d3576024820191602436918360061b0101116107d3575f516020613ba35f395f51905f5254601001546001600160a01b031633036107c4576020905f90845b818110610651578580f35b61065c818387612f8a565b5f516020613ba35f395f51905f525490919061069b906015016001600160a01b0361068685612f41565b16906001915f520160205260405f2054151590565b156107b5576004856001600160a01b036106b485612f41565b166040519283809263b134427160e01b82525afa9283156107aa576107229387928a9161077d575b50828a604051936106ed8386612edb565b81855289368487013760405197889586948593635ca61c3760e11b855201356004840152604060248401526044830190612fdc565b03926001600160a01b03165af191821561077257600192610745575b5001610646565b61076490863d881161076b575b61075c8183612edb565b810190612fcd565b505f61073e565b503d610752565b6040513d89823e3d90fd5b61079d9150833d85116107a3575b6107958183612edb565b810190612fae565b5f6106dc565b503d61078b565b6040513d8a823e3d90fd5b633b2fc1c360e21b8752600487fd5b632249f71f60e21b8352600483fd5b8280fd5b5080fd5b50346101de576102e03660031901126101de575f516020613bc35f395f51905f52546001600160401b0360ff8260401c1615911680159081611203575b60011490816111f9575b1590816111f0575b506111e1578060016001600160401b03195f516020613bc35f395f51905f525416175f516020613bc35f395f51905f52556111b1575b6004356001600160a01b03811681036107d3576108879061087f6139c3565b6102066139c3565b61088f6139c3565b604090815161089e8382612edb565b601f815260208101907f6d6964646c65776172652e73746f726167652e4d6964646c657761726556310082526108d2613699565b5190205f19810190811161119d5782519060208201908152602082526108f88483612edb565b60ff199151902016805f516020613ba35f395f51905f525560243565ffffffffffff8116810361119957815465ffffffffffff191665ffffffffffff91821617825560443590811681036111995781546bffffffffffff000000000000191660309190911b65ffffffffffff60301b1617815560643565ffffffffffff8116810361119957815465ffffffffffff60601b191660609190911b65ffffffffffff60601b1617815560843565ffffffffffff8116810361119957815465ffffffffffff60901b191660909190911b65ffffffffffff60901b1617815560a43565ffffffffffff8116810361119957815465ffffffffffff60c01b191660c09190911b65ffffffffffff60c01b1617815560c43565ffffffffffff811681036111995765ffffffffffff60018301911665ffffffffffff19825416178155600282019161012435835560e4356001600160401b0381168103611191576001600160401b036003830191166001600160401b0319825416178155610104356001600160401b03811681036111955781546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16179055610164356001600160a01b0381168103611191576006820180546001600160a01b0319166001600160a01b039283161790553060601b6004830155610144356005830155610184359081168103611191576007820180546001600160a01b0319166001600160a01b039283161790556101a4359081168103611191576008820180546001600160a01b0319166001600160a01b039283161790556101c4359081168103611191576009820180546001600160a01b0319166001600160a01b03909216919091179055610b7e612f13565b600a820180546001600160a01b0319166001600160a01b03909216919091179055610ba7612f2a565b600b820180546001600160a01b0319166001600160a01b0392831617905561022435908116810361119157600c820180546001600160a01b0319166001600160a01b0392831617905561024435908116810361119157600d820180546001600160a01b0319166001600160a01b0392831617905561026435908116810361119157600e820180546001600160a01b0319166001600160a01b0392831617905561028435908116810361119157600f820180546001600160a01b0319166001600160a01b039283161790556102a4359081168103611191576010820180546001600160a01b0319166001600160a01b039283161790556102c4359081168103611191576011820180546001600160a01b0319166001600160a01b039283161790558690610cd1612f13565b16803b156107d75781809160048951809481936387140b5b60e01b83525af180156111725761117c575b506001600160a01b03610d0c612f2a565b16803b156107d757818091602489518094819363b7d8e1a960e01b83523060048401525af1801561117257611159575b5050549065ffffffffffff8216156111155765ffffffffffff8260301c16918060011b6601fffffffffffe65fffffffffffe8216911681036111015783106110a0578265ffffffffffff8260601c161061102a578265ffffffffffff8260901c1610610fc05760c01c65ffffffffffff16908115610f7c575465ffffffffffff16908115610f275765ffffffffffff91610dd591613000565b1611610e97576003905410610e3e57610dec575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f516020613bc35f395f51905f5254165f516020613bc35f395f51905f52555160018152a180f35b815162461bcd60e51b815260206004820152602c60248201527f5265736f6c766572207365742065706f6368732064656c6179206d757374206260448201526b65206174206c65617374203360a01b6064820152608490fd5b825162461bcd60e51b815260206004820152605f60248201527f5665746f206475726174696f6e20616e6420736c61736820657865637574696f60448201527f6e2064656c6179206d757374206265206c657373207468616e206f722065717560648201527f616c20746f206d696e207661756c74732065706f6368206475726174696f6e00608482015260a490fd5b855162461bcd60e51b815260206004820152602860248201527f4d696e20736c61736820657865637574696f6e2064656c61792063616e6e6f74604482015267206265207a65726f60c01b6064820152608490fd5b855162461bcd60e51b815260206004820152601c60248201527f5665746f206475726174696f6e2063616e6e6f74206265207a65726f000000006044820152606490fd5b855162461bcd60e51b815260206004820152602481018790527f5661756c7420677261636520706572696f64206d75737420626520626967676560448201527f72207468616e206d696e207661756c74732065706f6368206475726174696f6e6064820152608490fd5b855162461bcd60e51b815260206004820152604360248201527f4f70657261746f7220677261636520706572696f64206d75737420626520626960448201527f67676572207468616e206d696e207661756c74732065706f636820647572617460648201526234b7b760e91b608482015260a490fd5b855162461bcd60e51b815260206004820152603460248201527f4d696e207661756c74732065706f6368206475726174696f6e206d75737420626044820152736520626967676572207468616e2032206572617360601b6064820152608490fd5b634e487b7160e01b88526011600452602488fd5b845162461bcd60e51b815260206004820152601b60248201527f457261206475726174696f6e2063616e6e6f74206265207a65726f00000000006044820152606490fd5b8161116391612edb565b61116e57855f610d3c565b8580fd5b87513d84823e3d90fd5b8161118691612edb565b61116e57855f610cfb565b8680fd5b8780fd5b8480fd5b634e487b7160e01b84526011600452602484fd5b600160401b60ff60401b195f516020613bc35f395f51905f525416175f516020613bc35f395f51905f5255610860565b63f92ee8a960e01b8252600482fd5b9050155f61082a565b303b159150610822565b829150610818565b50346101de57806003193601126101de57602060025f516020613ba35f395f51905f52540154604051908152f35b50346101de5760203660031901126101de57611253612e1b565b5f516020613ba35f395f51905f52546001600160a01b0390911690601281019061129d61128084846139ee565b65ffffffffffff81169165ffffffffffff8260301c169160601c90565b5065ffffffffffff81161592915082156112d5575b50506112c657906112c2916139a9565b5080f35b63f1c9810160e01b8352600483fd5b65ffffffffffff9192506112fa8291826112ee4261397a565b955460601c1690613000565b169116105f806112b2565b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460301c16604051908152f35b50346101de5760203660031901126101de5761020b611358612e1b565b611361816134e3565b60155f516020613ba35f395f51905f52540161361d565b50346101de57806003193601126101de575f516020613b835f395f51905f52546040516001600160a01b039091168152602090f35b50346101de5760203660031901126101de576113c7612e1b565b5f516020613ba35f395f51905f525460100180549091906001600160a01b031633036107c45781546001600160a01b0319166001600160a01b039190911617905580f35b50346101de5760403660031901126101de576004356001600160401b0381116107d757606060031982360301126107d757604051606081018181106001600160401b038211176117ba5760405281600401356001600160401b0381116117b6578201366023820112156117b657600481013561148681612efc565b916114946040519384612edb565b818352602060048185019360061b830101019036821161119157602401915b8183106117585750505081526114d6604460208301936024810135855201612e31565b90604081019182526114e6612e5a565b935f516020613ba35f395f51905f525490600782019460018060a01b03865416330361174957845160068401546001600160a01b0391821691160361173a57819594939550606093829565ffffffffffff60056015870196019916926020965b895180518a10156116f3578961155b9161304a565b5180516001600160a01b03165f908152600189016020526040902054156107b557908b91866116148b6116068b6115f46115a38f6112809060018060a01b038a5116906139ee565b9a546040516001600160a01b03909c169b925090506115c28683612edb565b838252604051936115d38786612edb565b845260405197889687015260408601526080606086015260a0850190612fdc565b838103601f1901608085015290612fdc565b03601f198101835282612edb565b85548751838d0180519096909290916001600160a01b039081169116823b156116ef57908c809493926116746040519788968795869463239723ed60e01b8652600486015260248501526044840152608060648401526084830190612fdc565b03925af180156116e4579089916116cf575b5050916116c791600193519151604051926bffffffffffffffffffffffff199060601b168c8401526034830152603482526116c2605483612edb565b6132ce565b980197611546565b816116d991612edb565b61119557875f611686565b6040513d8b823e3d90fd5b8c80fd5b8861172c86848651915160405192858401526bffffffffffffffffffffffff199060601b166040830152603482526116c2605483612edb565b818151910120604051908152f35b63039a1fd760e21b8252600482fd5b639165520160e01b8252600482fd5b60408336031261119157604051604081018181106001600160401b038211176117a25791602091604093845261178d86612e31565b815282860135838201528152019201916114b3565b634e487b7160e01b89526041600452602489fd5b8380fd5b634e487b7160e01b84526041600452602484fd5b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460901c16604051908152f35b50346101de5760603660031901126101de5761181e612e1b565b5f516020613ba35f395f51905f5254600781015460243592604435926001600160a01b0390921691338390036119135760068101546001600160a01b039283169216820361190457600e01546001600160a01b031691859190833b156107d3576084908360405195869485936348a78da760e01b8552600485015260248401528860448401528760648401525af180156118f9576118e4575b60208383604051908382019283526040820152604081526118d9606082612edb565b519020604051908152f35b6118ef848092612edb565b6107d357826118b7565b6040513d86823e3d90fd5b63039a1fd760e21b8652600486fd5b639165520160e01b8652600486fd5b50346101de57806003193601126101de5761193b613699565b5f516020613b835f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460601c16604051908152f35b50346101de5760403660031901126101de576119fe6119ea6119e1612e45565b6024359061306b565b604051918291602083526020830190612e6f565b0390f35b50346101de5760203660031901126101de57611a1c612e1b565b5f516020613ba35f395f51905f5254600f0180549091906001600160a01b03163303611a605781546001600160a01b0319166001600160a01b039190911617905580f35b633fdc220360e01b8352600483fd5b50346101de57806003193601126101de57611a88613699565b5f516020613bc35f395f51905f525460ff8160401c16908115611eb3575b50611ea4575f516020613bc35f395f51905f52805468ffffffffffffffffff1916680100000000000000021790555f516020613b835f395f51905f5254611af8906001600160a01b031661087f6139c3565b5f516020613ba35f395f51905f525460408051611b158282612edb565b601f815260208101907f6d6964646c65776172652e73746f726167652e4d6964646c65776172655632008252611b49613699565b5190205f19810190811161119d578151906020820190815260208252611b6f8383612edb565b9051902060ff19165f516020613ba35f395f51905f528190558254815465ffffffffffff90911665ffffffffffff19821681178355845465ffffffffffff60301b166001600160601b031990921617178155908254825465ffffffffffff60601b191665ffffffffffff60601b9091161782558254825465ffffffffffff60901b191665ffffffffffff60901b9091161782558254825465ffffffffffff60c01b191665ffffffffffff60c01b90911617825565ffffffffffff60018401541665ffffffffffff60018401911665ffffffffffff1982541617905560028301546002830155611ca2600384016001600160401b03808254169181600387019316821984541617835554841c1667ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b1916179055565b60068381015490830180546001600160a01b039283166001600160a01b031991821617909155600480860154908501556005808601549085015560078086015490850180549190931691161790556008808301908401848403611dbc575b50508392601281019260128101955b8454811015611d365780611d2f611d28600193886136cc565b908a6136fb565b5001611d0f565b50601590810192910184805b8254811015611d695780611d62611d5b600193866136cc565b90886136fb565b5001611d42565b507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260208460ff60401b195f516020613bc35f395f51905f5254165f516020613bc35f395f51905f52555160028152a180f35b5481546001600160a01b03199081166001600160a01b039283161790925560098581015490850180548416918316919091179055600a8086015490850180548416918316919091179055600b8086015490850180548416918316919091179055600c8086015490850180548416918316919091179055600d8086015490850180548416918316919091179055600e8086015490850180548416918316919091179055600f808601549085018054841691831691909117905560108086015490850180548416918316919091179055601180860154908501805490931691161790555f80611d00565b63f92ee8a960e01b8152600490fd5b600291506001600160401b031610155f611aa6565b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460c01c16604051908152f35b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545416604051908152f35b50346101de57806003193601126101de5761020b60125f516020613ba35f395f51905f525401339061361d565b50346101de5760203660031901126101de5761020b611f7b612e1b565b611f84816134e3565b60155f516020613ba35f395f51905f525401613593565b50346101de57806003193601126101de57602065ffffffffffff60015f516020613ba35f395f51905f5254015416604051908152f35b50346101de57806003193601126101de575f516020613ba35f395f51905f525460098101546040516302910f8b60e31b815233600482015290602090829060249082906001600160a01b03165afa9081156120f057839161210a575b50156120fb57600c8101546040516308834cb560e21b815233600482015230602482015290602090829060449082906001600160a01b03165afa9081156120f05783916120c1575b50156120b25761209b9065ffffffffffff61208f4261397a565b169060123391016136fb565b156120a35780f35b63f411c32760e01b8152600490fd5b6396cc2bc360e01b8252600482fd5b6120e3915060203d6020116120e9575b6120db8183612edb565b810190613032565b5f612075565b503d6120d1565b6040513d85823e3d90fd5b6325878fa360e21b8252600482fd5b612123915060203d6020116120e9576120db8183612edb565b5f61202d565b50346101de5760203660031901126101de57612143612e1b565b61214c816134e3565b5f516020613ba35f395f51905f52546001600160a01b0390911690601581019061217961128084846139ee565b5065ffffffffffff81161592915082156121ad575b505061219e57906112c2916139a9565b6347a11ef760e11b8352600483fd5b65ffffffffffff9192506121d28291826121c64261397a565b955460901c1690613000565b169116105f8061218e565b50346101de5760203660031901126101de576001600160401b03600435116101de573660236004350112156101de576001600160401b0360043560040135116101de573660246004356004013560051b6004350101116101de575f516020613ba35f395f51905f5254600f8101546001600160a01b031633036124765781906020905b600435600401358310156124725760248360051b6004350101356082196004353603018112156111995760043501906122bc6001600160a01b036122a660248501612f41565b165f908152601383016020526040902054151590565b1561246357845b6122d36064840160248501612f55565b9050811015612456576122f6816122f06064860160248701612f55565b90612f8a565b6123206001600160a01b0361230a83612f41565b165f908152601685016020526040902054151590565b156107b557869190600490866001600160a01b0361233d83612f41565b166040519384809263b134427160e01b82525afa9182156118f9578492612437575b5060048501549161237260248801612f41565b604488013565ffffffffffff8116900361116e57889586946123f760405161239a8882612edb565b838152601f1988013689830137604051998a978896879563545ce38960e01b8752600487015260018060a01b031660248601520135604484015265ffffffffffff60448d013516606484015260a0608484015260a4830190612fdc565b03926001600160a01b03165af19182156107725760019261241a575b50016122c3565b61243090863d881161076b5761075c8183612edb565b505f612413565b61244f919250873d89116107a3576107958183612edb565b905f61235f565b5092600191500191612260565b6303fa1eaf60e41b8552600485fd5b8380f35b633fdc220360e01b8252600482fd5b5034612b47576040366003190112612b475761249f612e1b565b6024356001600160a01b038116929190839003612b47576124bf816134e3565b5f516020613ba35f395f51905f525460088101546040516302910f8b60e31b81526001600160a01b038085166004830181905294939260209183916024918391165afa908115612cd9575f91612dfc575b5015612ded5760405163054fd4d560e41b8152602081600481875afa908115612cd9575f91612dce575b5060038201906001600160401b0380835416911603612dbf5760405163d8dfeb4560e01b8152602081600481885afa908115612cd9575f91612da0575b5060068301546001600160a01b03908116911603612d91576040516327f843b560e11b8152602081600481885afa908115612cd9575f91612d72575b5065ffffffffffff80845460301c169116908110612d635760405163142186b760e21b8152602081600481895afa908115612cd9575f91612d44575b5015612d3557604051630ce9b79360e41b8152602081600481895afa908115612cd9575f91612d16575b50600484810180546040516368adba0760e11b81529283015292916001600160a01b031690602081602481855afa908115612cd9575f91612ce4575b5019612c87575b602060049160405192838092637f5a7c7b60e01b82525afa9081156107aa578891612c68575b506001600160a01b0316612c5657604051630dd83c7f60e31b81526020816004818a5afa9081156107aa578891612c37575b5015612c285760405163b134427160e01b81526020816004818a5afa9081156107aa578891612c09575b50604051635d927f4560e11b81526001600160a01b039190911693602082600481885afa9182156116e4578992612bdd575b506001600160401b0380915460401c16911603612bce57604051631a684c7560e11b8152602081600481875afa9081156107aa578891612baf575b50612ba05760405163e054e08b60e01b8152602081600481875afa9081156107aa578891612b71575b5065ffffffffffff855460c01c1665ffffffffffff821610612b62576127a865ffffffffffff918260018801541690613000565b1611612b535760405163bc6eac5b60e01b8152602081600481865afa908115610772578791612b1d575b50600284015410612b0e57549060209261282a846040516127f38282612edb565b898152601f19820195863684840137604051938492839263cd05b8a160e01b84526004840152604060248401526044830190612fdc565b0381865afa9081156107aa578891612af1575b506001600160a01b031680612aca575060110154604051926001600160a01b039091169061286b8585612edb565b8784523685850137813b15611191579186916128b193836040518096819582946348b47ce960e11b84528460048501526024840152606060448401526064830190612fdc565b03925af18015612a1b57908591612ab5575b50505b6040516313c085b760e11b81528181600481875afa908115612a1b578591612a98575b506001600160a01b031615612a89575f516020613ba35f395f51905f52549260248260018060a01b03600d87015416604051928380926302910f8b60e31b82528b60048301525afa908115612a52578691612a6c575b5015612a5d5760405163411557d160e01b815282816004818a5afa908115612a52578691612a35575b506001600160a01b031603612a265760405163054fd4d560e41b81528181600481895afa918215612a1b57916001600160401b039160029387926129ee575b505016036129df57601561209b939465ffffffffffff6129c64261397a565b1660609190911b6001600160601b0319161792016136fb565b63ded51c0b60e01b8352600483fd5b612a0d9250803d10612a14575b612a058183612edb565b810190613556565b5f806129a7565b503d6129fb565b6040513d87823e3d90fd5b630a724f6160e01b8452600484fd5b612a4c9150833d85116107a3576107958183612edb565b5f612968565b6040513d88823e3d90fd5b6346e01c4360e11b8552600485fd5b612a839150833d85116120e9576120db8183612edb565b5f61293f565b630c6b5ff760e31b8452600484fd5b612aaf9150823d84116107a3576107958183612edb565b5f6128e9565b81612abf91612edb565b6117b657835f6128c3565b6011909101546001600160a01b03161491506128c6905057633cc6586560e21b8452600484fd5b612b089150853d87116107a3576107958183612edb565b5f61283d565b633a2662c360e11b8652600486fd5b90506020813d602011612b4b575b81612b3860209383612edb565b81010312612b4757515f6127d2565b5f80fd5b3d9150612b2b565b6307cfe49360e51b8652600486fd5b633062eb1960e21b8852600488fd5b612b93915060203d602011612b99575b612b8b8183612edb565b810190613575565b5f612774565b503d612b81565b63447984b360e11b8752600487fd5b612bc8915060203d6020116120e9576120db8183612edb565b5f61274b565b63f8c618c760e01b8752600487fd5b6001600160401b03919250612c01829160203d602011612a1457612a058183612edb565b929150612710565b612c22915060203d6020116107a3576107958183612edb565b5f6126de565b631501f36360e21b8752600487fd5b612c50915060203d6020116120e9576120db8183612edb565b5f6126b4565b60016221bb1360e11b03198752600487fd5b612c81915060203d6020116107a3576107958183612edb565b5f612682565b803b15612b47576040516323f752d560e01b81525f600482018190525f1960248301528160448183865af18015612cd957612cc3575b5061265c565b612cd09198505f90612edb565b5f966020612cbd565b6040513d5f823e3d90fd5b90506020813d602011612d0e575b81612cff60209383612edb565b81010312612b4757515f612655565b3d9150612cf2565b612d2f915060203d6020116107a3576107958183612edb565b5f612619565b636e549c1760e11b5f5260045ffd5b612d5d915060203d6020116120e9576120db8183612edb565b5f6125ef565b634934476760e01b5f5260045ffd5b612d8b915060203d602011612b9957612b8b8183612edb565b5f6125b3565b63039a1fd760e21b5f5260045ffd5b612db9915060203d6020116107a3576107958183612edb565b5f612577565b63bfcdc45f60e01b5f5260045ffd5b612de7915060203d602011612a1457612a058183612edb565b5f61253a565b635b19e4bb60e01b5f5260045ffd5b612e15915060203d6020116120e9576120db8183612edb565b5f612510565b600435906001600160a01b0382168203612b4757565b35906001600160a01b0382168203612b4757565b6004359065ffffffffffff82168203612b4757565b6024359065ffffffffffff82168203612b4757565b90602080835192838152019201905f5b818110612e8c5750505090565b82516001600160a01b0316845260209384019390920191600101612e7f565b61014081019081106001600160401b03821117612ec757604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b03821117612ec757604052565b6001600160401b038111612ec75760051b60200190565b6101e4356001600160a01b0381168103612b475790565b610204356001600160a01b0381168103612b475790565b356001600160a01b0381168103612b475790565b903590601e1981360301821215612b4757018035906001600160401b038211612b4757602001918160061b36038313612b4757565b9190811015612f9a5760061b0190565b634e487b7160e01b5f52603260045260245ffd5b90816020910312612b4757516001600160a01b0381168103612b475790565b90816020910312612b47575190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9065ffffffffffff8091169116019065ffffffffffff821161301e57565b634e487b7160e01b5f52601160045260245ffd5b90816020910312612b4757518015158103612b475790565b8051821015612f9a5760209160051b010190565b9190820180921161301e57565b9181156132785761307b8361330e565b9281518181111561326f575f5f198201828111925b80831061319657505050506001945f1982019082821161301e576130b4828761304a565b5183975b855189101561318857816130cc8a8a61304a565b51036130e8576001810180911161301e576001909801976130b8565b9395975050909294505b60018211613103575b505050815290565b604051602081019165ffffffffffff60d01b9060d01b1682526006815261312b602682612edb565b5190209080156131745761314091068361305e565b5f19810190811161301e5761316b906001600160a01b0390613162908661304a565b5116918461304a565b525f80806130fb565b634e487b7160e01b5f52601260045260245ffd5b9395975050909294506130f2565b9296958792959891945f935b61301e578685035f190186811161301e5784101561325c576131c4848961304a565b51600185019485811161301e57858c826001946131e28f9a8f61304a565b51116131f3575b50505001936131a2565b613253918d61322383613206878461304a565b5192613212828261304a565b5161321d898361304a565b5261304a565b52858060a01b03613234858361304a565b51169361321d878060a01b0361324a858561304a565b5116918361304a565b525f8c826131e9565b9491989560019197989493500191613090565b50509150915090565b60405162461bcd60e51b815260206004820152602860248201527f4d61782076616c696461746f7273206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608490fd5b61330c906020808095946040519684889551918291018487015e8401908282015f8152815193849201905e01015f815203601f198101845283612edb565b565b906133188261371d565b60125f516020613ba35f395f51905f52540180549261333684612efc565b916133446040519384612edb565b848352601f1961335386612efc565b0136602085013761336385612efc565b946133716040519687612edb565b808652601f1961338082612efc565b013660208801375f925f925b8284106133a0575050505080825283529190565b909192936133d56133dc846133b588866136cc565b93909365ffffffffffff81169165ffffffffffff8260301c169160601c90565b50906137a7565b156134255783613401916133f0848a61304a565b6001600160a01b0382169052613800565b61340b828a61304a565b526001810180911161301e57600190945b0192919061338c565b509360019061341c565b9061345b816133d561128060125f516020613ba35f395f51905f52540160018060a01b038716906139ee565b1561346c5761346991613800565b90565b50505f90565b6001600160a01b031680156134d0575f516020613b835f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b604051632474521560e21b81525f600482015233602482015290602090829060449082906001600160a01b03165afa908115612cd9575f91613537575b501561352857565b630e7fea9d60e01b5f5260045ffd5b613550915060203d6020116120e9576120db8183612edb565b5f613520565b90816020910312612b4757516001600160401b0381168103612b475790565b90816020910312612b47575165ffffffffffff81168103612b475790565b65ffffffffffff916135b16112806001600160a01b038316846139ee565b919490941693841590811561360b575b506135fc576135f99365ffffffffffff60301b6135dd4261397a565b60301b161760609190911b6001600160601b03191617916136fb565b50565b633f54562b60e11b5f5260045ffd5b65ffffffffffff91501615155f6135c1565b65ffffffffffff9161363b6112806001600160a01b038316846139ee565b9490911615159081613688575b50613679576135f99265ffffffffffff6136614261397a565b1660609190911b6001600160601b03191617916136fb565b637952fbad60e11b5f5260045ffd5b65ffffffffffff915016155f613648565b5f516020613b835f395f51905f52546001600160a01b031633036136b957565b63118cdaa760e01b5f523360045260245ffd5b91906136da60029184613a45565b90549060031b1c92835f520160205260405f20549160018060a01b03169190565b613469929160018060a01b031691825f526002820160205260405f2055613b35565b5f516020613ba35f395f51905f52549065ffffffffffff61373d4261397a565b1665ffffffffffff8216101561379057613774915465ffffffffffff808260601c169160901c168082105f1461379f575090613000565b65ffffffffffff806137854261397a565b169116111561379057565b63686c69fd60e01b5f5260045ffd5b905090613000565b65ffffffffffff16801515929190836137ed575b50826137c657505090565b65ffffffffffff16801592509082156137de57505090565b65ffffffffffff161115905090565b65ffffffffffff8316101592505f6137bb565b5f516020613ba35f395f51905f52546015810180546004909201545f95948694602093869391905b868810613839575050505050505050565b90919293949596986133d5613852866133b58d866136cc565b1561397057604051630ce9b79360e41b8152908890829060049082906001600160a01b03165afa908115612cd9576138ee9189915f91613953575b506040519061389c8383612edb565b5f825289368484013760405163e02f693760e01b8152600481018990526001600160a01b038816602482015265ffffffffffff8a16604482015260806064820152938492839182916084830190612fdc565b03916001600160a01b03165afa908115612cd9575f91613925575b506139169060019261305e565b995b0196959493929190613828565b90508781813d831161394c575b61393c8183612edb565b81010312612b4757516001613909565b503d613932565b61396a9150823d84116107a3576107958183612edb565b5f61388d565b5098600190613918565b65ffffffffffff81116139925765ffffffffffff1690565b6306dfcc6560e41b5f52603060045260245260445ffd5b9061346991815f52600281016020525f6040812055613a5a565b60ff5f516020613bc35f395f51905f525460401c16156139df57565b631afcd79f60e31b5f5260045ffd5b90805f526002820160205260405f2054918183159182613a25575b5050613a13575090565b63015ab34360e11b5f5260045260245ffd5b613a3d92506001915f520160205260405f2054151590565b15815f613a09565b8054821015612f9a575f5260205f2001905f90565b906001820191815f528260205260405f20548015155f14613b2d575f19810181811161301e5782545f1981019190821161301e57818103613ae2575b50505080548015613ace575f190190613aaf8282613a45565b8154905f199060031b1b19169055555f526020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b613b18613af2613b029386613a45565b90549060031b1c92839286613a45565b819391549060031b91821b915f19901b19161790565b90555f528360205260405f20555f8080613a96565b505050505f90565b5f82815260018201602052604090205461346c57805490600160401b821015612ec75782613b6d613b02846001809601855584613a45565b90558054925f520160205260405f205560019056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993000b8c56af6cc9ad401ad225bfe96df77f3049ba17eadac1cb95ee89df1e69d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"2167:21819:152:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;7405:17;;2167:21819;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;2357:1:29;2167:21819:152;;:::i;:::-;2303:62:29;;:::i;:::-;2357:1;:::i;:::-;2167:21819:152;;;;;;;;;;;;;;;8657:10;8628:20;-1:-1:-1;;;;;;;;;;;2167:21819:152;8628:20;8657:10;;;:::i;2167:21819::-;;;;;;;-1:-1:-1;;2167:21819:152;;;;;13369:372;2167:21819;;:::i;:::-;;;:::i;:::-;22676:2;;;;:::i;:::-;13369:372;:::i;:::-;2167:21819;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;7092:21;;2167:21819;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6978:30:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;6978:30;2167:21819;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;7197:21;2167:21819;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6852:34:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;6852:34;2167:21819;;;;;;;;;;;;;;;;;;;;;;7303:22;-1:-1:-1;;;;;;;;;;;2167:21819:152;7303:22;2167:21819;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;:::i;:::-;;;;;;7537:20;;;2167:21819;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;15783:38;;2167:21819;-1:-1:-1;;;;;2167:21819:152;15769:10;:52;15765:108;;2167:21819;;;;15888:9;15899:18;;;;;;2167:21819;;;15919:3;15971:10;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;8806:28:83;;16001:17:152;;-1:-1:-1;;;;;16028:11:152;2167:21819;16028:11;:::i;:::-;2167:21819;8806:28:83;5197:14;5101:129;-1:-1:-1;2167:21819:152;5197:14:83;2167:21819:152;;;-1:-1:-1;2167:21819:152;;5197:26:83;;5101:129;;8806:28;16000:40:152;15996:106;;2167:21819;;-1:-1:-1;;;;;16136:11:152;;;:::i;:::-;2167:21819;;;;;;;;;;16129:29;;;;;;;;;2167:21819;16129:29;;;;;;;15919:3;2167:21819;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;16116:83;;16173:11;2167:21819;;16116:83;;2167:21819;;;;;;;;;;;:::i;:::-;16116:83;;-1:-1:-1;;;;;2167:21819:152;16116:83;;;;;;;2167:21819;16116:83;;;15919:3;;2167:21819;15888:9;;16116:83;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2167:21819;;;;;;;;;16129:29;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2167:21819;;;;;;;;;15996:106;-1:-1:-1;;;16067:20:152;;2167:21819;15390:20;16067;15765:108;-1:-1:-1;;;15844:18:152;;2167:21819;8031:18;15844;2167:21819;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;4301:16:30;2167:21819:152;;4724:16:30;;:34;;;;2167:21819:152;4803:1:30;4788:16;:50;;;;2167:21819:152;4853:13:30;:30;;;;2167:21819:152;4849:91:30;;;2167:21819:152;4803:1:30;-1:-1:-1;;;;;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;4977:67:30;;2167:21819:152;;;-1:-1:-1;;;;;2167:21819:152;;;;;;6959:1:30;;6891:76;;:::i;:::-;;;:::i;6959:1::-;6891:76;;:::i;:::-;2167:21819:152;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:29;;:::i;:::-;2167:21819:152;23580:27;;-1:-1:-1;;2167:21819:152;;;;;;;;;23561:52;2167:21819;23561:52;;2167:21819;;;;23561:52;;;;;;:::i;:::-;2167:21819;23617:23;2167:21819;;23551:63;;:89;2167:21819;-1:-1:-1;;;;;;;;;;;2167:21819:152;3270:19;2167:21819;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;;;3325:29;2167:21819;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3388:27;2167:21819;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3446:24;2167:21819;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3500:23;2167:21819;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3560:30;2167:21819;;;;;;;;;4803:1:30;3533:24:152;;2167:21819;;;;;;;;;;3600:27;;;2167:21819;3630:33;2167:21819;;;3701:31;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;-1:-1:-1;;;;;3673:25:152;;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;;;;;;;3766:27;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3841:18;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;3826:12;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;3892:4;3388:27;2167:21819;;3869:12;;2167:21819;3954:19;2167:21819;3938:13;;;2167:21819;3995:14;2167:21819;;;;;;;;3984:8;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;4034:17;2167:21819;;;;;;;;4020:11;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;2872:1;;:::i;:::-;;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;2872:1;;:::i;:::-;;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;4079:33;;:::i;:::-;2167:21819;4062:69;;;;;2167:21819;;;;;;;;;;;;;4062:69;;;;;;;;;;2167:21819;-1:-1:-1;;;;;;4167:35:152;;:::i;:::-;2167:21819;4141:91;;;;;2167:21819;;;3270:19;2167:21819;;;;;;;;;4141:91;;3892:4;2167:21819;4141:91;;2167:21819;4141:91;;;;;;;;2167:21819;;;;;;;;17273:17;2167:21819;;;;;;;;;4803:1:30;2167:21819:152;;;;;;;;;;;17657:44;;2167:21819;;;;;3388:27;2167:21819;;17961:48;2167:21819;;;;;;;;18302:45;2167:21819;;3560:30;2167:21819;;;;18517:21;;2167:21819;;;;;;18781:28;;2167:21819;;;18885:44;;;;:::i;:::-;2167:21819;18885:71;2167:21819;;3673:25;2167:21819;;19282:32;2167:21819;;5064:101:30;;2167:21819:152;;;5064:101:30;2167:21819:152;5140:14:30;2167:21819:152;-1:-1:-1;;;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;4803:1:30;2167:21819:152;;5140:14:30;2167:21819:152;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;-1:-1:-1;;;3388:27:152;2167:21819;;;3446:24;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;;3388:27;2167:21819;;;;3446:24;2167:21819;;;3500:23;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;-1:-1:-1;;;3388:27:152;2167:21819;;;3446:24;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;3388:27;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;3270:19;2167:21819;;;;;;3325:29;2167:21819;;;;3388:27;2167:21819;;;3446:24;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;;3388:27;2167:21819;;;-1:-1:-1;;;3446:24:152;2167:21819;;;3500:23;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;-1:-1:-1;;;3388:27:152;2167:21819;;;3446:24;;2167:21819;;-1:-1:-1;;;2167:21819:152;;2872:1;2167:21819;;3270:19;2167:21819;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;3388:27;;2167:21819;4141:91;;;;;:::i;:::-;2167:21819;;4141:91;;;;2167:21819;;;;4141:91;2167:21819;;;;;;;;;4062:69;;;;;:::i;:::-;2167:21819;;4062:69;;;;2167:21819;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;4977:67:30;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;4977:67:30;;4849:91;-1:-1:-1;;;4906:23:30;;2167:21819:152;6496:23:30;4906;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:30;;4724:34;;;-1:-1:-1;4724:34:30;;2167:21819:152;;;;;;;;;;;;;;6720:36;-1:-1:-1;;;;;;;;;;;2167:21819:152;6720:36;2167:21819;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;8910:11;;;;2376:23:162;23973:47:82;2167:21819:152;8910:11;23973:47:82;:::i;:::-;2167:21819:152;;;;;;676:2:162;2167:21819:152;;;698:2:162;2167:21819:152;390:319:162;;2376:23;-1:-1:-1;2167:21819:152;;;8955:17;;2167:21819;-1:-1:-1;8955:76:152;;;;2167:21819;8951:144;;;;21805:50:82;;;;:::i;:::-;;2167:21819:152;;8951:144;-1:-1:-1;;;9054:30:152;;2167:21819;9054:30;;8955:76;2167:21819;837:15:84;;;8995:36:152;837:15:84;;;819:34;837:15;819:34;:::i;:::-;2167:21819:152;;;;;8995:36;;:::i;:::-;2167:21819;;;8976:55;8955:76;;;;2167:21819;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;11335:5;2167:21819;;:::i;:::-;23773:5;;;:::i;:::-;11310:17;-1:-1:-1;;;;;;;;;;;2167:21819:152;11310:17;11335:5;:::i;2167:21819::-;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;7979:29;;2167:21819;;7979:29;;2167:21819;-1:-1:-1;;;;;2167:21819:152;7965:10;:43;7961:99;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;2167:21819:152;9862:8;;;;2167:21819;;;;;;;;;9848:10;:22;9844:71;;2167:21819;;;9950:12;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;9929:33;9925:90;;10025:30;;;;;;2167:21819;10070:13;;10224:8;2167:21819;10460:13;10224:8;;;10460:13;;2167:21819;;;;10065:677;10122:3;10089:24;;2167:21819;;10085:35;;;;;10177:27;;;;:::i;:::-;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;-1:-1:-1;2167:21819:152;;;;5197:14:83;;2167:21819:152;;;;;;5197:26:83;10219:99:152;;2167:21819;;;;10438:58;2167:21819;;;;2581:23:162;2167:21819:152;23973:47:82;2167:21819:152;;;;;;;;;23973:47:82;;:::i;2581:23:162:-;2167:21819:152;;;;-1:-1:-1;;;;;2167:21819:152;;;;;-1:-1:-1;2167:21819:152;-1:-1:-1;2167:21819:152;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;10438:58;;;;;2167:21819;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;;;;;:::i;:::-;10438:58;2167:21819;;10438:58;;;;;;:::i;:::-;2167:21819;;;;10595:14;;;2167:21819;;10595:14;;2167:21819;;10595:14;;-1:-1:-1;;;;;2167:21819:152;;;;;10510:106;;;;;2167:21819;;;;;;;;;;;;;;;;;;;10510:106;;2167:21819;10510:106;;2167:21819;;;;;;;;;;;;;;;;;;;:::i;:::-;10510:106;;;;;;;;;;;;;10122:3;2167:21819;;;10651:80;2167:21819;;;;;;;;;;;;;;;10683:47;;;2167:21819;;;;;;10683:47;;;;;;:::i;:::-;10651:80;:::i;:::-;10122:3;2167:21819;10070:13;;;10510:106;;;;;:::i;:::-;2167:21819;;10510:106;;;;;2167:21819;;;;;;;;;10510:106;2167:21819;;;10085:35;;10769:93;10085:35;;;2167:21819;;;;;10801:60;;;;2167:21819;;;;;;;;;;;;10801:60;;;10683:47;10801:60;;:::i;10769:93::-;2167:21819;;;;;10759:104;2167:21819;;;;;;9925:90;-1:-1:-1;;;9985:19:152;;2167:21819;19844:19;9985;9844:71;-1:-1:-1;;;9893:11:152;;2167:21819;9353:11;9893;2167:21819;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;9322:8;;;2167:21819;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;9308:10;:22;;;9304:71;;9398:12;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;9389:21;;9385:78;;9497:27;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;9473:101;;;;;;2167:21819;;;;;;;;;;;;9473:101;;2167:21819;9473:101;;2167:21819;;;;;;;;;;;;;;;9473:101;;;;;;;;2167:21819;;;;;;9602:30;;;;2167:21819;;;;;;;;9602:30;;;2167:21819;9602:30;;:::i;:::-;2167:21819;9592:41;;2167:21819;;;;;;9473:101;;;;;;:::i;:::-;2167:21819;;9473:101;;;;2167:21819;;;;;;;;;9385:78;-1:-1:-1;;;9433:19:152;;2167:21819;19844:19;9433;9304:71;-1:-1:-1;;;9353:11:152;;2167:21819;9353:11;;2167:21819;;;;;;;;;;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;;;;;2167:21819:152;;;;;;;-1:-1:-1;;;;;2167:21819:152;3975:40:29;2167:21819:152;;3975:40:29;2167:21819:152;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;7711:30;;2167:21819;;7711:30;;2167:21819;-1:-1:-1;;;;;2167:21819:152;7697:10;:44;7693:101;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;7693:101;-1:-1:-1;;;7764:19:152;;2167:21819;14910:19;7764;2167:21819;;;;;;;;;;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;6429:44:30;;;;;2167:21819:152;6425:105:30;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;2167:21819:152;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;6959:1:30;;-1:-1:-1;;;;;2167:21819:152;6891:76:30;;:::i;6959:1::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:29;;:::i;:::-;2167:21819:152;23580:27;;-1:-1:-1;;2167:21819:152;;;;;;;;;23561:52;2167:21819;23561:52;;2167:21819;;;;23561:52;;;;;;:::i;:::-;2167:21819;;23551:63;;-1:-1:-1;;23551:89:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;;;-1:-1:-1;;;2167:21819:152;-1:-1:-1;;;;;;2167:21819:152;;;;;;;23551:89;2167:21819;;;;-1:-1:-1;;;;2167:21819:152;-1:-1:-1;;;2167:21819:152;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;-1:-1:-1;;;2167:21819:152;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;-1:-1:-1;;;2167:21819:152;;;;;;;6591:4:30;4964:33:152;;2167:21819;;;6591:4:30;4928:33:152;;2167:21819;;;;;;;;;;4382:1;5046:36;;2167:21819;4382:1;5007:36;;2167:21819;5173:63;5129:34;;;-1:-1:-1;;;;;2167:21819:152;;;;5092:34;;5129;5092;;2167:21819;;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;5173:63;5270:21;;;;2167:21819;5246:21;;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;;;-1:-1:-1;;;;;;2167:21819:152;;;;;;;;5325:21;;;2167:21819;5301:21;;;2167:21819;5381:22;;;;2167:21819;5356:22;;;2167:21819;5433:17;;;;2167:21819;5413:17;;;2167:21819;;;;;;;;;;;5483:20;5460;;;;5483;;2167:21819;;;;;;5519:13;;;;5538:20;;;5659;5538;5659;;5514:192;5569:3;2167:21819;;5534:33;;;;;5619:26;5659:36;5619:26;6591:4:30;5619:26:152;;;:::i;:::-;5659:36;;;:::i;:::-;;2167:21819;5519:13;;5534:33;-1:-1:-1;5740:17:152;5855;;;;5534:33;5740:17;5534:33;;5768:3;2167:21819;;5736:30;;;;;5818:23;5855:33;5818:23;6591:4:30;5818:23:152;;;:::i;:::-;5855:33;;;:::i;:::-;;2167:21819;5721:13;;5736:30;;6654:20:30;2167:21819:152;5736:30;-1:-1:-1;;;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;4382:1;2167:21819;;6654:20:30;2167:21819:152;;;;;;-1:-1:-1;;;;;;2167:21819:152;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;6425:105:30;-1:-1:-1;;;6496:23:30;;2167:21819:152;;6496:23:30;6429:44;4382:1:152;2167:21819;;-1:-1:-1;;;;;2167:21819:152;6448:25:30;;6429:44;;;2167:21819:152;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;8754:10;8726:20;-1:-1:-1;;;;;;;;;;;2167:21819:152;8726:20;8754:10;;;:::i;2167:21819::-;;;;;;;-1:-1:-1;;2167:21819:152;;;;11218:5;2167:21819;;:::i;:::-;23773:5;;;:::i;:::-;11192:17;-1:-1:-1;;;;;;;;;;;2167:21819:152;11192:17;11218:5;:::i;2167:21819::-;;;;;;;;;;;;;;;6588:33;-1:-1:-1;;;;;;;;;;;2167:21819:152;6588:33;2167:21819;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;8274:28;;;2167:21819;;;-1:-1:-1;;;8264:60:152;;8313:10;2167:21819;8264:60;;2167:21819;;;;;;8264:60;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;8264:60;;;;;;;;;;;2167:21819;8263:61;;8259:121;;8408:24;;;2167:21819;;;-1:-1:-1;;;8394:76:152;;8313:10;2167:21819;8394:76;;2167:21819;8464:4;8264:60;2167:21819;;;;;;;;8394:76;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;8394:76;;;;;;;;;;;2167:21819;8393:77;;8389:137;;1037:50:162;837:15:84;2167:21819:152;819:34:84;837:15;819:34;:::i;:::-;2167:21819:152;8313:10;8536:11;8313:10;8536:11;;1037:50:162;:::i;:::-;1036:51;1032:103;;2167:21819:152;;1032:103:162;-1:-1:-1;;;1110:14:162;;2167:21819:152;;1110:14:162;8389:137:152;-1:-1:-1;;;8493:22:152;;2167:21819;8493:22;;8394:76;;;;2167:21819;8394:76;2167:21819;8394:76;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2167:21819;;;;;;;;;8259:121;-1:-1:-1;;;8347:22:152;;2167:21819;8347:22;;8264:60;;;;2167:21819;8264:60;2167:21819;8264:60;;;;;;;:::i;:::-;;;;2167:21819;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;23773:5;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;11497:8;;;;2376:23:162;23973:47:82;2167:21819:152;11497:8;23973:47:82;:::i;2376:23:162:-;-1:-1:-1;2167:21819:152;;;11536:17;;2167:21819;-1:-1:-1;11536:73:152;;;;2167:21819;11532:138;;;;21805:50:82;;;;:::i;11532:138:152:-;-1:-1:-1;;;11632:27:152;;2167:21819;11632:27;;11536:73;2167:21819;837:15:84;;;11576:33:152;837:15:84;;;819:34;837:15;819:34;:::i;:::-;2167:21819:152;;;;;11576:33;;:::i;:::-;2167:21819;;;11557:52;11536:73;;;;2167:21819;;;;;;;-1:-1:-1;;2167:21819:152;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;14857:30;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;14843:10;:44;14839:101;;14955:9;2167:21819;;14950:726;14983:3;2167:21819;;;;;14966:15;;;;;2167:21819;;;;;;;;;;;;;;;;;;;;;;;;;8806:28:83;-1:-1:-1;;;;;15080:18:152;2167:21819;;;15080:18;:::i;:::-;2167:21819;-1:-1:-1;2167:21819:152;;;5197:14:83;;;2167:21819:152;;;;;;5197:26:83;;;5101:129;8806:28;15058:41:152;15054:110;;15183:9;15223:3;15198:16;;;;2167:21819;;;15198:16;:::i;:::-;15194:27;;;;;;;15282:19;15198:16;15282;15198;;;2167:21819;;;15282:16;:::i;:::-;:19;;:::i;:::-;8806:28:83;-1:-1:-1;;;;;15343:15:152;;;:::i;:::-;2167:21819;-1:-1:-1;2167:21819:152;;;5197:14:83;;;2167:21819:152;;;;;;5197:26:83;;;5101:129;8806:28;15324:35:152;15320:109;;2167:21819;;;;;;-1:-1:-1;;;;;15472:15:152;2167:21819;15472:15;:::i;:::-;2167:21819;;;;;;;;;;15465:33;;;;;;;;;;;;;15223:3;15572:12;2167:21819;15572:12;;2167:21819;;15586:18;2167:21819;;;15586:18;:::i;:::-;15624:12;;;2167:21819;;;;;;;;15624:12;;;;2167:21819;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;;;;;;;;;;;;;;;;;15516:135;;2167:21819;15516:135;;2167:21819;;;;;;;;;;;15606:16;2167:21819;;;;;;15624:12;;;2167:21819;;;;;;;;;;;;;;;;:::i;:::-;15516:135;;-1:-1:-1;;;;;2167:21819:152;15516:135;;;;;;;2167:21819;15516:135;;;15223:3;;2167:21819;15183:9;;15516:135;;;;;;;;;;;;;:::i;:::-;;;;;15465:33;;;;;;;;;;;;;;;:::i;:::-;;;;;15194:27;;;2167:21819;15194:27;;2167:21819;14955:9;;;15054:110;-1:-1:-1;;;15126:23:152;;2167:21819;15126:23;;14966:15;;2167:21819;;14839:101;-1:-1:-1;;;14910:19:152;;2167:21819;14910:19;;2167:21819;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;23773:5;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;19532:11;;;2167:21819;;;-1:-1:-1;;;19522:53:152;;-1:-1:-1;;;;;2167:21819:152;;;;19522:53;;2167:21819;;;;;;;;;;;;;;;19522:53;;;;;;;2167:21819;19522:53;;;2167:21819;19521:54;;19517:109;;2167:21819;;-1:-1:-1;;;19640:35:152;;2167:21819;;;;19640:35;;;;;;;;2167:21819;19640:35;;;2167:21819;19679:25;;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;19640:64;19636:128;;2167:21819;;-1:-1:-1;;;19778:27:152;;2167:21819;;;;19778:27;;;;;;;;2167:21819;19778:27;;;2167:21819;-1:-1:-1;19809:12:152;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;19778:43;19774:100;;2167:21819;;-1:-1:-1;;;19940:30:152;;2167:21819;;;;19940:30;;;;;;;;2167:21819;19940:30;;;2167:21819;;;;;;;;;;;19984:44;;;19980:107;;2167:21819;;-1:-1:-1;;;20135:39:152;;2167:21819;;;;20135:39;;;;;;;;2167:21819;20135:39;;;2167:21819;20134:40;;20130:103;;2167:21819;;-1:-1:-1;;;20285:26:152;;2167:21819;;;;20285:26;;;;;;;;2167:21819;20285:26;;;2167:21819;-1:-1:-1;2167:21819:152;20352:12;;;2167:21819;;;;-1:-1:-1;;;20326:39:152;;;;;2167:21819;20352:12;;-1:-1:-1;;;;;2167:21819:152;;;;;;;20326:39;;;;;;;2167:21819;20326:39;;;2167:21819;-1:-1:-1;20326:60:152;20322:158;;2167:21819;;;;;;;;;;;;;20509:32;;;;;;;;;;;;;2167:21819;-1:-1:-1;;;;;;2167:21819:152;17103:82;;2167:21819;;-1:-1:-1;;;20589:37:152;;2167:21819;;;;20589:37;;;;;;;;;;;;2167:21819;20588:38;;20584:99;;2167:21819;;-1:-1:-1;;;20711:24:152;;2167:21819;;;;20711:24;;;;;;;;;;;;2167:21819;-1:-1:-1;2167:21819:152;;-1:-1:-1;;;20749:23:152;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;20749:23;;;;;;;;;;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;20749:48;20745:111;;2167:21819;;-1:-1:-1;;;20870:36:152;;2167:21819;;;;20870:36;;;;;;;;;;;;2167:21819;20866:98;;;2167:21819;;-1:-1:-1;;;20996:36:152;;2167:21819;;;;20996:36;;;;;;;;;;;;2167:21819;;;;;;;;;;;21046:32;21042:92;;21148:39;2167:21819;21163:24;;;;;2167:21819;;21148:39;;:::i;:::-;2167:21819;21148:60;21144:119;;2167:21819;;-1:-1:-1;;;21277:46:152;;2167:21819;;;;21277:46;;;;;;;;;;;;2167:21819;21326:27;;;;2167:21819;-1:-1:-1;21273:139:152;;2167:21819;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;;;;;;;;;;;;;;;;;21441:58;;2167:21819;21441:58;;2167:21819;;;;;;;;;;;:::i;:::-;21441:58;;;;;;;;;;;;;;2167:21819;-1:-1:-1;;;;;;2167:21819:152;21513:22;;;-1:-1:-1;21605:24:152;;2167:21819;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;:::i;:::-;;;;;;;;;21551:93;;;;;2167:21819;;;;;;;;;;;;;;;;;21551:93;;;2167:21819;21551:93;;2167:21819;;;;;;;;;;;;;;;:::i;:::-;21551:93;;;;;;;;;;;;;21509:299;;;;2167:21819;;-1:-1:-1;;;21894:23:152;;;2167:21819;;;21894:23;;;;;;;;;;;;21509:299;-1:-1:-1;;;;;;2167:21819:152;21894:37;21890:94;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;22100:41;;;2167:21819;;;;;;;;;;;22090:71;;;2167:21819;22090:71;;2167:21819;22090:71;;;;;;;;;;;21509:299;22089:72;;22085:135;;2167:21819;;-1:-1:-1;;;22234:39:152;;;2167:21819;;;22234:39;;;;;;;;;;;;21509:299;-1:-1:-1;;;;;;2167:21819:152;22234:49;22230:114;;2167:21819;;-1:-1:-1;;;22358:41:152;;;2167:21819;;;22358:41;;;;;;;;;-1:-1:-1;;;;;22358:41:152;21326:27;22358:41;;;;;21509:299;2167:21819;;;22358:46;22354:118;;11054:17;1037:50:162;837:15:84;;2167:21819:152;819:34:84;837:15;819:34;:::i;:::-;2167:21819:152;908:2:162;2167:21819:152;;;;-1:-1:-1;;;;;;2167:21819:152;835:76:162;;11054:17:152;1037:50:162;:::i;22354:118:152:-;-1:-1:-1;;;22427:34:152;;2167:21819;22427:34;;22358:41;;;;;;-1:-1:-1;22358:41:152;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2167:21819;;;;;;;;;22230:114;-1:-1:-1;;;22306:27:152;;2167:21819;22306:27;;22234:39;;;;;;;;;;;;;;:::i;:::-;;;;;2167:21819;;;;;;;;;22085:135;-1:-1:-1;;;22184:25:152;;2167:21819;22184:25;;22090:71;;;;;;;;;;;;;;:::i;:::-;;;;21890:94;-1:-1:-1;;;21954:19:152;;2167:21819;21954:19;;21894:23;;;;;;;;;;;;;;:::i;:::-;;;;21551:93;;;;;:::i;:::-;2167:21819;;21551:93;;;;21509:299;21677:24;;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;21665:36;;-1:-1:-1;21509:299:152;;-1:-1:-1;21661:147:152;-1:-1:-1;;;21779:18:152;;2167:21819;21779:18;;21441:58;;;;;;;;;;;;;;:::i;:::-;;;;21273:139;-1:-1:-1;;;21376:25:152;;2167:21819;21376:25;;21277:46;;;2167:21819;21277:46;;2167:21819;21277:46;;;;;;2167:21819;21277:46;;;:::i;:::-;;;2167:21819;;;;;21277:46;;;2167:21819;-1:-1:-1;2167:21819:152;;21277:46;;;-1:-1:-1;21277:46:152;;21144:119;-1:-1:-1;;;21231:21:152;;2167:21819;21231:21;;21042:92;-1:-1:-1;;;21101:22:152;;2167:21819;21101:22;;20996:36;;;;2167:21819;20996:36;2167:21819;20996:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;20866:98;-1:-1:-1;;;20929:24:152;;2167:21819;20929:24;;20870:36;;;;2167:21819;20870:36;2167:21819;20870:36;;;;;;;:::i;:::-;;;;20745:111;-1:-1:-1;;;20820:25:152;;2167:21819;20820:25;;20749:23;-1:-1:-1;;;;;20749:23:152;;;;;;2167:21819;20749:23;2167:21819;20749:23;;;;;;;:::i;:::-;;;;;;20711:24;;;;2167:21819;20711:24;2167:21819;20711:24;;;;;;;:::i;:::-;;;;20584:99;-1:-1:-1;;;20649:23:152;;2167:21819;20649:23;;20589:37;;;;2167:21819;20589:37;2167:21819;20589:37;;;;;;;:::i;:::-;;;;17103:82;-1:-1:-1;;;;;;17148:26:152;;2167:21819;17148:26;;20509:32;;;;2167:21819;20509:32;2167:21819;20509:32;;;;;;;:::i;:::-;;;;20322:158;20402:67;;;;;2167:21819;;-1:-1:-1;;;20402:67:152;;2167:21819;;20402:67;;2167:21819;;;-1:-1:-1;;2167:21819:152;;;;;20402:67;2167:21819;;20402:67;;;;;;;;;20322:158;;;;20402:67;;;;;2167:21819;20402:67;;:::i;:::-;2167:21819;;;20402:67;;;2167:21819;;;;;;;;;20326:39;;;2167:21819;20326:39;;2167:21819;20326:39;;;;;;2167:21819;20326:39;;;:::i;:::-;;;2167:21819;;;;;20326:39;;;;;;-1:-1:-1;20326:39:152;;20285:26;;;;2167:21819;20285:26;2167:21819;20285:26;;;;;;;:::i;:::-;;;;20130:103;20197:25;;;2167:21819;20197:25;2167:21819;;20197:25;20135:39;;;;2167:21819;20135:39;2167:21819;20135:39;;;;;;;:::i;:::-;;;;19980:107;20051:25;;;2167:21819;20051:25;2167:21819;;20051:25;19940:30;;;;2167:21819;19940:30;2167:21819;19940:30;;;;;;;:::i;:::-;;;;19774:100;19844:19;;;2167:21819;19844:19;2167:21819;;19844:19;19778:27;;;;2167:21819;19778:27;2167:21819;19778:27;;;;;;;:::i;:::-;;;;19636:128;19727:26;;;2167:21819;19727:26;2167:21819;;19727:26;19640:35;;;;2167:21819;19640:35;2167:21819;19640:35;;;;;;;:::i;:::-;;;;19517:109;19598:17;;;2167:21819;19598:17;2167:21819;;19598:17;19522:53;;;;2167:21819;19522:53;2167:21819;19522:53;;;;;;;:::i;:::-;;;;2167:21819;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;:::o;:::-;;;-1:-1:-1;;;;;2167:21819:152;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;;;-1:-1:-1;2167:21819:152;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;:::o;:::-;2872:1;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;2872:1;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;-1:-1:-1;;2167:21819:152;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;11715:1648::-;;11832:17;;2167:21819;;11967:29;;;:::i;:::-;2167:21819;;;12011:39;;;;12007:92;;11848:1;20369:17;;2167:21819;;;;;12187:368;12207:5;;;;;;12622:26;;;;12261:1;20369:17;;;2167:21819;;;;;;;;12678:25;;;;:::i;:::-;2167:21819;12718:25;12713:188;12773:3;2167:21819;;12745:26;;;;;12796:9;;;;;:::i;:::-;2167:21819;12796:22;12792:66;;12261:1;2167:21819;;;;;;;12261:1;12871:19;12773:3;2167:21819;12718:25;;;12792:66;12838:5;;;;;;;;;12713:188;12261:1;12915:18;;12911:316;;12713:188;13237:87;;;;;11715:1648;:::o;12911:316::-;2167:21819;;13078:20;;;2167:21819;;;;;;;;;;13078:20;;;;;;;:::i;:::-;2167:21819;13068:31;;2167:21819;;;;;13184:27;2167:21819;;13184:27;;:::i;:::-;-1:-1:-1;;2167:21819:152;;;;;;;13131:85;;-1:-1:-1;;;;;2167:21819:152;13168:48;;;;:::i;:::-;2167:21819;;;13131:85;;:::i;:::-;2167:21819;12911:316;;;;;2167:21819;;;;11848:1;2167:21819;;;;;11848:1;2167:21819;12745:26;;;;;;;;;;;;12214:3;12238:13;;;;;;;;;11848:1;12233:312;12268:3;2167:21819;;;;;-1:-1:-1;;2167:21819:152;;;;;;12253:13;;;;;12295:9;;;;:::i;:::-;2167:21819;12261:1;2167:21819;;;;;;;;12307:13;;;12261:1;12307:13;;;;;;:::i;:::-;2167:21819;-1:-1:-1;12291:240:152;;12268:3;;;;2167:21819;12238:13;;;12291:240;12421:91;2167:21819;12374:13;12344:55;12374:13;;;;;:::i;:::-;2167:21819;12389:9;;;;;:::i;:::-;2167:21819;12344:55;;;;:::i;:::-;2167:21819;12344:55;:::i;:::-;2167:21819;;;;;;12469:22;;;;:::i;:::-;2167:21819;;;12421:91;2167:21819;;;;;12493:18;;;;:::i;:::-;2167:21819;;;12421:91;;:::i;:::-;2167:21819;12291:240;;;;;12253:13;;;;;12261:1;12253:13;;;;;;2167:21819;12192:13;;;12007:92;12066:22;;;;;;;:::o;2167:21819::-;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;;:::i;:::-;:::o;13784:940::-;;22676:2;;;:::i;:::-;14047:11;-1:-1:-1;;;;;;;;;;;2167:21819:152;14047:11;2167:21819;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;:::i;:::-;;;;;;;-1:-1:-1;14172:9:152;-1:-1:-1;14167:416:152;14183:24;;;;;;14593:125;;;;;;;;;13936:23;13784:940;:::o;14209:3::-;2086:12:162;;;;2139:14;14328:35:152;2086:12:162;;;;;:::i;:::-;2139:14;;;2167:21819:152;;;;;;676:2:162;2167:21819:152;;;698:2:162;2167:21819:152;390:319:162;;2139:14;14328:35:152;;;:::i;:::-;14327:36;14323:83;;14420:39;14495:47;14420:39;;;;;:::i;:::-;-1:-1:-1;;;;;2167:21819:152;;;;14495:47;:::i;:::-;14473:69;;;;:::i;:::-;2167:21819;14571:1;2167:21819;;;;;;;14571:1;14556:16;14209:3;14172:9;2167:21819;14172:9;;;;;14323:83;14383:8;;14571:1;14383:8;;;13369:372;;13591:43;2167:21819;2376:23:162;23973:47:82;13537:20:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;13537:20;2167:21819;;;;;;;23973:47:82;;:::i;13591:43:152:-;13590:44;13586:83;;13687:47;;;:::i;:::-;13369:372;:::o;13586:83::-;13650:8;;-1:-1:-1;13650:8:152;:::o;3405:215:29:-;-1:-1:-1;;;;;2167:21819:152;3489:22:29;;3485:91;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;;;;;2167:21819:152;;;;;;;-1:-1:-1;;;;;2167:21819:152;3975:40:29;-1:-1:-1;;3975:40:29;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;2167:21819:152;;3509:1:29;3534:31;23803:181:152;2167:21819;;-1:-1:-1;;;23868:61:152;;2818:4;23868:61;;;2167:21819;23918:10;2818:4;;;2167:21819;;2818:4;;2167:21819;;23868:61;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;23868:61;;;;;;;2818:4;23868:61;;;23803:181;23867:62;;23863:115;;23803:181::o;23863:115::-;23952:15;;;2818:4;23952:15;23868:61;2818:4;23952:15;23868:61;;;;2818:4;23868:61;2818:4;23868:61;;;;;;;:::i;:::-;;;;2167:21819;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;1497:351:162:-;2167:21819:152;;1650:23:162;23973:47:82;-1:-1:-1;;;;;2167:21819:152;;23973:47:82;;:::i;1650:23:162:-;2167:21819:152;;;;;1688:16:162;;;:37;;;;;1497:351;1684:87;;;1781:60;837:15:84;-1:-1:-1;;;819:34:84;837:15;819:34;:::i;:::-;884:2:162;2167:21819:152;;835:52:162;908:2;2167:21819:152;;;;-1:-1:-1;;;;;;2167:21819:152;835:76:162;;1781:60;:::i;:::-;;1497:351::o;1684:87::-;1748:12;;;-1:-1:-1;1748:12:162;;-1:-1:-1;1748:12:162;1688:37;2167:21819:152;;;;1708:17:162;;1688:37;;;1147:344;2167:21819:152;;1299:23:162;23973:47:82;-1:-1:-1;;;;;2167:21819:152;;23973:47:82;;:::i;1299:23:162:-;2167:21819:152;;;;1337:16:162;;:37;;;;1147:344;1333:91;;;1434:50;837:15:84;2167:21819:152;819:34:84;837:15;819:34;:::i;:::-;2167:21819:152;908:2:162;2167:21819:152;;;;-1:-1:-1;;;;;;2167:21819:152;835:76:162;;1434:50;:::i;1333:91::-;1397:16;;;-1:-1:-1;1397:16:162;;-1:-1:-1;1397:16:162;1337:37;2167:21819:152;;;;1357:17:162;1337:37;;;2658:162:29;-1:-1:-1;;;;;;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;966:10:34;2717:23:29;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:29;966:10:34;2763:40:29;2167:21819:152;;-1:-1:-1;2763:40:29;23080:242:82;;;5853:18:83;5004:11:82;23080:242;5853:18:83;;:::i;:::-;2167:21819:152;;;;;;;;-1:-1:-1;2167:21819:152;5004:11:82;2167:21819:152;;;-1:-1:-1;2167:21819:152;;;;;;;;;23260:55:82;23080:242;:::o;21364:182::-;7898:23:83;21364:182:82;;2167:21819:152;;;;;;;;-1:-1:-1;2167:21819:152;3096:11:82;;;2167:21819:152;;;-1:-1:-1;2167:21819:152;;7898:23:83;:::i;22703:408:152:-;-1:-1:-1;;;;;;;;;;;2167:21819:152;837:15:84;2167:21819:152;819:34:84;837:15;819:34;:::i;:::-;2167:21819:152;;;;22807:22;;22803:80;;23015:16;2167:21819;;;;;;;;;;;;22914:42;;;:87;:42;;;:87;;23015:16;:::i;:::-;2167:21819;837:15:84;819:34;837:15;819:34;:::i;:::-;2167:21819:152;;;23015:36;;23011:94;;22703:408::o;23011:94::-;22852:20;;;-1:-1:-1;23074:20:152;;-1:-1:-1;23074:20:152;22914:87;;;;23015:16;:::i;16784:208::-;2167:21819;;16903:16;;;;16784:208;;16903:16;:37;;16784:208;16903:82;;;;16896:89;;16784:208;:::o;16903:82::-;2167:21819;;16945:17;;;-1:-1:-1;2167:21819:152;16945:39;;;;16903:82;;16784:208;:::o;16945:39::-;2167:21819;;-1:-1:-1;16966:18:152;;-1:-1:-1;16784:208:152;:::o;16903:37::-;2167:21819;;;-1:-1:-1;16923:17:152;;-1:-1:-1;16903:37:152;;;16222:556;-1:-1:-1;;;;;;;;;;;2167:21819:152;16401:8;;;2167:21819;;16685:25;16720:12;;;2167:21819;;;16222:556;2167:21819;;;;;;;16222:556;16397:21;;;;;;16222:556;;;;;;;;:::o;16420:3::-;2086:12:162;;;;;;;;2139:14;16551:53:152;2086:12:162;;;;;:::i;16551:53:152:-;16550:54;16546:101;;2167:21819;;-1:-1:-1;;;16685:25:152;;2167:21819;;;;;16685:25;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;16685:25;;;;;;;2167:21819;16685:25;;;2167:21819;16685:25;;;16420:3;2167:21819;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;16670:91:152;;16685:25;16670:91;;2167:21819;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16670:91;;-1:-1:-1;;;;;2167:21819:152;16670:91;;;;;;;2167:21819;16670:91;;;16420:3;16661:100;;;2167:21819;16661:100;;:::i;:::-;16420:3;16386:9;2167:21819;16386:9;;;;;;;;;16670:91;;;;;;;;;;;;;;;;:::i;:::-;;;2167:21819;;;;;;16670:91;;;;;;;16685:25;;;;;;;;;;;;;;:::i;:::-;;;;16546:101;16624:8;;2167:21819;16624:8;;;14296:213:80;2167:21819:152;14374:24:80;;14370:103;;2167:21819:152;;14296:213:80;:::o;14370:103::-;14421:41;;;;;14452:2;14421:41;2167:21819:152;;;;14421:41:80;;3330:164:82;;8192:26:83;3330:164:82;2167:21819:152;-1:-1:-1;2167:21819:152;3433:11:82;;;2167:21819:152;;-1:-1:-1;2167:21819:152;;;;8192:26:83;:::i;7082:141:30:-;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;7148:18:30;7144:73;;7082:141::o;7144:73::-;7189:17;;;-1:-1:-1;7189:17:30;;-1:-1:-1;7189:17:30;5626:274:82;;2167:21819:152;-1:-1:-1;2167:21819:152;5743:11:82;;;2167:21819:152;;;-1:-1:-1;2167:21819:152;;5773:10:82;;;;:33;;;;5626:274;5769:103;;;;5881:12;5626:274;:::o;5769:103::-;5829:32;;;-1:-1:-1;5829:32:82;;2167:21819:152;;-1:-1:-1;5829:32:82;5773:33;8806:28:83;;;5197:14;5101:129;-1:-1:-1;2167:21819:152;5197:14:83;2167:21819:152;;;-1:-1:-1;2167:21819:152;;5197:26:83;;5101:129;;8806:28;5787:19:82;5773:33;;;;2167:21819:152;;;;;;;;-1:-1:-1;2167:21819:152;;-1:-1:-1;2167:21819:152;;;-1:-1:-1;2167:21819:152;:::o;3071:1368:83:-;;3266:14;;;2167:21819:152;;;;;;;;;;;3302:13:83;;;3298:1135;3302:13;;;-1:-1:-1;;2167:21819:152;;;;;;;;;-1:-1:-1;;2167:21819:152;;;20369:17;2167:21819;;;;3777:23:83;;;3773:378;;3298:1135;2167:21819:152;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;;;;20369:17;;2167:21819;;;;;;;;;;;;;;;;;;3266:14:83;4368:11;:::o;2167:21819:152:-;;;;;;;;;;;;3773:378:83;2167:21819:152;3840:22:83;3961:23;3840:22;;;:::i;:::-;2167:21819:152;;;;;;3961:23:83;;;;;:::i;:::-;2167:21819:152;;;;;;;;;;20369:17;;;2167:21819;;;;;;;;;;;;;;;;;;;3773:378:83;;;;;3298:1135;4410:12;;;;2167:21819:152;4410:12:83;:::o;2497:406::-;-1:-1:-1;2167:21819:152;;;5197:14:83;;;2167:21819:152;;;;;;2581:21:83;;2167:21819:152;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:83;2167:21819:152;;;;;;;2832:11:83;:::o","linkReferences":{}},"methodIdentifiers":{"allowedVaultImplVersion()":"c9b0b1e9","changeSlashExecutor(address)":"86c241a1","changeSlashRequester(address)":"6d1064eb","collateral()":"d8dfeb45","disableOperator()":"d99fcd66","disableVault(address)":"3ccce789","distributeOperatorRewards(address,uint256,bytes32)":"729e2f36","distributeStakerRewards(((address,uint256)[],uint256,address),uint48)":"7fbe95b5","enableOperator()":"3d15e74e","enableVault(address)":"936f4330","eraDuration()":"4455a38f","executeSlash((address,uint256)[])":"af962995","getActiveOperatorsStakeAt(uint48)":"b5e5ad12","getOperatorStakeAt(address,uint48)":"d99ddfc7","initialize((address,uint48,uint48,uint48,uint48,uint48,uint48,uint64,uint64,uint256,uint256,address,address,(address,address,address,address,address,address,address,address,address,address)))":"ab122753","makeElectionAt(uint48,uint256)":"6e5c7932","maxAdminFee()":"c639e2d6","maxResolverSetEpochsDelay()":"9e032311","minSlashExecutionDelay()":"373bba1f","minVaultEpochDuration()":"945cf2dd","minVetoDuration()":"461e7a8e","operatorGracePeriod()":"709d06ae","owner()":"8da5cb5b","registerOperator()":"2acde098","registerVault(address,address)":"05c4fdf9","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestSlash((address,uint48,(address,uint256)[])[])":"0a71094c","router()":"f887ea40","subnetwork()":"ceebb69a","symbioticContracts()":"bcf33934","transferOwnership(address)":"f2fde38b","unregisterOperator(address)":"96115bc2","unregisterVault(address)":"2633b70f","vaultGracePeriod()":"79a8b245","vetoSlasherImplType()":"d55a5bdf"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BurnerHookNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelegatorNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"EnumerableMapNonexistentKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncompatibleSlasherType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncompatibleStakerRewardsVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncompatibleVaultVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectTimestamp\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStakerRewardsVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonFactoryStakerRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonFactoryVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotRegisteredOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotRegisteredVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSlashExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSlashRequester\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorDoesNotOptIn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorGracePeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResolverMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResolverSetDelayTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnknownCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedDelegatorHook\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultGracePeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultWrongEpochDuration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VetoDurationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VetoDurationTooShort\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowedVaultImplVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRole\",\"type\":\"address\"}],\"name\":\"changeSlashExecutor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRole\",\"type\":\"address\"}],\"name\":\"changeSlashRequester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"name\":\"disableVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"distributeOperatorRewards\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.StakerRewards[]\",\"name\":\"distribution\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct Gear.StakerRewardsCommitment\",\"name\":\"_commitment\",\"type\":\"tuple\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"}],\"name\":\"distributeStakerRewards\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"name\":\"enableVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eraDuration\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct IMiddleware.SlashIdentifier[]\",\"name\":\"slashes\",\"type\":\"tuple[]\"}],\"name\":\"executeSlash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"ts\",\"type\":\"uint48\"}],\"name\":\"getActiveOperatorsStakeAt\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"activeOperators\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"stakes\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"ts\",\"type\":\"uint48\"}],\"name\":\"getOperatorStakeAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"eraDuration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"minVaultEpochDuration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"operatorGracePeriod\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"vaultGracePeriod\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"minVetoDuration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"minSlashExecutionDelay\",\"type\":\"uint48\"},{\"internalType\":\"uint64\",\"name\":\"allowedVaultImplVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"vetoSlasherImplType\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"maxResolverSetEpochsDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAdminFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"vaultRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"networkRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"middlewareService\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"networkOptIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stakerRewardsFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorRewards\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"roleSlashRequester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"roleSlashExecutor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vetoResolver\",\"type\":\"address\"}],\"internalType\":\"struct Gear.SymbioticContracts\",\"name\":\"symbiotic\",\"type\":\"tuple\"}],\"internalType\":\"struct IMiddleware.InitParams\",\"name\":\"_params\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"ts\",\"type\":\"uint48\"},{\"internalType\":\"uint256\",\"name\":\"maxValidators\",\"type\":\"uint256\"}],\"name\":\"makeElectionAt\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAdminFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxResolverSetEpochsDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minSlashExecutionDelay\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minVaultEpochDuration\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minVetoDuration\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorGracePeriod\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rewards\",\"type\":\"address\"}],\"name\":\"registerVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"ts\",\"type\":\"uint48\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct IMiddleware.VaultSlashData[]\",\"name\":\"vaults\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IMiddleware.SlashData[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"requestSlash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetwork\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbioticContracts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"vaultRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"networkRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"middlewareService\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"networkOptIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stakerRewardsFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorRewards\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"roleSlashRequester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"roleSlashExecutor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vetoResolver\",\"type\":\"address\"}],\"internalType\":\"struct Gear.SymbioticContracts\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"unregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"name\":\"unregisterVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultGracePeriod\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vetoSlasherImplType\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BurnerHookNotSupported()\":[{\"details\":\"Emitted when vault's slasher has a burner hook.\"}],\"DelegatorNotInitialized()\":[{\"details\":\"Emitted in `registerVault` when vault's delegator is not initialized.\"}],\"EnumerableMapNonexistentKey(bytes32)\":[{\"details\":\"Query for a nonexistent map key.\"}],\"IncompatibleSlasherType()\":[{\"details\":\"Emitted in `registerVault` when the vaults' slasher type is not supported.\"}],\"IncompatibleStakerRewardsVersion()\":[{\"details\":\"Emitted when rewards contract has incompatible version.\"}],\"IncompatibleVaultVersion()\":[{\"details\":\"Emitted when the vault has incompatible version.\"}],\"IncorrectTimestamp()\":[{\"details\":\"Emitted when requested timestamp is in the future.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidStakerRewardsVault()\":[{\"details\":\"Emitted in `registerVault` when the vault in rewards contract is not the same as in the function parameter.\"}],\"NonFactoryStakerRewards()\":[{\"details\":\"Emitted when rewards contract was not created by the StakerRewardsFactory.\"}],\"NonFactoryVault()\":[{\"details\":\"Emitted when trying to register the vault from unknown factory.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"NotRegisteredOperator()\":[{\"details\":\"Emitted when `SlashData` contains the operator that is not registered in the Middleware.\"}],\"NotRegisteredVault()\":[{\"details\":\"Emitted when the vault is not registered in the Middleware.\"}],\"NotRouter()\":[{\"details\":\"Emitted when the `msg.sender` is not the Router contract.\"}],\"NotSlashExecutor()\":[{\"details\":\"Emitted when the `msg.sender` has not the role of slash executor.\"}],\"NotSlashRequester()\":[{\"details\":\"Emitted when the `msg.sender` has not the role of slash requester.\"}],\"NotVaultOwner()\":[{\"details\":\"Emitted when `msg.sender` is no the owner.\"}],\"OperatorDoesNotExist()\":[{\"details\":\"Emitted when the operator is not registered in the OperatorRegistry.\"}],\"OperatorDoesNotOptIn()\":[{\"details\":\"Emitted when the operator is not opted-in to the Middleware.\"}],\"OperatorGracePeriodNotPassed()\":[{\"details\":\"Emitted when trying to unregister the operator earlier then `operatorGracePeriod`.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"ResolverMismatch()\":[{\"details\":\"Emitted when slasher's veto resolver is not the same as in the Middleware.\"}],\"ResolverSetDelayTooLong()\":[{\"details\":\"Emitted when the slasher's delay to update the resolver is greater than the one in the Middleware.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SlasherNotInitialized()\":[{\"details\":\"Emitted in `registerVault` when vault's slasher is not initialized.\"}],\"UnknownCollateral()\":[{\"details\":\"Emitted when trying to distribute rewards with collateral that is not equal to the one in the Middleware.\"}],\"UnsupportedBurner()\":[{\"details\":\"Emitted when vault's burner is equal to `address(0)`.\"}],\"UnsupportedDelegatorHook()\":[{\"details\":\"Emitted when the delegator's hook is not equal to `address(0)`.\"}],\"VaultGracePeriodNotPassed()\":[{\"details\":\"Emitted when trying to unregister the vault earlier then `vaultGracePeriod`.\"}],\"VaultWrongEpochDuration()\":[{\"details\":\"Emitted when trying to register the vault with `epochDuration` less than `minVaultEpochDuration`.\"}],\"VetoDurationTooLong()\":[{\"details\":\"Emitted when the vault's slasher has a `vetoDuration` + `minShashExecutionDelay` is greater than vaultEpochDuration.\"}],\"VetoDurationTooShort()\":[{\"details\":\"Emitted when the vault's slasher has a `vetoDuration` less than `minVetoDuration`.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"getOperatorStakeAt(address,uint48)\":{\"returns\":{\"stake\":\"The total stake of the operator in all vaults that was active at the given timestamp.\"}},\"makeElectionAt(uint48,uint256)\":{\"details\":\"This function returns the list of validators that are will be responsible for block production in the next era.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerOperator()\":{\"details\":\"Operator must be registered in operator registry.\"},\"reinitialize()\":{\"custom:oz-upgrades-validate-as-initializer\":\"\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"IncompatibleStakerRewardsVersion()\":[{\"notice\":\"The version of the rewards contract is a index of the whitelisted versions in StakerRewardsFactory.\"}],\"IncompatibleVaultVersion()\":[{\"notice\":\"The version of the vault is a index of the whitelisted versions in VaultFactory.\"}]},\"kind\":\"user\",\"methods\":{\"disableOperator()\":{\"notice\":\"This function can be called only be operator themselves.\"},\"disableVault(address)\":{\"notice\":\"This function can be called only by the vault owner.\"},\"distributeOperatorRewards(address,uint256,bytes32)\":{\"notice\":\"The function can be called only by the Router contract.\"},\"enableOperator()\":{\"notice\":\"This function can be called only be operator themselves.\"},\"enableVault(address)\":{\"notice\":\"This function can be called only by the vault owner.\"},\"registerOperator()\":{\"notice\":\"This function can be called only be operator themselves.\"},\"unregisterOperator(address)\":{\"notice\":\"This function can be called only be operator themselves.\"},\"unregisterVault(address)\":{\"notice\":\"This function can be called only by the vault owner.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Middleware.sol\":\"Middleware\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@symbioticfi/core/=lib/symbiotic-rewards/lib/core/\",\":core/=lib/symbiotic-rewards/lib/core/\",\":ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":script/=script/\",\":src/=src/\",\":symbiotic-core/=lib/symbiotic-core/\",\":symbiotic-rewards/=lib/symbiotic-rewards/\",\":test/=test/\"],\"viaIR\":true},\"sources\":{\"lib/frost-secp256k1-evm/src/FROST.sol\":{\"keccak256\":\"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8\",\"dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA\"]},\"lib/frost-secp256k1-evm/src/utils/Memory.sol\":{\"keccak256\":\"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294\",\"dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb\",\"dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab\",\"dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol\":{\"keccak256\":\"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a\",\"dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol\":{\"keccak256\":\"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf\",\"dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol\":{\"keccak256\":\"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c\",\"dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]},\"lib/openzeppelin-contracts/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"lib/openzeppelin-contracts/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de\",\"dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol\":{\"keccak256\":\"0x5360739db087f427430f8566608e9267df704d96928337a3a3b3e5382925c57f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec939f4b4f68ca36961fd5ea7a417a6a390715173a6999254a2f0a34e9298503\",\"dweb:/ipfs/QmVEE8fRTjXE9jQ5pyKrPSyb9FPPtaWwsqjCdcxaPvAWwW\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"lib/openzeppelin-contracts/contracts/utils/types/Time.sol\":{\"keccak256\":\"0x36776530f012618bc7526ceb28e77b85e582cb12d9b9466a71d4bd6bf952e4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f867d046908497287d8a67643dd5d7e38c4027af4ab0a74ffbe1d6790c383c6\",\"dweb:/ipfs/QmQ7s9gMP1nkwThFmoDifnGgpUMsMe5q5ZrAxGDsNnRGza\"]},\"lib/symbiotic-core/src/contracts/libraries/Subnetwork.sol\":{\"keccak256\":\"0xf5ef5506fd66082b3c2e7f3df37529f5a8efad32ac62e7c8914bd63219190bfe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba031a54ee0d0e9a270c2b9e18437f5668cfeb659cfd5fe0677459d7fcac2a56\",\"dweb:/ipfs/QmReP3H7qQ78tAfgLnJKsNEQNCQfF1X1Get38Ffd4kzq32\"]},\"lib/symbiotic-core/src/interfaces/INetworkRegistry.sol\":{\"keccak256\":\"0x60dcd8ad04980a471f42b6ed57f6b96fbc4091db97b6314cb198914975327938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc207782fcb74a144ecb0c7dc1f427ee6de38710e0966c3cd43040493e11379f\",\"dweb:/ipfs/QmSa8LVejhmRr5T3pWYvUTrDr4fCfohfqyJfRyW2fV4zYy\"]},\"lib/symbiotic-core/src/interfaces/common/IEntity.sol\":{\"keccak256\":\"0x8ef4b63d6da63489778ccd5f8d13ebdd527dd4b62730b2c616df5af7474d2d21\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a8d69576a9219d85c50816a18ad53a4d53cfcb27ed38b8cccc808dc2734b71b\",\"dweb:/ipfs/QmYVN3P4Q4REvBWJ97TbAcaxm3uyB2anV6NSGa6ZtSwcEv\"]},\"lib/symbiotic-core/src/interfaces/common/IMigratableEntity.sol\":{\"keccak256\":\"0x8f5f2809f3afbe8ebfbb365dd7b57b4dd3b6f9943a6187eaf648d45895b8e3c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ffe640537d539e7a4fde70d30d3e4c57f4ba9c2c25c450cea713aae38e8fd5c\",\"dweb:/ipfs/QmSUTGzvdcn1R1KB7tLThMRtESsfPbeXDhhhKWGtntzBds\"]},\"lib/symbiotic-core/src/interfaces/common/IRegistry.sol\":{\"keccak256\":\"0x474c981518bb6ac974ba2a1274c49fd918d3b5acf1f3710e59786c5e3c8fc8bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db439e8880386dd308f8c67e612e9b15067fdffb29d6d0fd89c4edf820f30014\",\"dweb:/ipfs/QmQJuzgU17EZyPMoJNwknPkveK1Nwx1ByhZCBJzgRgcpvK\"]},\"lib/symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol\":{\"keccak256\":\"0x96bb312f032e17accce3f8f80936d99468029d6b37c9ca74acdb4b026a0148ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a66dcb5b7d1a6ef6a363431ea98ebd78bc4fdd3d7a134d9b542dc66e7d025c2\",\"dweb:/ipfs/QmRhTPLd2ZAyRHmJUFUcWKs9b3if49QY17LYZuRqWmghw8\"]},\"lib/symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol\":{\"keccak256\":\"0x347afc7fcf1fbcdb96d66162070ef6c78aed27b3af2c1d5dfb4e511840631783\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d90b8ceb495159e8e4e95d76447719dd166443f67dfabdd942846162071595c\",\"dweb:/ipfs/QmVVuiAWYx92T6vBvNMKZfTvraCf1fa16BsUKkdNs3hdHA\"]},\"lib/symbiotic-core/src/interfaces/service/IOptInService.sol\":{\"keccak256\":\"0x76fb5460a6d87a5705433d4fbeff7253cd75b8bbd0c888b2088f16e86ace146a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://990322019b3d11465f7024bae77ccbf7e2fe5d6fa3c754584778f37d04fa1337\",\"dweb:/ipfs/QmaSNHzcqxTkUCG9a4nqVfLECHLdjdrwAnDi3yDC7tDL24\"]},\"lib/symbiotic-core/src/interfaces/slasher/IBaseSlasher.sol\":{\"keccak256\":\"0x7c82528b445659c313ab77335c407b0b6efe5e79027187bb287f7bc74202b404\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0274c90aa5df1aa6bb470a6aab53992fb14fd7e5472c9430416505b29647d9cf\",\"dweb:/ipfs/QmckbmJLDetPemVzCnnGcKYWAZV2BRFXGDsjiaec8jkHxx\"]},\"lib/symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol\":{\"keccak256\":\"0xdf7edd04a4f36e9aec3a15241dcb6b6315b2e64927b12710c2c410d571fc55e9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c4be6ac339c2ebf230fed65363f036784224095d0cd0f3f2d01d64d6e0da9508\",\"dweb:/ipfs/QmRSMbpfaHExqrzUA8vYZMYZWh6eQW1KX9JKJSLdgronfg\"]},\"lib/symbiotic-core/src/interfaces/vault/IVault.sol\":{\"keccak256\":\"0xffee01d383cd4e1a5530c614bf4360c1ef070c288abec9da1eb531b51bc07235\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04f0046cac285d8ec44ebbb1f79dc94fab4495767190cad8364fbc1fafaadfb9\",\"dweb:/ipfs/QmUawAunwzXfCyShWfhKeThAgKtqe51hmrxvrXvM772M2R\"]},\"lib/symbiotic-core/src/interfaces/vault/IVaultStorage.sol\":{\"keccak256\":\"0x592626f13754194f83047135de19229c49390bd59e34659b1bb38be71d973a22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://06a6a9dfddd05e580b32bebe2cff4f63ba26a653180676d58225dd30d9c89d3e\",\"dweb:/ipfs/QmdgzBeY6Sxo8mGtyBxtv1tM1c2kU6J6zjeRd7vuXm4DU6\"]},\"lib/symbiotic-rewards/src/interfaces/defaultOperatorRewards/IDefaultOperatorRewards.sol\":{\"keccak256\":\"0xb0ba8270d29fa1af4a8024f20072d13bb2eefd3aa10a77dc4650829e738ddb28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6db9eca4620c65a96bc68d3b32d1b92f90558a354be72ac525e689162fda4b06\",\"dweb:/ipfs/QmV5TQpb7b9RMUrMNPw9n1rJX1TRyb573tUoG7rye2W1m4\"]},\"lib/symbiotic-rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol\":{\"keccak256\":\"0xc7ee0e2ffe9f592a6a295d216ab221cbacfcbeccbb06be6098e2b1e46863f6fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e6c09ad742a4836d07a4ec910f582a58991503f0244290c4a6c23fe641749e1a\",\"dweb:/ipfs/QmVR4k1D3ZNQVdJ1vkWpeZ1MAotsH4WTwCuu6Z2X1UJEb7\"]},\"lib/symbiotic-rewards/src/interfaces/stakerRewards/IStakerRewards.sol\":{\"keccak256\":\"0x7516733d48956a5d54243c843b977b402a3b53998b81dc0e9ec89afeabc2a60e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53571bf204dc1ccedc4a5f8154d4ad014c20e66f6196b062e260e14a7d0b6f4a\",\"dweb:/ipfs/QmT6JRgPjvQ5DEiFUMyrGxv6qxU1ZvyKMstdigtEKVpF41\"]},\"src/IMiddleware.sol\":{\"keccak256\":\"0x0875a0367485080460121eb75740dec89415b59f9940a781c6ccf684cccf1a90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abf8522c1c60625ecfab48ca43fec7ce61d787d71cfaa7b5ecff22682ad38570\",\"dweb:/ipfs/QmR7uYiQieqGkFk6tJsMuUFFFZTXN4DEdyTbxSHQE6mw3D\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x232d0d4cb3c5868088d3e0b613289fc1ec07199413f5cd11ff1362e1a9bebc79\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://311bd37f4a691c3a01306c0e115fbb2b3a6464d0146ecc3e08008a472440fad5\",\"dweb:/ipfs/QmWGyUaMR2FiuocLSVJC4Gzu8cnWUN75rZutndpWuLUPWx\"]},\"src/Middleware.sol\":{\"keccak256\":\"0x3853cfe3792a642df7243bd35451b3fb0927bb865ac1c5d9c6a9dacec4f5a0e9\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0555ec4766a5cdfd9c2ef3f6fbd371a48f5b465e8f798ebf6c845e268db081d7\",\"dweb:/ipfs/Qme2WABQZXBz2ocKKQRjWtk32FrLvGho2vVvFCkkYWUAR9\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0xc4dbccecfd856e8f08c0d96de2379632b560e43dbf91682ba3fa4d7dbd27d163\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://72a9289d5c80767308eef765192f2f1b7ff13e9815acaaf9f99219d6f52efcfc\",\"dweb:/ipfs/QmPRoskdmTEWyMp9fbJs5gnASfgsgxrhyjR9ciXkyYMsoW\"]},\"src/libraries/MapWithTimeData.sol\":{\"keccak256\":\"0xd5e3813aea7b34db7c31ced5757a812e19b810d40ae5038dc8df2652c5ec2453\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ef4830ca46e5c72cd313f9e9d545f1e16b6a13253d51a2e5513692afb5d91ce0\",\"dweb:/ipfs/QmZyhDZcQ4DMNYd1X8YUBWwepi9f2mZo8Yd54FEUGS3eT3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AlreadyAdded"},{"inputs":[],"type":"error","name":"AlreadyEnabled"},{"inputs":[],"type":"error","name":"BurnerHookNotSupported"},{"inputs":[],"type":"error","name":"DelegatorNotInitialized"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"type":"error","name":"EnumerableMapNonexistentKey"},{"inputs":[],"type":"error","name":"IncompatibleSlasherType"},{"inputs":[],"type":"error","name":"IncompatibleStakerRewardsVersion"},{"inputs":[],"type":"error","name":"IncompatibleVaultVersion"},{"inputs":[],"type":"error","name":"IncorrectTimestamp"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidStakerRewardsVault"},{"inputs":[],"type":"error","name":"NonFactoryStakerRewards"},{"inputs":[],"type":"error","name":"NonFactoryVault"},{"inputs":[],"type":"error","name":"NotEnabled"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"NotRegisteredOperator"},{"inputs":[],"type":"error","name":"NotRegisteredVault"},{"inputs":[],"type":"error","name":"NotRouter"},{"inputs":[],"type":"error","name":"NotSlashExecutor"},{"inputs":[],"type":"error","name":"NotSlashRequester"},{"inputs":[],"type":"error","name":"NotVaultOwner"},{"inputs":[],"type":"error","name":"OperatorDoesNotExist"},{"inputs":[],"type":"error","name":"OperatorDoesNotOptIn"},{"inputs":[],"type":"error","name":"OperatorGracePeriodNotPassed"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"ResolverMismatch"},{"inputs":[],"type":"error","name":"ResolverSetDelayTooLong"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"type":"error","name":"SafeCastOverflowedUintDowncast"},{"inputs":[],"type":"error","name":"SlasherNotInitialized"},{"inputs":[],"type":"error","name":"UnknownCollateral"},{"inputs":[],"type":"error","name":"UnsupportedBurner"},{"inputs":[],"type":"error","name":"UnsupportedDelegatorHook"},{"inputs":[],"type":"error","name":"VaultGracePeriodNotPassed"},{"inputs":[],"type":"error","name":"VaultWrongEpochDuration"},{"inputs":[],"type":"error","name":"VetoDurationTooLong"},{"inputs":[],"type":"error","name":"VetoDurationTooShort"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"allowedVaultImplVersion","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"address","name":"newRole","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"changeSlashExecutor"},{"inputs":[{"internalType":"address","name":"newRole","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"changeSlashRequester"},{"inputs":[],"stateMutability":"view","type":"function","name":"collateral","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"disableOperator"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"disableVault"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"distributeOperatorRewards","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct Gear.StakerRewardsCommitment","name":"_commitment","type":"tuple","components":[{"internalType":"struct Gear.StakerRewards[]","name":"distribution","type":"tuple[]","components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}]},{"internalType":"uint48","name":"timestamp","type":"uint48"}],"stateMutability":"nonpayable","type":"function","name":"distributeStakerRewards","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"enableOperator"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"enableVault"},{"inputs":[],"stateMutability":"view","type":"function","name":"eraDuration","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[{"internalType":"struct IMiddleware.SlashIdentifier[]","name":"slashes","type":"tuple[]","components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"executeSlash"},{"inputs":[{"internalType":"uint48","name":"ts","type":"uint48"}],"stateMutability":"view","type":"function","name":"getActiveOperatorsStakeAt","outputs":[{"internalType":"address[]","name":"activeOperators","type":"address[]"},{"internalType":"uint256[]","name":"stakes","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint48","name":"ts","type":"uint48"}],"stateMutability":"view","type":"function","name":"getOperatorStakeAt","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"struct IMiddleware.InitParams","name":"_params","type":"tuple","components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint48","name":"eraDuration","type":"uint48"},{"internalType":"uint48","name":"minVaultEpochDuration","type":"uint48"},{"internalType":"uint48","name":"operatorGracePeriod","type":"uint48"},{"internalType":"uint48","name":"vaultGracePeriod","type":"uint48"},{"internalType":"uint48","name":"minVetoDuration","type":"uint48"},{"internalType":"uint48","name":"minSlashExecutionDelay","type":"uint48"},{"internalType":"uint64","name":"allowedVaultImplVersion","type":"uint64"},{"internalType":"uint64","name":"vetoSlasherImplType","type":"uint64"},{"internalType":"uint256","name":"maxResolverSetEpochsDelay","type":"uint256"},{"internalType":"uint256","name":"maxAdminFee","type":"uint256"},{"internalType":"address","name":"collateral","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"struct Gear.SymbioticContracts","name":"symbiotic","type":"tuple","components":[{"internalType":"address","name":"vaultRegistry","type":"address"},{"internalType":"address","name":"operatorRegistry","type":"address"},{"internalType":"address","name":"networkRegistry","type":"address"},{"internalType":"address","name":"middlewareService","type":"address"},{"internalType":"address","name":"networkOptIn","type":"address"},{"internalType":"address","name":"stakerRewardsFactory","type":"address"},{"internalType":"address","name":"operatorRewards","type":"address"},{"internalType":"address","name":"roleSlashRequester","type":"address"},{"internalType":"address","name":"roleSlashExecutor","type":"address"},{"internalType":"address","name":"vetoResolver","type":"address"}]}]}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint48","name":"ts","type":"uint48"},{"internalType":"uint256","name":"maxValidators","type":"uint256"}],"stateMutability":"view","type":"function","name":"makeElectionAt","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxAdminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxResolverSetEpochsDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minSlashExecutionDelay","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minVaultEpochDuration","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minVetoDuration","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"operatorGracePeriod","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"registerOperator"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_rewards","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerVault"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"struct IMiddleware.SlashData[]","name":"data","type":"tuple[]","components":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint48","name":"ts","type":"uint48"},{"internalType":"struct IMiddleware.VaultSlashData[]","name":"vaults","type":"tuple[]","components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"requestSlash"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"subnetwork","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbioticContracts","outputs":[{"internalType":"struct Gear.SymbioticContracts","name":"","type":"tuple","components":[{"internalType":"address","name":"vaultRegistry","type":"address"},{"internalType":"address","name":"operatorRegistry","type":"address"},{"internalType":"address","name":"networkRegistry","type":"address"},{"internalType":"address","name":"middlewareService","type":"address"},{"internalType":"address","name":"networkOptIn","type":"address"},{"internalType":"address","name":"stakerRewardsFactory","type":"address"},{"internalType":"address","name":"operatorRewards","type":"address"},{"internalType":"address","name":"roleSlashRequester","type":"address"},{"internalType":"address","name":"roleSlashExecutor","type":"address"},{"internalType":"address","name":"vetoResolver","type":"address"}]}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"unregisterOperator"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"unregisterVault"},{"inputs":[],"stateMutability":"view","type":"function","name":"vaultGracePeriod","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"vetoSlasherImplType","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"getOperatorStakeAt(address,uint48)":{"returns":{"stake":"The total stake of the operator in all vaults that was active at the given timestamp."}},"makeElectionAt(uint48,uint256)":{"details":"This function returns the list of validators that are will be responsible for block production in the next era."},"owner()":{"details":"Returns the address of the current owner."},"registerOperator()":{"details":"Operator must be registered in operator registry."},"reinitialize()":{"custom:oz-upgrades-validate-as-initializer":""},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"disableOperator()":{"notice":"This function can be called only be operator themselves."},"disableVault(address)":{"notice":"This function can be called only by the vault owner."},"distributeOperatorRewards(address,uint256,bytes32)":{"notice":"The function can be called only by the Router contract."},"enableOperator()":{"notice":"This function can be called only be operator themselves."},"enableVault(address)":{"notice":"This function can be called only by the vault owner."},"registerOperator()":{"notice":"This function can be called only be operator themselves."},"unregisterOperator(address)":{"notice":"This function can be called only be operator themselves."},"unregisterVault(address)":{"notice":"This function can be called only by the vault owner."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@symbioticfi/core/=lib/symbiotic-rewards/lib/core/","core/=lib/symbiotic-rewards/lib/core/","ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","script/=script/","src/=src/","symbiotic-core/=lib/symbiotic-core/","symbiotic-rewards/=lib/symbiotic-rewards/","test/=test/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/Middleware.sol":"Middleware"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"lib/frost-secp256k1-evm/src/FROST.sol":{"keccak256":"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f","urls":["bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8","dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/Memory.sol":{"keccak256":"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859","urls":["bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294","dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol":{"keccak256":"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56","urls":["bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb","dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol":{"keccak256":"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc","urls":["bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab","dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol":{"keccak256":"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b","urls":["bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a","dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol":{"keccak256":"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a","urls":["bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf","dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol":{"keccak256":"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba","urls":["bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c","dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c","urls":["bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d","dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Arrays.sol":{"keccak256":"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e","urls":["bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d","dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Comparators.sol":{"keccak256":"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58","urls":["bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd","dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26","urls":["bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2","dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4","urls":["bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e","dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946","urls":["bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de","dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631","urls":["bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59","dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol":{"keccak256":"0x5360739db087f427430f8566608e9267df704d96928337a3a3b3e5382925c57f","urls":["bzz-raw://ec939f4b4f68ca36961fd5ea7a417a6a390715173a6999254a2f0a34e9298503","dweb:/ipfs/QmVEE8fRTjXE9jQ5pyKrPSyb9FPPtaWwsqjCdcxaPvAWwW"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77","urls":["bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b","dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/types/Time.sol":{"keccak256":"0x36776530f012618bc7526ceb28e77b85e582cb12d9b9466a71d4bd6bf952e4cc","urls":["bzz-raw://9f867d046908497287d8a67643dd5d7e38c4027af4ab0a74ffbe1d6790c383c6","dweb:/ipfs/QmQ7s9gMP1nkwThFmoDifnGgpUMsMe5q5ZrAxGDsNnRGza"],"license":"MIT"},"lib/symbiotic-core/src/contracts/libraries/Subnetwork.sol":{"keccak256":"0xf5ef5506fd66082b3c2e7f3df37529f5a8efad32ac62e7c8914bd63219190bfe","urls":["bzz-raw://ba031a54ee0d0e9a270c2b9e18437f5668cfeb659cfd5fe0677459d7fcac2a56","dweb:/ipfs/QmReP3H7qQ78tAfgLnJKsNEQNCQfF1X1Get38Ffd4kzq32"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/INetworkRegistry.sol":{"keccak256":"0x60dcd8ad04980a471f42b6ed57f6b96fbc4091db97b6314cb198914975327938","urls":["bzz-raw://fc207782fcb74a144ecb0c7dc1f427ee6de38710e0966c3cd43040493e11379f","dweb:/ipfs/QmSa8LVejhmRr5T3pWYvUTrDr4fCfohfqyJfRyW2fV4zYy"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/common/IEntity.sol":{"keccak256":"0x8ef4b63d6da63489778ccd5f8d13ebdd527dd4b62730b2c616df5af7474d2d21","urls":["bzz-raw://5a8d69576a9219d85c50816a18ad53a4d53cfcb27ed38b8cccc808dc2734b71b","dweb:/ipfs/QmYVN3P4Q4REvBWJ97TbAcaxm3uyB2anV6NSGa6ZtSwcEv"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/common/IMigratableEntity.sol":{"keccak256":"0x8f5f2809f3afbe8ebfbb365dd7b57b4dd3b6f9943a6187eaf648d45895b8e3c4","urls":["bzz-raw://0ffe640537d539e7a4fde70d30d3e4c57f4ba9c2c25c450cea713aae38e8fd5c","dweb:/ipfs/QmSUTGzvdcn1R1KB7tLThMRtESsfPbeXDhhhKWGtntzBds"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/common/IRegistry.sol":{"keccak256":"0x474c981518bb6ac974ba2a1274c49fd918d3b5acf1f3710e59786c5e3c8fc8bb","urls":["bzz-raw://db439e8880386dd308f8c67e612e9b15067fdffb29d6d0fd89c4edf820f30014","dweb:/ipfs/QmQJuzgU17EZyPMoJNwknPkveK1Nwx1ByhZCBJzgRgcpvK"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol":{"keccak256":"0x96bb312f032e17accce3f8f80936d99468029d6b37c9ca74acdb4b026a0148ee","urls":["bzz-raw://2a66dcb5b7d1a6ef6a363431ea98ebd78bc4fdd3d7a134d9b542dc66e7d025c2","dweb:/ipfs/QmRhTPLd2ZAyRHmJUFUcWKs9b3if49QY17LYZuRqWmghw8"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol":{"keccak256":"0x347afc7fcf1fbcdb96d66162070ef6c78aed27b3af2c1d5dfb4e511840631783","urls":["bzz-raw://2d90b8ceb495159e8e4e95d76447719dd166443f67dfabdd942846162071595c","dweb:/ipfs/QmVVuiAWYx92T6vBvNMKZfTvraCf1fa16BsUKkdNs3hdHA"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/service/IOptInService.sol":{"keccak256":"0x76fb5460a6d87a5705433d4fbeff7253cd75b8bbd0c888b2088f16e86ace146a","urls":["bzz-raw://990322019b3d11465f7024bae77ccbf7e2fe5d6fa3c754584778f37d04fa1337","dweb:/ipfs/QmaSNHzcqxTkUCG9a4nqVfLECHLdjdrwAnDi3yDC7tDL24"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/slasher/IBaseSlasher.sol":{"keccak256":"0x7c82528b445659c313ab77335c407b0b6efe5e79027187bb287f7bc74202b404","urls":["bzz-raw://0274c90aa5df1aa6bb470a6aab53992fb14fd7e5472c9430416505b29647d9cf","dweb:/ipfs/QmckbmJLDetPemVzCnnGcKYWAZV2BRFXGDsjiaec8jkHxx"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol":{"keccak256":"0xdf7edd04a4f36e9aec3a15241dcb6b6315b2e64927b12710c2c410d571fc55e9","urls":["bzz-raw://c4be6ac339c2ebf230fed65363f036784224095d0cd0f3f2d01d64d6e0da9508","dweb:/ipfs/QmRSMbpfaHExqrzUA8vYZMYZWh6eQW1KX9JKJSLdgronfg"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/vault/IVault.sol":{"keccak256":"0xffee01d383cd4e1a5530c614bf4360c1ef070c288abec9da1eb531b51bc07235","urls":["bzz-raw://04f0046cac285d8ec44ebbb1f79dc94fab4495767190cad8364fbc1fafaadfb9","dweb:/ipfs/QmUawAunwzXfCyShWfhKeThAgKtqe51hmrxvrXvM772M2R"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/vault/IVaultStorage.sol":{"keccak256":"0x592626f13754194f83047135de19229c49390bd59e34659b1bb38be71d973a22","urls":["bzz-raw://06a6a9dfddd05e580b32bebe2cff4f63ba26a653180676d58225dd30d9c89d3e","dweb:/ipfs/QmdgzBeY6Sxo8mGtyBxtv1tM1c2kU6J6zjeRd7vuXm4DU6"],"license":"MIT"},"lib/symbiotic-rewards/src/interfaces/defaultOperatorRewards/IDefaultOperatorRewards.sol":{"keccak256":"0xb0ba8270d29fa1af4a8024f20072d13bb2eefd3aa10a77dc4650829e738ddb28","urls":["bzz-raw://6db9eca4620c65a96bc68d3b32d1b92f90558a354be72ac525e689162fda4b06","dweb:/ipfs/QmV5TQpb7b9RMUrMNPw9n1rJX1TRyb573tUoG7rye2W1m4"],"license":"MIT"},"lib/symbiotic-rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol":{"keccak256":"0xc7ee0e2ffe9f592a6a295d216ab221cbacfcbeccbb06be6098e2b1e46863f6fc","urls":["bzz-raw://e6c09ad742a4836d07a4ec910f582a58991503f0244290c4a6c23fe641749e1a","dweb:/ipfs/QmVR4k1D3ZNQVdJ1vkWpeZ1MAotsH4WTwCuu6Z2X1UJEb7"],"license":"MIT"},"lib/symbiotic-rewards/src/interfaces/stakerRewards/IStakerRewards.sol":{"keccak256":"0x7516733d48956a5d54243c843b977b402a3b53998b81dc0e9ec89afeabc2a60e","urls":["bzz-raw://53571bf204dc1ccedc4a5f8154d4ad014c20e66f6196b062e260e14a7d0b6f4a","dweb:/ipfs/QmT6JRgPjvQ5DEiFUMyrGxv6qxU1ZvyKMstdigtEKVpF41"],"license":"MIT"},"src/IMiddleware.sol":{"keccak256":"0x0875a0367485080460121eb75740dec89415b59f9940a781c6ccf684cccf1a90","urls":["bzz-raw://abf8522c1c60625ecfab48ca43fec7ce61d787d71cfaa7b5ecff22682ad38570","dweb:/ipfs/QmR7uYiQieqGkFk6tJsMuUFFFZTXN4DEdyTbxSHQE6mw3D"],"license":"MIT"},"src/IRouter.sol":{"keccak256":"0x232d0d4cb3c5868088d3e0b613289fc1ec07199413f5cd11ff1362e1a9bebc79","urls":["bzz-raw://311bd37f4a691c3a01306c0e115fbb2b3a6464d0146ecc3e08008a472440fad5","dweb:/ipfs/QmWGyUaMR2FiuocLSVJC4Gzu8cnWUN75rZutndpWuLUPWx"],"license":"UNLICENSED"},"src/Middleware.sol":{"keccak256":"0x3853cfe3792a642df7243bd35451b3fb0927bb865ac1c5d9c6a9dacec4f5a0e9","urls":["bzz-raw://0555ec4766a5cdfd9c2ef3f6fbd371a48f5b465e8f798ebf6c845e268db081d7","dweb:/ipfs/Qme2WABQZXBz2ocKKQRjWtk32FrLvGho2vVvFCkkYWUAR9"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0xc4dbccecfd856e8f08c0d96de2379632b560e43dbf91682ba3fa4d7dbd27d163","urls":["bzz-raw://72a9289d5c80767308eef765192f2f1b7ff13e9815acaaf9f99219d6f52efcfc","dweb:/ipfs/QmPRoskdmTEWyMp9fbJs5gnASfgsgxrhyjR9ciXkyYMsoW"],"license":"UNLICENSED"},"src/libraries/MapWithTimeData.sol":{"keccak256":"0xd5e3813aea7b34db7c31ced5757a812e19b810d40ae5038dc8df2652c5ec2453","urls":["bzz-raw://ef4830ca46e5c72cd313f9e9d545f1e16b6a13253d51a2e5513692afb5d91ce0","dweb:/ipfs/QmZyhDZcQ4DMNYd1X8YUBWwepi9f2mZo8Yd54FEUGS3eT3"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Middleware.sol","id":75048,"exportedSymbols":{"EnumerableMap":[57294],"Gear":[80886],"IAccessControl":[43466],"IBaseDelegator":[64257],"IDefaultOperatorRewards":[70549],"IDefaultStakerRewards":[70743],"IEntity":[63851],"IMiddleware":[72281],"IMigratableEntity":[63959],"INetworkMiddlewareService":[64745],"INetworkRegistry":[63749],"IOptInService":[64871],"IRegistry":[64083],"IVault":[65607],"IVetoSlasher":[65269],"MapWithTimeData":[81168],"Middleware":[75047],"OwnableUpgradeable":[41409],"ReentrancyGuardTransientUpgradeable":[42870],"StorageSlot":[47840],"Subnetwork":[63729],"Time":[59094]},"nodeType":"SourceUnit","src":"39:23948:152","nodes":[{"id":72777,"nodeType":"PragmaDirective","src":"39:24:152","nodes":[],"literals":["solidity","^","0.8",".28"]},{"id":72779,"nodeType":"ImportDirective","src":"65:86:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableMap.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":57295,"symbolAliases":[{"foreign":{"id":72778,"name":"EnumerableMap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57294,"src":"73:13:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72781,"nodeType":"ImportDirective","src":"152:66:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/types/Time.sol","file":"@openzeppelin/contracts/utils/types/Time.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":59095,"symbolAliases":[{"foreign":{"id":72780,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"160:4:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72783,"nodeType":"ImportDirective","src":"219:42:152","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":80887,"symbolAliases":[{"foreign":{"id":72782,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"227:4:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72785,"nodeType":"ImportDirective","src":"263:46:152","nodes":[],"absolutePath":"src/IMiddleware.sol","file":"./IMiddleware.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":72282,"symbolAliases":[{"foreign":{"id":72784,"name":"IMiddleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72281,"src":"271:11:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72787,"nodeType":"ImportDirective","src":"310:81:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/contracts/libraries/Subnetwork.sol","file":"symbiotic-core/src/contracts/libraries/Subnetwork.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":63730,"symbolAliases":[{"foreign":{"id":72786,"name":"Subnetwork","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63729,"src":"318:10:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72789,"nodeType":"ImportDirective","src":"392:70:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/vault/IVault.sol","file":"symbiotic-core/src/interfaces/vault/IVault.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":65608,"symbolAliases":[{"foreign":{"id":72788,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"400:6:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72791,"nodeType":"ImportDirective","src":"463:77:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/common/IRegistry.sol","file":"symbiotic-core/src/interfaces/common/IRegistry.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":64084,"symbolAliases":[{"foreign":{"id":72790,"name":"IRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64083,"src":"471:9:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72793,"nodeType":"ImportDirective","src":"541:73:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/common/IEntity.sol","file":"symbiotic-core/src/interfaces/common/IEntity.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":63852,"symbolAliases":[{"foreign":{"id":72792,"name":"IEntity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63851,"src":"549:7:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72795,"nodeType":"ImportDirective","src":"615:90:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol","file":"symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":64258,"symbolAliases":[{"foreign":{"id":72794,"name":"IBaseDelegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64257,"src":"623:14:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72797,"nodeType":"ImportDirective","src":"706:84:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/INetworkRegistry.sol","file":"symbiotic-core/src/interfaces/INetworkRegistry.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":63750,"symbolAliases":[{"foreign":{"id":72796,"name":"INetworkRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63749,"src":"714:16:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72799,"nodeType":"ImportDirective","src":"791:86:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/service/IOptInService.sol","file":"symbiotic-core/src/interfaces/service/IOptInService.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":64872,"symbolAliases":[{"foreign":{"id":72798,"name":"IOptInService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64871,"src":"799:13:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72801,"nodeType":"ImportDirective","src":"878:110:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol","file":"symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":64746,"symbolAliases":[{"foreign":{"id":72800,"name":"INetworkMiddlewareService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64745,"src":"886:25:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72803,"nodeType":"ImportDirective","src":"989:84:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol","file":"symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":65270,"symbolAliases":[{"foreign":{"id":72802,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"997:12:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72805,"nodeType":"ImportDirective","src":"1074:93:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/common/IMigratableEntity.sol","file":"symbiotic-core/src/interfaces/common/IMigratableEntity.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":63960,"symbolAliases":[{"foreign":{"id":72804,"name":"IMigratableEntity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63959,"src":"1082:17:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72807,"nodeType":"ImportDirective","src":"1168:130:152","nodes":[],"absolutePath":"lib/symbiotic-rewards/src/interfaces/defaultOperatorRewards/IDefaultOperatorRewards.sol","file":"symbiotic-rewards/src/interfaces/defaultOperatorRewards/IDefaultOperatorRewards.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":70550,"symbolAliases":[{"foreign":{"id":72806,"name":"IDefaultOperatorRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70549,"src":"1181:23:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72809,"nodeType":"ImportDirective","src":"1299:118:152","nodes":[],"absolutePath":"lib/symbiotic-rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol","file":"symbiotic-rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":70744,"symbolAliases":[{"foreign":{"id":72808,"name":"IDefaultStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70743,"src":"1307:21:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72811,"nodeType":"ImportDirective","src":"1419:64:152","nodes":[],"absolutePath":"src/libraries/MapWithTimeData.sol","file":"./libraries/MapWithTimeData.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":81169,"symbolAliases":[{"foreign":{"id":72810,"name":"MapWithTimeData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81168,"src":"1427:15:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72813,"nodeType":"ImportDirective","src":"1484:81:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol","file":"@openzeppelin/contracts/access/IAccessControl.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":43467,"symbolAliases":[{"foreign":{"id":72812,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43466,"src":"1492:14:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72815,"nodeType":"ImportDirective","src":"1566:101:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":41410,"symbolAliases":[{"foreign":{"id":72814,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41409,"src":"1574:18:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72817,"nodeType":"ImportDirective","src":"1668:140:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardTransientUpgradeable.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":42871,"symbolAliases":[{"foreign":{"id":72816,"name":"ReentrancyGuardTransientUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42870,"src":"1681:35:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72819,"nodeType":"ImportDirective","src":"1809:74:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":75048,"sourceUnit":47841,"symbolAliases":[{"foreign":{"id":72818,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"1817:11:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75047,"nodeType":"ContractDefinition","src":"2167:21819:152","nodes":[{"id":72829,"nodeType":"UsingForDirective","src":"2265:55:152","nodes":[],"global":false,"libraryName":{"id":72826,"name":"EnumerableMap","nameLocations":["2271:13:152"],"nodeType":"IdentifierPath","referencedDeclaration":57294,"src":"2271:13:152"},"typeName":{"id":72828,"nodeType":"UserDefinedTypeName","pathNode":{"id":72827,"name":"EnumerableMap.AddressToUintMap","nameLocations":["2289:13:152","2303:16:152"],"nodeType":"IdentifierPath","referencedDeclaration":55618,"src":"2289:30:152"},"referencedDeclaration":55618,"src":"2289:30:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage_ptr","typeString":"struct EnumerableMap.AddressToUintMap"}}},{"id":72833,"nodeType":"UsingForDirective","src":"2325:57:152","nodes":[],"global":false,"libraryName":{"id":72830,"name":"MapWithTimeData","nameLocations":["2331:15:152"],"nodeType":"IdentifierPath","referencedDeclaration":81168,"src":"2331:15:152"},"typeName":{"id":72832,"nodeType":"UserDefinedTypeName","pathNode":{"id":72831,"name":"EnumerableMap.AddressToUintMap","nameLocations":["2351:13:152","2365:16:152"],"nodeType":"IdentifierPath","referencedDeclaration":55618,"src":"2351:30:152"},"referencedDeclaration":55618,"src":"2351:30:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage_ptr","typeString":"struct EnumerableMap.AddressToUintMap"}}},{"id":72837,"nodeType":"UsingForDirective","src":"2388:58:152","nodes":[],"global":false,"libraryName":{"id":72834,"name":"EnumerableMap","nameLocations":["2394:13:152"],"nodeType":"IdentifierPath","referencedDeclaration":57294,"src":"2394:13:152"},"typeName":{"id":72836,"nodeType":"UserDefinedTypeName","pathNode":{"id":72835,"name":"EnumerableMap.AddressToAddressMap","nameLocations":["2412:13:152","2426:19:152"],"nodeType":"IdentifierPath","referencedDeclaration":55913,"src":"2412:33:152"},"referencedDeclaration":55913,"src":"2412:33:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToAddressMap_$55913_storage_ptr","typeString":"struct EnumerableMap.AddressToAddressMap"}}},{"id":72841,"nodeType":"UsingForDirective","src":"2451:60:152","nodes":[],"global":false,"libraryName":{"id":72838,"name":"MapWithTimeData","nameLocations":["2457:15:152"],"nodeType":"IdentifierPath","referencedDeclaration":81168,"src":"2457:15:152"},"typeName":{"id":72840,"nodeType":"UserDefinedTypeName","pathNode":{"id":72839,"name":"EnumerableMap.AddressToAddressMap","nameLocations":["2477:13:152","2491:19:152"],"nodeType":"IdentifierPath","referencedDeclaration":55913,"src":"2477:33:152"},"referencedDeclaration":55913,"src":"2477:33:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToAddressMap_$55913_storage_ptr","typeString":"struct EnumerableMap.AddressToAddressMap"}}},{"id":72844,"nodeType":"UsingForDirective","src":"2517:29:152","nodes":[],"global":false,"libraryName":{"id":72842,"name":"Subnetwork","nameLocations":["2523:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":63729,"src":"2523:10:152"},"typeName":{"id":72843,"name":"address","nodeType":"ElementaryTypeName","src":"2538:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":72847,"nodeType":"VariableDeclaration","src":"2659:106:152","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"2684:12:152","scope":75047,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":72845,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2659:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307830623863353661663663633961643430316164323235626665393664663737663330343962613137656164616331636239356565383964663165363964313030","id":72846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2699:66:152","typeDescriptions":{"typeIdentifier":"t_rational_5223398203118087324979291777783578297303922957705888423515209926851254931712_by_1","typeString":"int_const 5223...(68 digits omitted)...1712"},"value":"0x0b8c56af6cc9ad401ad225bfe96df77f3049ba17eadac1cb95ee89df1e69d100"},"visibility":"private"},{"id":72850,"nodeType":"VariableDeclaration","src":"2772:50:152","nodes":[],"constant":true,"mutability":"constant","name":"DEFAULT_ADMIN_ROLE","nameLocation":"2797:18:152","scope":75047,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":72848,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2772:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"30783030","id":72849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2818:4:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"private"},{"id":72853,"nodeType":"VariableDeclaration","src":"2828:45:152","nodes":[],"constant":true,"mutability":"constant","name":"NETWORK_IDENTIFIER","nameLocation":"2851:18:152","scope":75047,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":72851,"name":"uint8","nodeType":"ElementaryTypeName","src":"2828:5:152","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30","id":72852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2872:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"private"},{"id":72861,"nodeType":"FunctionDefinition","src":"2933:53:152","nodes":[],"body":{"id":72860,"nodeType":"Block","src":"2947:39:152","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":72857,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41631,"src":"2957:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":72858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2957:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72859,"nodeType":"ExpressionStatement","src":"2957:22:152"}]},"documentation":{"id":72854,"nodeType":"StructuredDocumentation","src":"2880:48:152","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":72855,"nodeType":"ParameterList","parameters":[],"src":"2944:2:152"},"returnParameters":{"id":72856,"nodeType":"ParameterList","parameters":[],"src":"2947:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":73015,"nodeType":"FunctionDefinition","src":"2992:1277:152","nodes":[],"body":{"id":73014,"nodeType":"Block","src":"3060:1209:152","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":72870,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3085:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3093:5:152","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":72012,"src":"3085:13:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":72869,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"3070:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":72872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3070:29:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72873,"nodeType":"ExpressionStatement","src":"3070:29:152"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":72874,"name":"__ReentrancyGuardTransient_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42819,"src":"3109:31:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":72875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3109:33:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72876,"nodeType":"ExpressionStatement","src":"3109:33:152"},{"expression":{"arguments":[{"hexValue":"6d6964646c65776172652e73746f726167652e4d6964646c65776172655631","id":72878,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3169:33:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_02a5c5f8d11256fd69f3d6cf76a378a9929132c88934a20e220465858cdca742","typeString":"literal_string \"middleware.storage.MiddlewareV1\""},"value":"middleware.storage.MiddlewareV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_02a5c5f8d11256fd69f3d6cf76a378a9929132c88934a20e220465858cdca742","typeString":"literal_string \"middleware.storage.MiddlewareV1\""}],"id":72877,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75016,"src":"3153:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":72879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3153:50:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72880,"nodeType":"ExpressionStatement","src":"3153:50:152"},{"assignments":[72883],"declarations":[{"constant":false,"id":72883,"mutability":"mutable","name":"$","nameLocation":"3229:1:152","nodeType":"VariableDeclaration","scope":73014,"src":"3213:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":72882,"nodeType":"UserDefinedTypeName","pathNode":{"id":72881,"name":"Storage","nameLocations":["3213:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"3213:7:152"},"referencedDeclaration":72078,"src":"3213:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":72886,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":72884,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"3233:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":72885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3233:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3213:30:152"},{"expression":{"id":72892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72887,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3254:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3256:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"3254:13:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72890,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3270:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3278:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72014,"src":"3270:19:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3254:35:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72893,"nodeType":"ExpressionStatement","src":"3254:35:152"},{"expression":{"id":72899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72894,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3299:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3301:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"3299:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72897,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3325:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3333:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72016,"src":"3325:29:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3299:55:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72900,"nodeType":"ExpressionStatement","src":"3299:55:152"},{"expression":{"id":72906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72901,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3364:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3366:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"3364:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72904,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3388:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3396:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72018,"src":"3388:27:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3364:51:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72907,"nodeType":"ExpressionStatement","src":"3364:51:152"},{"expression":{"id":72913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72908,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3425:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3427:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"3425:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72911,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3446:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3454:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72020,"src":"3446:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3425:45:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72914,"nodeType":"ExpressionStatement","src":"3425:45:152"},{"expression":{"id":72920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72915,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3480:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3482:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"3480:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72918,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3500:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3508:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72022,"src":"3500:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3480:43:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72921,"nodeType":"ExpressionStatement","src":"3480:43:152"},{"expression":{"id":72927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72922,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3533:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3535:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"3533:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72925,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3560:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3568:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72024,"src":"3560:30:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3533:57:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72928,"nodeType":"ExpressionStatement","src":"3533:57:152"},{"expression":{"id":72934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72929,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3600:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72931,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3602:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"3600:27:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72932,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3630:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3638:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72030,"src":"3630:33:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3600:63:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":72935,"nodeType":"ExpressionStatement","src":"3600:63:152"},{"expression":{"id":72941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72936,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3673:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72938,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3675:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"3673:25:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72939,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3701:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3709:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72026,"src":"3701:31:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3673:59:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":72942,"nodeType":"ExpressionStatement","src":"3673:59:152"},{"expression":{"id":72948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72943,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3742:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72945,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3744:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"3742:21:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72946,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3766:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3774:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72028,"src":"3766:27:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3742:51:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":72949,"nodeType":"ExpressionStatement","src":"3742:51:152"},{"expression":{"id":72955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72950,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3826:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72952,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3828:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"3826:12:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72953,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3841:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3849:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72034,"src":"3841:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3826:33:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":72956,"nodeType":"ExpressionStatement","src":"3826:33:152"},{"expression":{"id":72967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72957,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3869:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3871:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"3869:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":72965,"name":"NETWORK_IDENTIFIER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72853,"src":"3909:18:152","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":72962,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3892:4:152","typeDescriptions":{"typeIdentifier":"t_contract$_Middleware_$75047","typeString":"contract Middleware"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Middleware_$75047","typeString":"contract Middleware"}],"id":72961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3884:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":72960,"name":"address","nodeType":"ElementaryTypeName","src":"3884:7:152","typeDescriptions":{}}},"id":72963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3884:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":72964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3898:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":63691,"src":"3884:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_uint96_$returns$_t_bytes32_$attached_to$_t_address_$","typeString":"function (address,uint96) pure returns (bytes32)"}},"id":72966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3884:44:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3869:59:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":72968,"nodeType":"ExpressionStatement","src":"3869:59:152"},{"expression":{"id":72974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72969,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3938:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72971,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3940:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"3938:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72972,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3954:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3962:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72032,"src":"3954:19:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3938:35:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":72975,"nodeType":"ExpressionStatement","src":"3938:35:152"},{"expression":{"id":72981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72976,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"3984:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3986:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"3984:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72979,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"3995:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4003:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72036,"src":"3995:14:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3984:25:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":72982,"nodeType":"ExpressionStatement","src":"3984:25:152"},{"expression":{"id":72988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72983,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"4020:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4022:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"4020:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72986,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"4034:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4042:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72039,"src":"4034:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_calldata_ptr","typeString":"struct Gear.SymbioticContracts calldata"}},"src":"4020:31:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":72989,"nodeType":"ExpressionStatement","src":"4020:31:152"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"expression":{"id":72991,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"4079:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4087:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72039,"src":"4079:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_calldata_ptr","typeString":"struct Gear.SymbioticContracts calldata"}},"id":72993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4097:15:152","memberName":"networkRegistry","nodeType":"MemberAccess","referencedDeclaration":80020,"src":"4079:33:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":72990,"name":"INetworkRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63749,"src":"4062:16:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_INetworkRegistry_$63749_$","typeString":"type(contract INetworkRegistry)"}},"id":72994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4062:51:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_INetworkRegistry_$63749","typeString":"contract INetworkRegistry"}},"id":72995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4114:15:152","memberName":"registerNetwork","nodeType":"MemberAccess","referencedDeclaration":63748,"src":"4062:67:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":72996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4062:69:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72997,"nodeType":"ExpressionStatement","src":"4062:69:152"},{"expression":{"arguments":[{"arguments":[{"id":73006,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4226:4:152","typeDescriptions":{"typeIdentifier":"t_contract$_Middleware_$75047","typeString":"contract Middleware"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Middleware_$75047","typeString":"contract Middleware"}],"id":73005,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4218:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":73004,"name":"address","nodeType":"ElementaryTypeName","src":"4218:7:152","typeDescriptions":{}}},"id":73007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4218:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":72999,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72864,"src":"4167:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":73000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4175:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72039,"src":"4167:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_calldata_ptr","typeString":"struct Gear.SymbioticContracts calldata"}},"id":73001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4185:17:152","memberName":"middlewareService","nodeType":"MemberAccess","referencedDeclaration":80022,"src":"4167:35:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":72998,"name":"INetworkMiddlewareService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64745,"src":"4141:25:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_INetworkMiddlewareService_$64745_$","typeString":"type(contract INetworkMiddlewareService)"}},"id":73002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4141:62:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_INetworkMiddlewareService_$64745","typeString":"contract INetworkMiddlewareService"}},"id":73003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4204:13:152","memberName":"setMiddleware","nodeType":"MemberAccess","referencedDeclaration":64744,"src":"4141:76:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":73008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4141:91:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73009,"nodeType":"ExpressionStatement","src":"4141:91:152"},{"expression":{"arguments":[{"id":73011,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72883,"src":"4260:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}],"id":73010,"name":"_validateStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74575,"src":"4243:16:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72078_storage_ptr_$returns$__$","typeString":"function (struct IMiddleware.Storage storage pointer) view"}},"id":73012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4243:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73013,"nodeType":"ExpressionStatement","src":"4243:19:152"}]},"functionSelector":"ab122753","implemented":true,"kind":"function","modifiers":[{"id":72867,"kind":"modifierInvocation","modifierName":{"id":72866,"name":"initializer","nameLocations":["3048:11:152"],"nodeType":"IdentifierPath","referencedDeclaration":41517,"src":"3048:11:152"},"nodeType":"ModifierInvocation","src":"3048:11:152"}],"name":"initialize","nameLocation":"3001:10:152","parameters":{"id":72865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":72864,"mutability":"mutable","name":"_params","nameLocation":"3032:7:152","nodeType":"VariableDeclaration","scope":73015,"src":"3012:27:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams"},"typeName":{"id":72863,"nodeType":"UserDefinedTypeName","pathNode":{"id":72862,"name":"InitParams","nameLocations":["3012:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":72040,"src":"3012:10:152"},"referencedDeclaration":72040,"src":"3012:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_storage_ptr","typeString":"struct IMiddleware.InitParams"}},"visibility":"internal"}],"src":"3011:29:152"},"returnParameters":{"id":72868,"nodeType":"ParameterList","parameters":[],"src":"3060:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":73212,"nodeType":"FunctionDefinition","src":"4327:1578:152","nodes":[],"body":{"id":73211,"nodeType":"Block","src":"4385:1520:152","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":73025,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41320,"src":"4410:5:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":73026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4410:7:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73024,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"4395:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":73027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4395:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73028,"nodeType":"ExpressionStatement","src":"4395:23:152"},{"assignments":[73031],"declarations":[{"constant":false,"id":73031,"mutability":"mutable","name":"oldStorage","nameLocation":"4445:10:152","nodeType":"VariableDeclaration","scope":73211,"src":"4429:26:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73030,"nodeType":"UserDefinedTypeName","pathNode":{"id":73029,"name":"Storage","nameLocations":["4429:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"4429:7:152"},"referencedDeclaration":72078,"src":"4429:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73034,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73032,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"4458:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4458:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4429:39:152"},{"expression":{"arguments":[{"hexValue":"6d6964646c65776172652e73746f726167652e4d6964646c65776172655632","id":73036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4495:33:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_0b71a9760d0d67d1ebdec611fce51798c1c69a6c591e7131d01cf132bade8405","typeString":"literal_string \"middleware.storage.MiddlewareV2\""},"value":"middleware.storage.MiddlewareV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0b71a9760d0d67d1ebdec611fce51798c1c69a6c591e7131d01cf132bade8405","typeString":"literal_string \"middleware.storage.MiddlewareV2\""}],"id":73035,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75016,"src":"4479:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":73037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4479:50:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73038,"nodeType":"ExpressionStatement","src":"4479:50:152"},{"assignments":[73041],"declarations":[{"constant":false,"id":73041,"mutability":"mutable","name":"newStorage","nameLocation":"4555:10:152","nodeType":"VariableDeclaration","scope":73211,"src":"4539:26:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73040,"nodeType":"UserDefinedTypeName","pathNode":{"id":73039,"name":"Storage","nameLocations":["4539:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"4539:7:152"},"referencedDeclaration":72078,"src":"4539:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73044,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73042,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"4568:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4568:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4539:39:152"},{"expression":{"id":73050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73045,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"4589:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73047,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4600:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"4589:22:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73048,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"4614:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73049,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4625:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"4614:22:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4589:47:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73051,"nodeType":"ExpressionStatement","src":"4589:47:152"},{"expression":{"id":73057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73052,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"4646:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73054,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4657:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"4646:32:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73055,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"4681:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4692:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"4681:32:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4646:67:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73058,"nodeType":"ExpressionStatement","src":"4646:67:152"},{"expression":{"id":73064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73059,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"4723:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4734:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"4723:30:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73062,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"4756:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73063,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4767:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"4756:30:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4723:63:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73065,"nodeType":"ExpressionStatement","src":"4723:63:152"},{"expression":{"id":73071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73066,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"4796:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4807:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"4796:27:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73069,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"4826:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4837:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"4826:27:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4796:57:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73072,"nodeType":"ExpressionStatement","src":"4796:57:152"},{"expression":{"id":73078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73073,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"4863:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4874:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"4863:26:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73076,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"4892:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4903:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"4892:26:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4863:55:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73079,"nodeType":"ExpressionStatement","src":"4863:55:152"},{"expression":{"id":73085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73080,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"4928:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4939:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"4928:33:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73083,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"4964:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4975:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"4964:33:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4928:69:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73086,"nodeType":"ExpressionStatement","src":"4928:69:152"},{"expression":{"id":73092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73087,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5007:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5018:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"5007:36:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73090,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5046:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5057:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"5046:36:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5007:75:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73093,"nodeType":"ExpressionStatement","src":"5007:75:152"},{"expression":{"id":73099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73094,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5092:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5103:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"5092:34:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73097,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5129:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5140:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"5129:34:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"5092:71:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":73100,"nodeType":"ExpressionStatement","src":"5092:71:152"},{"expression":{"id":73106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73101,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5173:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5184:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"5173:30:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73104,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5206:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5217:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"5206:30:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"5173:63:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":73107,"nodeType":"ExpressionStatement","src":"5173:63:152"},{"expression":{"id":73113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73108,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5246:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73110,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5257:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"5246:21:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73111,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5270:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73112,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5281:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"5270:21:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5246:45:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73114,"nodeType":"ExpressionStatement","src":"5246:45:152"},{"expression":{"id":73120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73115,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5301:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5312:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"5301:21:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73118,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5325:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5336:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"5325:21:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5301:45:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":73121,"nodeType":"ExpressionStatement","src":"5301:45:152"},{"expression":{"id":73127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73122,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5356:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5367:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"5356:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73125,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5381:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5392:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"5381:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5356:47:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73128,"nodeType":"ExpressionStatement","src":"5356:47:152"},{"expression":{"id":73134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73129,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5413:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5424:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"5413:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73132,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5433:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5444:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"5433:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5413:37:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73135,"nodeType":"ExpressionStatement","src":"5413:37:152"},{"expression":{"id":73141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73136,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5460:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5471:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"5460:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73139,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5483:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5494:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"5483:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"src":"5460:43:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73142,"nodeType":"ExpressionStatement","src":"5460:43:152"},{"body":{"id":73175,"nodeType":"Block","src":"5574:132:152","statements":[{"assignments":[73157,73159],"declarations":[{"constant":false,"id":73157,"mutability":"mutable","name":"key","nameLocation":"5597:3:152","nodeType":"VariableDeclaration","scope":73175,"src":"5589:11:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73156,"name":"address","nodeType":"ElementaryTypeName","src":"5589:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":73159,"mutability":"mutable","name":"value","nameLocation":"5610:5:152","nodeType":"VariableDeclaration","scope":73175,"src":"5602:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73158,"name":"uint256","nodeType":"ElementaryTypeName","src":"5602:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73165,"initialValue":{"arguments":[{"id":73163,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73144,"src":"5643:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":73160,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5619:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5630:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"5619:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5640:2:152","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":55773,"src":"5619:23:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint256)"}},"id":73164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5619:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5588:57:152"},{"expression":{"arguments":[{"id":73171,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73157,"src":"5684:3:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73172,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73159,"src":"5689:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":73166,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5659:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73169,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5670:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"5659:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73170,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5680:3:152","memberName":"set","nodeType":"MemberAccess","referencedDeclaration":55651,"src":"5659:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address,uint256) returns (bool)"}},"id":73173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5659:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73174,"nodeType":"ExpressionStatement","src":"5659:36:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73147,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73144,"src":"5534:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":73148,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5538:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5549:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"5538:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73150,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5559:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"5538:27:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":73151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5538:29:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5534:33:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73176,"initializationExpression":{"assignments":[73144],"declarations":[{"constant":false,"id":73144,"mutability":"mutable","name":"i","nameLocation":"5527:1:152","nodeType":"VariableDeclaration","scope":73176,"src":"5519:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73143,"name":"uint256","nodeType":"ElementaryTypeName","src":"5519:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73146,"initialValue":{"hexValue":"30","id":73145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5531:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5519:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5569:3:152","subExpression":{"id":73153,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73144,"src":"5569:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73155,"nodeType":"ExpressionStatement","src":"5569:3:152"},"nodeType":"ForStatement","src":"5514:192:152"},{"body":{"id":73209,"nodeType":"Block","src":"5773:126:152","statements":[{"assignments":[73191,73193],"declarations":[{"constant":false,"id":73191,"mutability":"mutable","name":"key","nameLocation":"5796:3:152","nodeType":"VariableDeclaration","scope":73209,"src":"5788:11:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73190,"name":"address","nodeType":"ElementaryTypeName","src":"5788:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":73193,"mutability":"mutable","name":"value","nameLocation":"5809:5:152","nodeType":"VariableDeclaration","scope":73209,"src":"5801:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73192,"name":"uint256","nodeType":"ElementaryTypeName","src":"5801:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73199,"initialValue":{"arguments":[{"id":73197,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73178,"src":"5839:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":73194,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5818:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5829:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"5818:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73196,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5836:2:152","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":55773,"src":"5818:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint256)"}},"id":73198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5818:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5787:54:152"},{"expression":{"arguments":[{"id":73205,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73191,"src":"5877:3:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73206,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73193,"src":"5882:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":73200,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73041,"src":"5855:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73203,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5866:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"5855:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73204,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5873:3:152","memberName":"set","nodeType":"MemberAccess","referencedDeclaration":55651,"src":"5855:21:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address,uint256) returns (bool)"}},"id":73207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5855:33:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73208,"nodeType":"ExpressionStatement","src":"5855:33:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73181,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73178,"src":"5736:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":73182,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73031,"src":"5740:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73183,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5751:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"5740:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73184,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5758:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"5740:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":73185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5740:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5736:30:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73210,"initializationExpression":{"assignments":[73178],"declarations":[{"constant":false,"id":73178,"mutability":"mutable","name":"i","nameLocation":"5729:1:152","nodeType":"VariableDeclaration","scope":73210,"src":"5721:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73177,"name":"uint256","nodeType":"ElementaryTypeName","src":"5721:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73180,"initialValue":{"hexValue":"30","id":73179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5733:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5721:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5768:3:152","subExpression":{"id":73187,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73178,"src":"5768:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73189,"nodeType":"ExpressionStatement","src":"5768:3:152"},"nodeType":"ForStatement","src":"5716:183:152"}]},"documentation":{"id":73016,"nodeType":"StructuredDocumentation","src":"4275:47:152","text":"@custom:oz-upgrades-validate-as-initializer"},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":73019,"kind":"modifierInvocation","modifierName":{"id":73018,"name":"onlyOwner","nameLocations":["4358:9:152"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"4358:9:152"},"nodeType":"ModifierInvocation","src":"4358:9:152"},{"arguments":[{"hexValue":"32","id":73021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4382:1:152","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":73022,"kind":"modifierInvocation","modifierName":{"id":73020,"name":"reinitializer","nameLocations":["4368:13:152"],"nodeType":"IdentifierPath","referencedDeclaration":41564,"src":"4368:13:152"},"nodeType":"ModifierInvocation","src":"4368:16:152"}],"name":"reinitialize","nameLocation":"4336:12:152","parameters":{"id":73017,"nodeType":"ParameterList","parameters":[],"src":"4348:2:152"},"returnParameters":{"id":73023,"nodeType":"ParameterList","parameters":[],"src":"4385:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":73222,"nodeType":"FunctionDefinition","src":"5926:98:152","nodes":[],"body":{"id":73221,"nodeType":"Block","src":"5978:46:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73217,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"5995:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5995:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6006:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"5995:22:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73216,"id":73220,"nodeType":"Return","src":"5988:29:152"}]},"baseFunctions":[72102],"functionSelector":"4455a38f","implemented":true,"kind":"function","modifiers":[],"name":"eraDuration","nameLocation":"5935:11:152","parameters":{"id":73213,"nodeType":"ParameterList","parameters":[],"src":"5946:2:152"},"returnParameters":{"id":73216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73222,"src":"5970:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73214,"name":"uint48","nodeType":"ElementaryTypeName","src":"5970:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"5969:8:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":73232,"nodeType":"FunctionDefinition","src":"6030:118:152","nodes":[],"body":{"id":73231,"nodeType":"Block","src":"6092:56:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73227,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"6109:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6109:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6120:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"6109:32:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73226,"id":73230,"nodeType":"Return","src":"6102:39:152"}]},"baseFunctions":[72107],"functionSelector":"945cf2dd","implemented":true,"kind":"function","modifiers":[],"name":"minVaultEpochDuration","nameLocation":"6039:21:152","parameters":{"id":73223,"nodeType":"ParameterList","parameters":[],"src":"6060:2:152"},"returnParameters":{"id":73226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73232,"src":"6084:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73224,"name":"uint48","nodeType":"ElementaryTypeName","src":"6084:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6083:8:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":73242,"nodeType":"FunctionDefinition","src":"6154:116:152","nodes":[],"body":{"id":73241,"nodeType":"Block","src":"6216:54:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73237,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"6233:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6233:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6244:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"6233:30:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73236,"id":73240,"nodeType":"Return","src":"6226:37:152"}]},"baseFunctions":[72112],"functionSelector":"709d06ae","implemented":true,"kind":"function","modifiers":[],"name":"operatorGracePeriod","nameLocation":"6163:19:152","parameters":{"id":73233,"nodeType":"ParameterList","parameters":[],"src":"6182:2:152"},"returnParameters":{"id":73236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73242,"src":"6208:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73234,"name":"uint48","nodeType":"ElementaryTypeName","src":"6208:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6207:8:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73252,"nodeType":"FunctionDefinition","src":"6276:110:152","nodes":[],"body":{"id":73251,"nodeType":"Block","src":"6335:51:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73247,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"6352:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6352:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6363:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"6352:27:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73246,"id":73250,"nodeType":"Return","src":"6345:34:152"}]},"baseFunctions":[72117],"functionSelector":"79a8b245","implemented":true,"kind":"function","modifiers":[],"name":"vaultGracePeriod","nameLocation":"6285:16:152","parameters":{"id":73243,"nodeType":"ParameterList","parameters":[],"src":"6301:2:152"},"returnParameters":{"id":73246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73245,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73252,"src":"6327:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73244,"name":"uint48","nodeType":"ElementaryTypeName","src":"6327:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6326:8:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73262,"nodeType":"FunctionDefinition","src":"6392:108:152","nodes":[],"body":{"id":73261,"nodeType":"Block","src":"6450:50:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73257,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"6467:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6467:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6478:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"6467:26:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73256,"id":73260,"nodeType":"Return","src":"6460:33:152"}]},"baseFunctions":[72122],"functionSelector":"461e7a8e","implemented":true,"kind":"function","modifiers":[],"name":"minVetoDuration","nameLocation":"6401:15:152","parameters":{"id":73253,"nodeType":"ParameterList","parameters":[],"src":"6416:2:152"},"returnParameters":{"id":73256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73255,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73262,"src":"6442:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73254,"name":"uint48","nodeType":"ElementaryTypeName","src":"6442:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6441:8:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73272,"nodeType":"FunctionDefinition","src":"6506:122:152","nodes":[],"body":{"id":73271,"nodeType":"Block","src":"6571:57:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73267,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"6588:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6588:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73269,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6599:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"6588:33:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73266,"id":73270,"nodeType":"Return","src":"6581:40:152"}]},"baseFunctions":[72127],"functionSelector":"373bba1f","implemented":true,"kind":"function","modifiers":[],"name":"minSlashExecutionDelay","nameLocation":"6515:22:152","parameters":{"id":73263,"nodeType":"ParameterList","parameters":[],"src":"6537:2:152"},"returnParameters":{"id":73266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73265,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73272,"src":"6563:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73264,"name":"uint48","nodeType":"ElementaryTypeName","src":"6563:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6562:8:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73282,"nodeType":"FunctionDefinition","src":"6634:129:152","nodes":[],"body":{"id":73281,"nodeType":"Block","src":"6703:60:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73277,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"6720:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6720:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6731:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"6720:36:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":73276,"id":73280,"nodeType":"Return","src":"6713:43:152"}]},"baseFunctions":[72132],"functionSelector":"9e032311","implemented":true,"kind":"function","modifiers":[],"name":"maxResolverSetEpochsDelay","nameLocation":"6643:25:152","parameters":{"id":73273,"nodeType":"ParameterList","parameters":[],"src":"6668:2:152"},"returnParameters":{"id":73276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73282,"src":"6694:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73274,"name":"uint256","nodeType":"ElementaryTypeName","src":"6694:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6693:9:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73292,"nodeType":"FunctionDefinition","src":"6769:124:152","nodes":[],"body":{"id":73291,"nodeType":"Block","src":"6835:58:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73287,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"6852:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6852:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6863:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"6852:34:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":73286,"id":73290,"nodeType":"Return","src":"6845:41:152"}]},"baseFunctions":[72137],"functionSelector":"c9b0b1e9","implemented":true,"kind":"function","modifiers":[],"name":"allowedVaultImplVersion","nameLocation":"6778:23:152","parameters":{"id":73283,"nodeType":"ParameterList","parameters":[],"src":"6801:2:152"},"returnParameters":{"id":73286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73292,"src":"6827:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":73284,"name":"uint64","nodeType":"ElementaryTypeName","src":"6827:6:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6826:8:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73302,"nodeType":"FunctionDefinition","src":"6899:116:152","nodes":[],"body":{"id":73301,"nodeType":"Block","src":"6961:54:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73297,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"6978:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6978:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6989:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"6978:30:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":73296,"id":73300,"nodeType":"Return","src":"6971:37:152"}]},"baseFunctions":[72142],"functionSelector":"d55a5bdf","implemented":true,"kind":"function","modifiers":[],"name":"vetoSlasherImplType","nameLocation":"6908:19:152","parameters":{"id":73293,"nodeType":"ParameterList","parameters":[],"src":"6927:2:152"},"returnParameters":{"id":73296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73295,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73302,"src":"6953:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":73294,"name":"uint64","nodeType":"ElementaryTypeName","src":"6953:6:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6952:8:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73312,"nodeType":"FunctionDefinition","src":"7021:99:152","nodes":[],"body":{"id":73311,"nodeType":"Block","src":"7075:45:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73307,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"7092:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7092:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7103:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"7092:21:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":73306,"id":73310,"nodeType":"Return","src":"7085:28:152"}]},"baseFunctions":[72147],"functionSelector":"d8dfeb45","implemented":true,"kind":"function","modifiers":[],"name":"collateral","nameLocation":"7030:10:152","parameters":{"id":73303,"nodeType":"ParameterList","parameters":[],"src":"7040:2:152"},"returnParameters":{"id":73306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73305,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73312,"src":"7066:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73304,"name":"address","nodeType":"ElementaryTypeName","src":"7066:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7065:9:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73322,"nodeType":"FunctionDefinition","src":"7126:99:152","nodes":[],"body":{"id":73321,"nodeType":"Block","src":"7180:45:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73317,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"7197:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7197:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7208:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"7197:21:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":73316,"id":73320,"nodeType":"Return","src":"7190:28:152"}]},"baseFunctions":[72152],"functionSelector":"ceebb69a","implemented":true,"kind":"function","modifiers":[],"name":"subnetwork","nameLocation":"7135:10:152","parameters":{"id":73313,"nodeType":"ParameterList","parameters":[],"src":"7145:2:152"},"returnParameters":{"id":73316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73322,"src":"7171:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":73314,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7171:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7170:9:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73332,"nodeType":"FunctionDefinition","src":"7231:101:152","nodes":[],"body":{"id":73331,"nodeType":"Block","src":"7286:46:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73327,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"7303:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7303:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7314:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"7303:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":73326,"id":73330,"nodeType":"Return","src":"7296:29:152"}]},"baseFunctions":[72157],"functionSelector":"c639e2d6","implemented":true,"kind":"function","modifiers":[],"name":"maxAdminFee","nameLocation":"7240:11:152","parameters":{"id":73323,"nodeType":"ParameterList","parameters":[],"src":"7251:2:152"},"returnParameters":{"id":73326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73325,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73332,"src":"7277:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73324,"name":"uint256","nodeType":"ElementaryTypeName","src":"7277:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7276:9:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73342,"nodeType":"FunctionDefinition","src":"7338:91:152","nodes":[],"body":{"id":73341,"nodeType":"Block","src":"7388:41:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73337,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"7405:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7405:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7416:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"7405:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":73336,"id":73340,"nodeType":"Return","src":"7398:24:152"}]},"baseFunctions":[72162],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"7347:6:152","parameters":{"id":73333,"nodeType":"ParameterList","parameters":[],"src":"7353:2:152"},"returnParameters":{"id":73336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73342,"src":"7379:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73334,"name":"address","nodeType":"ElementaryTypeName","src":"7379:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7378:9:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73353,"nodeType":"FunctionDefinition","src":"7435:129:152","nodes":[],"body":{"id":73352,"nodeType":"Block","src":"7520:44:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73348,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"7537:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7537:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73350,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7548:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"7537:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"functionReturnParameters":73347,"id":73351,"nodeType":"Return","src":"7530:27:152"}]},"baseFunctions":[72168],"functionSelector":"bcf33934","implemented":true,"kind":"function","modifiers":[],"name":"symbioticContracts","nameLocation":"7444:18:152","parameters":{"id":73343,"nodeType":"ParameterList","parameters":[],"src":"7462:2:152"},"returnParameters":{"id":73347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73353,"src":"7488:30:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_memory_ptr","typeString":"struct Gear.SymbioticContracts"},"typeName":{"id":73345,"nodeType":"UserDefinedTypeName","pathNode":{"id":73344,"name":"Gear.SymbioticContracts","nameLocations":["7488:4:152","7493:18:152"],"nodeType":"IdentifierPath","referencedDeclaration":80035,"src":"7488:23:152"},"referencedDeclaration":80035,"src":"7488:23:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage_ptr","typeString":"struct Gear.SymbioticContracts"}},"visibility":"internal"}],"src":"7487:32:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73384,"nodeType":"FunctionDefinition","src":"7587:263:152","nodes":[],"body":{"id":73383,"nodeType":"Block","src":"7643:207:152","nodes":[],"statements":[{"assignments":[73360],"declarations":[{"constant":false,"id":73360,"mutability":"mutable","name":"$","nameLocation":"7669:1:152","nodeType":"VariableDeclaration","scope":73383,"src":"7653:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73359,"nodeType":"UserDefinedTypeName","pathNode":{"id":73358,"name":"Storage","nameLocations":["7653:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"7653:7:152"},"referencedDeclaration":72078,"src":"7653:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73363,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73361,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"7673:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7673:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7653:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73364,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7697:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7701:6:152","memberName":"sender","nodeType":"MemberAccess","src":"7697:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":73366,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73360,"src":"7711:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73367,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7713:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"7711:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73368,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7723:18:152","memberName":"roleSlashRequester","nodeType":"MemberAccess","referencedDeclaration":80030,"src":"7711:30:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7697:44:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73374,"nodeType":"IfStatement","src":"7693:101:152","trueBody":{"id":73373,"nodeType":"Block","src":"7743:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73370,"name":"NotSlashRequester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72001,"src":"7764:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7764:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73372,"nodeType":"RevertStatement","src":"7757:26:152"}]}},{"expression":{"id":73381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":73375,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73360,"src":"7803:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7805:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"7803:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73379,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7815:18:152","memberName":"roleSlashRequester","nodeType":"MemberAccess","referencedDeclaration":80030,"src":"7803:30:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":73380,"name":"newRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73355,"src":"7836:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7803:40:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73382,"nodeType":"ExpressionStatement","src":"7803:40:152"}]},"baseFunctions":[72173],"functionSelector":"6d1064eb","implemented":true,"kind":"function","modifiers":[],"name":"changeSlashRequester","nameLocation":"7596:20:152","parameters":{"id":73356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73355,"mutability":"mutable","name":"newRole","nameLocation":"7625:7:152","nodeType":"VariableDeclaration","scope":73384,"src":"7617:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73354,"name":"address","nodeType":"ElementaryTypeName","src":"7617:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7616:17:152"},"returnParameters":{"id":73357,"nodeType":"ParameterList","parameters":[],"src":"7643:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73415,"nodeType":"FunctionDefinition","src":"7856:259:152","nodes":[],"body":{"id":73414,"nodeType":"Block","src":"7911:204:152","nodes":[],"statements":[{"assignments":[73391],"declarations":[{"constant":false,"id":73391,"mutability":"mutable","name":"$","nameLocation":"7937:1:152","nodeType":"VariableDeclaration","scope":73414,"src":"7921:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73390,"nodeType":"UserDefinedTypeName","pathNode":{"id":73389,"name":"Storage","nameLocations":["7921:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"7921:7:152"},"referencedDeclaration":72078,"src":"7921:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73394,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73392,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"7941:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7941:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7921:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73395,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7965:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7969:6:152","memberName":"sender","nodeType":"MemberAccess","src":"7965:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":73397,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73391,"src":"7979:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73398,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7981:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"7979:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7991:17:152","memberName":"roleSlashExecutor","nodeType":"MemberAccess","referencedDeclaration":80032,"src":"7979:29:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7965:43:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73405,"nodeType":"IfStatement","src":"7961:99:152","trueBody":{"id":73404,"nodeType":"Block","src":"8010:50:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73401,"name":"NotSlashExecutor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72004,"src":"8031:16:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8031:18:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73403,"nodeType":"RevertStatement","src":"8024:25:152"}]}},{"expression":{"id":73412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":73406,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73391,"src":"8069:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73409,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8071:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"8069:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8081:17:152","memberName":"roleSlashExecutor","nodeType":"MemberAccess","referencedDeclaration":80032,"src":"8069:29:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":73411,"name":"newRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73386,"src":"8101:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8069:39:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73413,"nodeType":"ExpressionStatement","src":"8069:39:152"}]},"baseFunctions":[72178],"functionSelector":"86c241a1","implemented":true,"kind":"function","modifiers":[],"name":"changeSlashExecutor","nameLocation":"7865:19:152","parameters":{"id":73387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73386,"mutability":"mutable","name":"newRole","nameLocation":"7893:7:152","nodeType":"VariableDeclaration","scope":73415,"src":"7885:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73385,"name":"address","nodeType":"ElementaryTypeName","src":"7885:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7884:17:152"},"returnParameters":{"id":73388,"nodeType":"ParameterList","parameters":[],"src":"7911:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73469,"nodeType":"FunctionDefinition","src":"8171:405:152","nodes":[],"body":{"id":73468,"nodeType":"Block","src":"8208:368:152","nodes":[],"statements":[{"assignments":[73420],"declarations":[{"constant":false,"id":73420,"mutability":"mutable","name":"$","nameLocation":"8234:1:152","nodeType":"VariableDeclaration","scope":73468,"src":"8218:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73419,"nodeType":"UserDefinedTypeName","pathNode":{"id":73418,"name":"Storage","nameLocations":["8218:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"8218:7:152"},"referencedDeclaration":72078,"src":"8218:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73423,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73421,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"8238:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8238:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8218:30:152"},{"condition":{"id":73433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8263:61:152","subExpression":{"arguments":[{"expression":{"id":73430,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8313:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8317:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8313:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":73425,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73420,"src":"8274:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73426,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8276:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"8274:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8286:16:152","memberName":"operatorRegistry","nodeType":"MemberAccess","referencedDeclaration":80018,"src":"8274:28:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73424,"name":"IRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64083,"src":"8264:9:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRegistry_$64083_$","typeString":"type(contract IRegistry)"}},"id":73428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8264:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRegistry_$64083","typeString":"contract IRegistry"}},"id":73429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8304:8:152","memberName":"isEntity","nodeType":"MemberAccess","referencedDeclaration":64068,"src":"8264:48:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":73432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8264:60:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73438,"nodeType":"IfStatement","src":"8259:121:152","trueBody":{"id":73437,"nodeType":"Block","src":"8326:54:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73434,"name":"OperatorDoesNotExist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71950,"src":"8347:20:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8347:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73436,"nodeType":"RevertStatement","src":"8340:29:152"}]}},{"condition":{"id":73452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8393:77:152","subExpression":{"arguments":[{"expression":{"id":73445,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8444:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8448:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8444:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":73449,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8464:4:152","typeDescriptions":{"typeIdentifier":"t_contract$_Middleware_$75047","typeString":"contract Middleware"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Middleware_$75047","typeString":"contract Middleware"}],"id":73448,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8456:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":73447,"name":"address","nodeType":"ElementaryTypeName","src":"8456:7:152","typeDescriptions":{}}},"id":73450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8456:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":73440,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73420,"src":"8408:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8410:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"8408:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8420:12:152","memberName":"networkOptIn","nodeType":"MemberAccess","referencedDeclaration":80024,"src":"8408:24:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73439,"name":"IOptInService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64871,"src":"8394:13:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOptInService_$64871_$","typeString":"type(contract IOptInService)"}},"id":73443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8394:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOptInService_$64871","typeString":"contract IOptInService"}},"id":73444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8434:9:152","memberName":"isOptedIn","nodeType":"MemberAccess","referencedDeclaration":64818,"src":"8394:49:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view external returns (bool)"}},"id":73451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8394:76:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73457,"nodeType":"IfStatement","src":"8389:137:152","trueBody":{"id":73456,"nodeType":"Block","src":"8472:54:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73453,"name":"OperatorDoesNotOptIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71953,"src":"8493:20:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8493:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73455,"nodeType":"RevertStatement","src":"8486:29:152"}]}},{"expression":{"arguments":[{"expression":{"id":73463,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8555:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8559:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8555:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":73465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8567:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"expression":{"id":73458,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73420,"src":"8536:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8538:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"8536:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8548:6:152","memberName":"append","nodeType":"MemberAccess","referencedDeclaration":80993,"src":"8536:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$_t_uint160_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address,uint160)"}},"id":73466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8536:33:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73467,"nodeType":"ExpressionStatement","src":"8536:33:152"}]},"baseFunctions":[72217],"functionSelector":"2acde098","implemented":true,"kind":"function","modifiers":[],"name":"registerOperator","nameLocation":"8180:16:152","parameters":{"id":73416,"nodeType":"ParameterList","parameters":[],"src":"8196:2:152"},"returnParameters":{"id":73417,"nodeType":"ParameterList","parameters":[],"src":"8208:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73481,"nodeType":"FunctionDefinition","src":"8582:93:152","nodes":[],"body":{"id":73480,"nodeType":"Block","src":"8618:57:152","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":73476,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8657:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8661:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8657:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73472,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"8628:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8628:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8639:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"8628:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73475,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8649:7:152","memberName":"disable","nodeType":"MemberAccess","referencedDeclaration":81087,"src":"8628:28:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address)"}},"id":73478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8628:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73479,"nodeType":"ExpressionStatement","src":"8628:40:152"}]},"baseFunctions":[72221],"functionSelector":"d99fcd66","implemented":true,"kind":"function","modifiers":[],"name":"disableOperator","nameLocation":"8591:15:152","parameters":{"id":73470,"nodeType":"ParameterList","parameters":[],"src":"8606:2:152"},"returnParameters":{"id":73471,"nodeType":"ParameterList","parameters":[],"src":"8618:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73493,"nodeType":"FunctionDefinition","src":"8681:91:152","nodes":[],"body":{"id":73492,"nodeType":"Block","src":"8716:56:152","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":73488,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8754:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8758:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8754:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73484,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"8726:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8726:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8737:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"8726:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8747:6:152","memberName":"enable","nodeType":"MemberAccess","referencedDeclaration":81040,"src":"8726:27:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address)"}},"id":73490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8726:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73491,"nodeType":"ExpressionStatement","src":"8726:39:152"}]},"baseFunctions":[72225],"functionSelector":"3d15e74e","implemented":true,"kind":"function","modifiers":[],"name":"enableOperator","nameLocation":"8690:14:152","parameters":{"id":73482,"nodeType":"ParameterList","parameters":[],"src":"8704:2:152"},"returnParameters":{"id":73483,"nodeType":"ParameterList","parameters":[],"src":"8716:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73538,"nodeType":"FunctionDefinition","src":"8778:362:152","nodes":[],"body":{"id":73537,"nodeType":"Block","src":"8833:307:152","nodes":[],"statements":[{"assignments":[73500],"declarations":[{"constant":false,"id":73500,"mutability":"mutable","name":"$","nameLocation":"8859:1:152","nodeType":"VariableDeclaration","scope":73537,"src":"8843:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73499,"nodeType":"UserDefinedTypeName","pathNode":{"id":73498,"name":"Storage","nameLocations":["8843:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"8843:7:152"},"referencedDeclaration":72078,"src":"8843:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73503,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73501,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"8863:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8863:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8843:30:152"},{"assignments":[null,73505],"declarations":[null,{"constant":false,"id":73505,"mutability":"mutable","name":"disabledTime","nameLocation":"8894:12:152","nodeType":"VariableDeclaration","scope":73537,"src":"8887:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73504,"name":"uint48","nodeType":"ElementaryTypeName","src":"8887:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":73511,"initialValue":{"arguments":[{"id":73509,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73495,"src":"8931:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73506,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73500,"src":"8910:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73507,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8912:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"8910:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8922:8:152","memberName":"getTimes","nodeType":"MemberAccess","referencedDeclaration":81146,"src":"8910:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (uint48,uint48)"}},"id":73510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8910:30:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint48_$_t_uint48_$","typeString":"tuple(uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"8884:56:152"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":73523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73512,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73505,"src":"8955:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":73513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8971:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8955:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":73515,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"8976:4:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Time_$59094_$","typeString":"type(library Time)"}},"id":73516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8981:9:152","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":58842,"src":"8976:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":73517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8976:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73518,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73505,"src":"8995:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":73519,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73500,"src":"9010:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9012:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"9010:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"8995:36:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"8976:55:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8955:76:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73528,"nodeType":"IfStatement","src":"8951:144:152","trueBody":{"id":73527,"nodeType":"Block","src":"9033:62:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73524,"name":"OperatorGracePeriodNotPassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71938,"src":"9054:28:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9054:30:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73526,"nodeType":"RevertStatement","src":"9047:37:152"}]}},{"expression":{"arguments":[{"id":73534,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73495,"src":"9124:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73529,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73500,"src":"9105:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73532,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9107:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"9105:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9117:6:152","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":55678,"src":"9105:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) returns (bool)"}},"id":73535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9105:28:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73536,"nodeType":"ExpressionStatement","src":"9105:28:152"}]},"baseFunctions":[72231],"functionSelector":"96115bc2","implemented":true,"kind":"function","modifiers":[],"name":"unregisterOperator","nameLocation":"8787:18:152","parameters":{"id":73496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73495,"mutability":"mutable","name":"operator","nameLocation":"8814:8:152","nodeType":"VariableDeclaration","scope":73538,"src":"8806:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73494,"name":"address","nodeType":"ElementaryTypeName","src":"8806:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8805:18:152"},"returnParameters":{"id":73497,"nodeType":"ParameterList","parameters":[],"src":"8833:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73596,"nodeType":"FunctionDefinition","src":"9146:494:152","nodes":[],"body":{"id":73595,"nodeType":"Block","src":"9253:387:152","nodes":[],"statements":[{"assignments":[73551],"declarations":[{"constant":false,"id":73551,"mutability":"mutable","name":"$","nameLocation":"9279:1:152","nodeType":"VariableDeclaration","scope":73595,"src":"9263:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73550,"nodeType":"UserDefinedTypeName","pathNode":{"id":73549,"name":"Storage","nameLocations":["9263:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"9263:7:152"},"referencedDeclaration":72078,"src":"9263:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73554,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73552,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"9283:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9283:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9263:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73555,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9308:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9312:6:152","memberName":"sender","nodeType":"MemberAccess","src":"9308:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":73557,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73551,"src":"9322:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9324:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"9322:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9308:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73564,"nodeType":"IfStatement","src":"9304:71:152","trueBody":{"id":73563,"nodeType":"Block","src":"9332:43:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73560,"name":"NotRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71998,"src":"9353:9:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9353:11:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73562,"nodeType":"RevertStatement","src":"9346:18:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73565,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73540,"src":"9389:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":73566,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73551,"src":"9398:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73567,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9400:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"9398:12:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9389:21:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73573,"nodeType":"IfStatement","src":"9385:78:152","trueBody":{"id":73572,"nodeType":"Block","src":"9412:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73569,"name":"UnknownCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71935,"src":"9433:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9433:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73571,"nodeType":"RevertStatement","src":"9426:26:152"}]}},{"expression":{"arguments":[{"expression":{"id":73580,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73551,"src":"9544:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73581,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9546:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"9544:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73582,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73540,"src":"9554:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73583,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73542,"src":"9561:6:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":73584,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73544,"src":"9569:4:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"expression":{"expression":{"id":73575,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73551,"src":"9497:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9499:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"9497:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73577,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9509:15:152","memberName":"operatorRewards","nodeType":"MemberAccess","referencedDeclaration":80028,"src":"9497:27:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73574,"name":"IDefaultOperatorRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70549,"src":"9473:23:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDefaultOperatorRewards_$70549_$","typeString":"type(contract IDefaultOperatorRewards)"}},"id":73578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9473:52:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDefaultOperatorRewards_$70549","typeString":"contract IDefaultOperatorRewards"}},"id":73579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9526:17:152","memberName":"distributeRewards","nodeType":"MemberAccess","referencedDeclaration":70531,"src":"9473:70:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (address,address,uint256,bytes32) external"}},"id":73585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9473:101:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73586,"nodeType":"ExpressionStatement","src":"9473:101:152"},{"expression":{"arguments":[{"arguments":[{"id":73590,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73542,"src":"9619:6:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":73591,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73544,"src":"9627:4:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":73588,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9602:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":73589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9606:12:152","memberName":"encodePacked","nodeType":"MemberAccess","src":"9602:16:152","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9602:30:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":73587,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9592:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":73593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9592:41:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":73548,"id":73594,"nodeType":"Return","src":"9585:48:152"}]},"baseFunctions":[72269],"functionSelector":"729e2f36","implemented":true,"kind":"function","modifiers":[],"name":"distributeOperatorRewards","nameLocation":"9155:25:152","parameters":{"id":73545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73540,"mutability":"mutable","name":"token","nameLocation":"9189:5:152","nodeType":"VariableDeclaration","scope":73596,"src":"9181:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73539,"name":"address","nodeType":"ElementaryTypeName","src":"9181:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":73542,"mutability":"mutable","name":"amount","nameLocation":"9204:6:152","nodeType":"VariableDeclaration","scope":73596,"src":"9196:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73541,"name":"uint256","nodeType":"ElementaryTypeName","src":"9196:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":73544,"mutability":"mutable","name":"root","nameLocation":"9220:4:152","nodeType":"VariableDeclaration","scope":73596,"src":"9212:12:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":73543,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9212:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9180:45:152"},"returnParameters":{"id":73548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73547,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73596,"src":"9244:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":73546,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9244:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9243:9:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73744,"nodeType":"FunctionDefinition","src":"9646:1224:152","nodes":[],"body":{"id":73743,"nodeType":"Block","src":"9793:1077:152","nodes":[],"statements":[{"assignments":[73608],"declarations":[{"constant":false,"id":73608,"mutability":"mutable","name":"$","nameLocation":"9819:1:152","nodeType":"VariableDeclaration","scope":73743,"src":"9803:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73607,"nodeType":"UserDefinedTypeName","pathNode":{"id":73606,"name":"Storage","nameLocations":["9803:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"9803:7:152"},"referencedDeclaration":72078,"src":"9803:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73611,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73609,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"9823:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9823:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9803:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73612,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9848:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9852:6:152","memberName":"sender","nodeType":"MemberAccess","src":"9848:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":73614,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73608,"src":"9862:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9864:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"9862:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9848:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73621,"nodeType":"IfStatement","src":"9844:71:152","trueBody":{"id":73620,"nodeType":"Block","src":"9872:43:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73617,"name":"NotRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71998,"src":"9893:9:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9893:11:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73619,"nodeType":"RevertStatement","src":"9886:18:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73622,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73599,"src":"9929:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73623,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9941:5:152","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":79896,"src":"9929:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":73624,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73608,"src":"9950:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9952:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"9950:12:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9929:33:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73631,"nodeType":"IfStatement","src":"9925:90:152","trueBody":{"id":73630,"nodeType":"Block","src":"9964:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73627,"name":"UnknownCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71935,"src":"9985:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9985:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73629,"nodeType":"RevertStatement","src":"9978:26:152"}]}},{"assignments":[73633],"declarations":[{"constant":false,"id":73633,"mutability":"mutable","name":"distributionBytes","nameLocation":"10038:17:152","nodeType":"VariableDeclaration","scope":73743,"src":"10025:30:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":73632,"name":"bytes","nodeType":"ElementaryTypeName","src":"10025:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":73634,"nodeType":"VariableDeclarationStatement","src":"10025:30:152"},{"body":{"id":73726,"nodeType":"Block","src":"10127:615:152","statements":[{"assignments":[73651],"declarations":[{"constant":false,"id":73651,"mutability":"mutable","name":"rewards","nameLocation":"10167:7:152","nodeType":"VariableDeclaration","scope":73726,"src":"10141:33:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79902_memory_ptr","typeString":"struct Gear.StakerRewards"},"typeName":{"id":73650,"nodeType":"UserDefinedTypeName","pathNode":{"id":73649,"name":"Gear.StakerRewards","nameLocations":["10141:4:152","10146:13:152"],"nodeType":"IdentifierPath","referencedDeclaration":79902,"src":"10141:18:152"},"referencedDeclaration":79902,"src":"10141:18:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79902_storage_ptr","typeString":"struct Gear.StakerRewards"}},"visibility":"internal"}],"id":73656,"initialValue":{"baseExpression":{"expression":{"id":73652,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73599,"src":"10177:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73653,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10189:12:152","memberName":"distribution","nodeType":"MemberAccess","referencedDeclaration":79892,"src":"10177:24:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StakerRewards_$79902_memory_ptr_$dyn_memory_ptr","typeString":"struct Gear.StakerRewards memory[] memory"}},"id":73655,"indexExpression":{"id":73654,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73636,"src":"10202:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10177:27:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79902_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"nodeType":"VariableDeclarationStatement","src":"10141:63:152"},{"condition":{"id":73663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10223:33:152","subExpression":{"arguments":[{"expression":{"id":73660,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73651,"src":"10242:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79902_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73661,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10250:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":79899,"src":"10242:13:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73657,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73608,"src":"10224:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10226:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"10224:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10233:8:152","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":55718,"src":"10224:17:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (bool)"}},"id":73662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10224:32:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73668,"nodeType":"IfStatement","src":"10219:99:152","trueBody":{"id":73667,"nodeType":"Block","src":"10258:60:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73664,"name":"NotRegisteredVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71986,"src":"10283:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10283:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73666,"nodeType":"RevertStatement","src":"10276:27:152"}]}},{"assignments":[73670],"declarations":[{"constant":false,"id":73670,"mutability":"mutable","name":"rewardsAddress","nameLocation":"10340:14:152","nodeType":"VariableDeclaration","scope":73726,"src":"10332:22:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73669,"name":"address","nodeType":"ElementaryTypeName","src":"10332:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":73680,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":73676,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73651,"src":"10388:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79902_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10396:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":79899,"src":"10388:13:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73673,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73608,"src":"10365:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73674,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10367:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"10365:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73675,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10374:13:152","memberName":"getPinnedData","nodeType":"MemberAccess","referencedDeclaration":81167,"src":"10365:22:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_uint160_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (uint160)"}},"id":73678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10365:37:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":73672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10357:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":73671,"name":"address","nodeType":"ElementaryTypeName","src":"10357:7:152","typeDescriptions":{}}},"id":73679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10357:46:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10332:71:152"},{"assignments":[73682],"declarations":[{"constant":false,"id":73682,"mutability":"mutable","name":"data","nameLocation":"10431:4:152","nodeType":"VariableDeclaration","scope":73726,"src":"10418:17:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":73681,"name":"bytes","nodeType":"ElementaryTypeName","src":"10418:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":73697,"initialValue":{"arguments":[{"id":73685,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73601,"src":"10449:9:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"expression":{"id":73686,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73608,"src":"10460:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10462:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"10460:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"","id":73690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10481:2:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":73689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10475:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":73688,"name":"bytes","nodeType":"ElementaryTypeName","src":"10475:5:152","typeDescriptions":{}}},"id":73691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10475:9:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"hexValue":"","id":73694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10492:2:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":73693,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10486:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":73692,"name":"bytes","nodeType":"ElementaryTypeName","src":"10486:5:152","typeDescriptions":{}}},"id":73695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10486:9:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":73683,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10438:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":73684,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10442:6:152","memberName":"encode","nodeType":"MemberAccess","src":"10438:10:152","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10438:58:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"10418:78:152"},{"expression":{"arguments":[{"expression":{"id":73702,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73608,"src":"10566:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10568:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"10566:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":73704,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73599,"src":"10576:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73705,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10588:5:152","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":79896,"src":"10576:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":73706,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73651,"src":"10595:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79902_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10603:6:152","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":79901,"src":"10595:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":73708,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73682,"src":"10611:4:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":73699,"name":"rewardsAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73670,"src":"10532:14:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73698,"name":"IDefaultStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70743,"src":"10510:21:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDefaultStakerRewards_$70743_$","typeString":"type(contract IDefaultStakerRewards)"}},"id":73700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10510:37:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDefaultStakerRewards_$70743","typeString":"contract IDefaultStakerRewards"}},"id":73701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10548:17:152","memberName":"distributeRewards","nodeType":"MemberAccess","referencedDeclaration":70819,"src":"10510:55:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory) external"}},"id":73709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10510:106:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73710,"nodeType":"ExpressionStatement","src":"10510:106:152"},{"expression":{"id":73724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":73711,"name":"distributionBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73633,"src":"10631:17:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":73715,"name":"distributionBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73633,"src":"10664:17:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"expression":{"id":73718,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73651,"src":"10700:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79902_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10708:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":79899,"src":"10700:13:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":73720,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73651,"src":"10715:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79902_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10723:6:152","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":79901,"src":"10715:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":73716,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10683:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":73717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10687:12:152","memberName":"encodePacked","nodeType":"MemberAccess","src":"10683:16:152","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10683:47:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":73713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10651:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":73712,"name":"bytes","nodeType":"ElementaryTypeName","src":"10651:5:152","typeDescriptions":{}}},"id":73714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10657:6:152","memberName":"concat","nodeType":"MemberAccess","src":"10651:12:152","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10651:80:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"10631:100:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":73725,"nodeType":"ExpressionStatement","src":"10631:100:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73639,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73636,"src":"10085:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":73640,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73599,"src":"10089:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73641,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10101:12:152","memberName":"distribution","nodeType":"MemberAccess","referencedDeclaration":79892,"src":"10089:24:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StakerRewards_$79902_memory_ptr_$dyn_memory_ptr","typeString":"struct Gear.StakerRewards memory[] memory"}},"id":73642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10114:6:152","memberName":"length","nodeType":"MemberAccess","src":"10089:31:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10085:35:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73727,"initializationExpression":{"assignments":[73636],"declarations":[{"constant":false,"id":73636,"mutability":"mutable","name":"i","nameLocation":"10078:1:152","nodeType":"VariableDeclaration","scope":73727,"src":"10070:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73635,"name":"uint256","nodeType":"ElementaryTypeName","src":"10070:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73638,"initialValue":{"hexValue":"30","id":73637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10082:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10070:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10122:3:152","subExpression":{"id":73644,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73636,"src":"10124:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73646,"nodeType":"ExpressionStatement","src":"10122:3:152"},"nodeType":"ForStatement","src":"10065:677:152"},{"expression":{"arguments":[{"arguments":[{"id":73732,"name":"distributionBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73633,"src":"10782:17:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"expression":{"id":73735,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73599,"src":"10818:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73736,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10830:11:152","memberName":"totalAmount","nodeType":"MemberAccess","referencedDeclaration":79894,"src":"10818:23:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":73737,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73599,"src":"10843:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10855:5:152","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":79896,"src":"10843:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":73733,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10801:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":73734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10805:12:152","memberName":"encodePacked","nodeType":"MemberAccess","src":"10801:16:152","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10801:60:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":73730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10769:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":73729,"name":"bytes","nodeType":"ElementaryTypeName","src":"10769:5:152","typeDescriptions":{}}},"id":73731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10775:6:152","memberName":"concat","nodeType":"MemberAccess","src":"10769:12:152","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10769:93:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":73728,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10759:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":73741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10759:104:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":73605,"id":73742,"nodeType":"Return","src":"10752:111:152"}]},"baseFunctions":[72280],"functionSelector":"7fbe95b5","implemented":true,"kind":"function","modifiers":[],"name":"distributeStakerRewards","nameLocation":"9655:23:152","parameters":{"id":73602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73599,"mutability":"mutable","name":"_commitment","nameLocation":"9715:11:152","nodeType":"VariableDeclaration","scope":73744,"src":"9679:47:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment"},"typeName":{"id":73598,"nodeType":"UserDefinedTypeName","pathNode":{"id":73597,"name":"Gear.StakerRewardsCommitment","nameLocations":["9679:4:152","9684:23:152"],"nodeType":"IdentifierPath","referencedDeclaration":79897,"src":"9679:28:152"},"referencedDeclaration":79897,"src":"9679:28:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_storage_ptr","typeString":"struct Gear.StakerRewardsCommitment"}},"visibility":"internal"},{"constant":false,"id":73601,"mutability":"mutable","name":"timestamp","nameLocation":"9735:9:152","nodeType":"VariableDeclaration","scope":73744,"src":"9728:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73600,"name":"uint48","nodeType":"ElementaryTypeName","src":"9728:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"9678:67:152"},"returnParameters":{"id":73605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73604,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73744,"src":"9780:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":73603,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9780:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9779:9:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73775,"nodeType":"FunctionDefinition","src":"10876:236:152","nodes":[],"body":{"id":73774,"nodeType":"Block","src":"10961:151:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":73755,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73746,"src":"10986:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73754,"name":"_validateVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74842,"src":"10971:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":73756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10971:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73757,"nodeType":"ExpressionStatement","src":"10971:22:152"},{"expression":{"arguments":[{"id":73759,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73746,"src":"11026:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73760,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73748,"src":"11034:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":73758,"name":"_validateStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74889,"src":"11003:22:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":73761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11003:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73762,"nodeType":"ExpressionStatement","src":"11003:40:152"},{"expression":{"arguments":[{"id":73767,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73746,"src":"11079:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":73770,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73748,"src":"11095:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11087:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":73768,"name":"uint160","nodeType":"ElementaryTypeName","src":"11087:7:152","typeDescriptions":{}}},"id":73771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11087:17:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint160","typeString":"uint160"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73763,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"11054:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11054:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11065:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11054:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11072:6:152","memberName":"append","nodeType":"MemberAccess","referencedDeclaration":80993,"src":"11054:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$_t_uint160_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address,uint160)"}},"id":73772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11054:51:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73773,"nodeType":"ExpressionStatement","src":"11054:51:152"}]},"baseFunctions":[72239],"functionSelector":"05c4fdf9","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":73751,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73746,"src":"10953:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73752,"kind":"modifierInvocation","modifierName":{"id":73750,"name":"vaultOwner","nameLocations":["10942:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":75026,"src":"10942:10:152"},"nodeType":"ModifierInvocation","src":"10942:18:152"}],"name":"registerVault","nameLocation":"10885:13:152","parameters":{"id":73749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73746,"mutability":"mutable","name":"_vault","nameLocation":"10907:6:152","nodeType":"VariableDeclaration","scope":73775,"src":"10899:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73745,"name":"address","nodeType":"ElementaryTypeName","src":"10899:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":73748,"mutability":"mutable","name":"_rewards","nameLocation":"10923:8:152","nodeType":"VariableDeclaration","scope":73775,"src":"10915:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73747,"name":"address","nodeType":"ElementaryTypeName","src":"10915:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10898:34:152"},"returnParameters":{"id":73753,"nodeType":"ParameterList","parameters":[],"src":"10961:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73791,"nodeType":"FunctionDefinition","src":"11118:113:152","nodes":[],"body":{"id":73790,"nodeType":"Block","src":"11182:49:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":73787,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73777,"src":"11218:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73783,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"11192:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11192:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73785,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11203:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11192:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73786,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11210:7:152","memberName":"disable","nodeType":"MemberAccess","referencedDeclaration":81087,"src":"11192:25:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address)"}},"id":73788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11192:32:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73789,"nodeType":"ExpressionStatement","src":"11192:32:152"}]},"baseFunctions":[72251],"functionSelector":"3ccce789","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":73780,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73777,"src":"11175:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73781,"kind":"modifierInvocation","modifierName":{"id":73779,"name":"vaultOwner","nameLocations":["11164:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":75026,"src":"11164:10:152"},"nodeType":"ModifierInvocation","src":"11164:17:152"}],"name":"disableVault","nameLocation":"11127:12:152","parameters":{"id":73778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73777,"mutability":"mutable","name":"vault","nameLocation":"11148:5:152","nodeType":"VariableDeclaration","scope":73791,"src":"11140:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73776,"name":"address","nodeType":"ElementaryTypeName","src":"11140:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11139:15:152"},"returnParameters":{"id":73782,"nodeType":"ParameterList","parameters":[],"src":"11182:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73807,"nodeType":"FunctionDefinition","src":"11237:111:152","nodes":[],"body":{"id":73806,"nodeType":"Block","src":"11300:48:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":73803,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73793,"src":"11335:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73799,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"11310:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11310:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73801,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11321:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11310:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73802,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11328:6:152","memberName":"enable","nodeType":"MemberAccess","referencedDeclaration":81040,"src":"11310:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address)"}},"id":73804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11310:31:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73805,"nodeType":"ExpressionStatement","src":"11310:31:152"}]},"baseFunctions":[72257],"functionSelector":"936f4330","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":73796,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73793,"src":"11293:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73797,"kind":"modifierInvocation","modifierName":{"id":73795,"name":"vaultOwner","nameLocations":["11282:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":75026,"src":"11282:10:152"},"nodeType":"ModifierInvocation","src":"11282:17:152"}],"name":"enableVault","nameLocation":"11246:11:152","parameters":{"id":73794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73793,"mutability":"mutable","name":"vault","nameLocation":"11266:5:152","nodeType":"VariableDeclaration","scope":73807,"src":"11258:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73792,"name":"address","nodeType":"ElementaryTypeName","src":"11258:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11257:15:152"},"returnParameters":{"id":73798,"nodeType":"ParameterList","parameters":[],"src":"11300:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73855,"nodeType":"FunctionDefinition","src":"11354:355:152","nodes":[],"body":{"id":73854,"nodeType":"Block","src":"11421:288:152","nodes":[],"statements":[{"assignments":[73817],"declarations":[{"constant":false,"id":73817,"mutability":"mutable","name":"$","nameLocation":"11447:1:152","nodeType":"VariableDeclaration","scope":73854,"src":"11431:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73816,"nodeType":"UserDefinedTypeName","pathNode":{"id":73815,"name":"Storage","nameLocations":["11431:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"11431:7:152"},"referencedDeclaration":72078,"src":"11431:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73820,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73818,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"11451:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11451:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"11431:30:152"},{"assignments":[null,73822],"declarations":[null,{"constant":false,"id":73822,"mutability":"mutable","name":"disabledTime","nameLocation":"11481:12:152","nodeType":"VariableDeclaration","scope":73854,"src":"11474:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73821,"name":"uint48","nodeType":"ElementaryTypeName","src":"11474:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":73828,"initialValue":{"arguments":[{"id":73826,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73809,"src":"11515:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73823,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73817,"src":"11497:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11499:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11497:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11506:8:152","memberName":"getTimes","nodeType":"MemberAccess","referencedDeclaration":81146,"src":"11497:17:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (uint48,uint48)"}},"id":73827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11497:24:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint48_$_t_uint48_$","typeString":"tuple(uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"11471:50:152"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":73840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73829,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73822,"src":"11536:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":73830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11552:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11536:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":73832,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"11557:4:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Time_$59094_$","typeString":"type(library Time)"}},"id":73833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11562:9:152","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":58842,"src":"11557:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":73834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11557:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73835,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73822,"src":"11576:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":73836,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73817,"src":"11591:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11593:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"11591:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"11576:33:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"11557:52:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11536:73:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73845,"nodeType":"IfStatement","src":"11532:138:152","trueBody":{"id":73844,"nodeType":"Block","src":"11611:59:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73841,"name":"VaultGracePeriodNotPassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71941,"src":"11632:25:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11632:27:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73843,"nodeType":"RevertStatement","src":"11625:34:152"}]}},{"expression":{"arguments":[{"id":73851,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73809,"src":"11696:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73846,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73817,"src":"11680:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11682:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11680:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11689:6:152","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":55678,"src":"11680:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) returns (bool)"}},"id":73852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11680:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73853,"nodeType":"ExpressionStatement","src":"11680:22:152"}]},"baseFunctions":[72245],"functionSelector":"2633b70f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":73812,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73809,"src":"11414:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73813,"kind":"modifierInvocation","modifierName":{"id":73811,"name":"vaultOwner","nameLocations":["11403:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":75026,"src":"11403:10:152"},"nodeType":"ModifierInvocation","src":"11403:17:152"}],"name":"unregisterVault","nameLocation":"11363:15:152","parameters":{"id":73810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73809,"mutability":"mutable","name":"vault","nameLocation":"11387:5:152","nodeType":"VariableDeclaration","scope":73855,"src":"11379:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73808,"name":"address","nodeType":"ElementaryTypeName","src":"11379:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11378:15:152"},"returnParameters":{"id":73814,"nodeType":"ParameterList","parameters":[],"src":"11421:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74050,"nodeType":"FunctionDefinition","src":"11715:1648:152","nodes":[],"body":{"id":74049,"nodeType":"Block","src":"11814:1549:152","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73866,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73859,"src":"11832:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":73867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11848:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11832:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d61782076616c696461746f7273206d7573742062652067726561746572207468616e207a65726f","id":73869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11851:42:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_1ca278eaecfcf123a0ff55dc43f07f4936917259685ee8ab8952762f80124716","typeString":"literal_string \"Max validators must be greater than zero\""},"value":"Max validators must be greater than zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1ca278eaecfcf123a0ff55dc43f07f4936917259685ee8ab8952762f80124716","typeString":"literal_string \"Max validators must be greater than zero\""}],"id":73865,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11824:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":73870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11824:70:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73871,"nodeType":"ExpressionStatement","src":"11824:70:152"},{"assignments":[73876,73879],"declarations":[{"constant":false,"id":73876,"mutability":"mutable","name":"activeOperators","nameLocation":"11923:15:152","nodeType":"VariableDeclaration","scope":74049,"src":"11906:32:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":73874,"name":"address","nodeType":"ElementaryTypeName","src":"11906:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73875,"nodeType":"ArrayTypeName","src":"11906:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":73879,"mutability":"mutable","name":"stakes","nameLocation":"11957:6:152","nodeType":"VariableDeclaration","scope":74049,"src":"11940:23:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":73877,"name":"uint256","nodeType":"ElementaryTypeName","src":"11940:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73878,"nodeType":"ArrayTypeName","src":"11940:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":73883,"initialValue":{"arguments":[{"id":73881,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73857,"src":"11993:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":73880,"name":"getActiveOperatorsStakeAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74193,"src":"11967:25:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint48) view returns (address[] memory,uint256[] memory)"}},"id":73882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11967:29:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"11905:91:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73884,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"12011:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12027:6:152","memberName":"length","nodeType":"MemberAccess","src":"12011:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":73886,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73859,"src":"12037:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12011:39:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73891,"nodeType":"IfStatement","src":"12007:92:152","trueBody":{"id":73890,"nodeType":"Block","src":"12052:47:152","statements":[{"expression":{"id":73888,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"12073:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":73864,"id":73889,"nodeType":"Return","src":"12066:22:152"}]}},{"assignments":[73893],"declarations":[{"constant":false,"id":73893,"mutability":"mutable","name":"n","nameLocation":"12151:1:152","nodeType":"VariableDeclaration","scope":74049,"src":"12143:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73892,"name":"uint256","nodeType":"ElementaryTypeName","src":"12143:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73896,"initialValue":{"expression":{"id":73894,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"12155:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12171:6:152","memberName":"length","nodeType":"MemberAccess","src":"12155:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12143:34:152"},{"body":{"id":73974,"nodeType":"Block","src":"12219:336:152","statements":[{"body":{"id":73972,"nodeType":"Block","src":"12273:272:152","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":73921,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73879,"src":"12295:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73923,"indexExpression":{"id":73922,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12302:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12295:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"baseExpression":{"id":73924,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73879,"src":"12307:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73928,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73925,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12314:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73926,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12318:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12314:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12307:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12295:25:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73971,"nodeType":"IfStatement","src":"12291:240:152","trueBody":{"id":73970,"nodeType":"Block","src":"12322:209:152","statements":[{"expression":{"id":73948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":73930,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73879,"src":"12345:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73932,"indexExpression":{"id":73931,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12352:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12345:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":73933,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73879,"src":"12356:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73937,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73934,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12363:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12367:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12363:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12356:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":73938,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12344:26:152","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":73939,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73879,"src":"12374:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73943,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73940,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12381:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12385:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12381:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12374:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":73944,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73879,"src":"12389:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73946,"indexExpression":{"id":73945,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12396:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12389:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":73947,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12373:26:152","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"12344:55:152","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73949,"nodeType":"ExpressionStatement","src":"12344:55:152"},{"expression":{"id":73968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":73950,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"12422:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73952,"indexExpression":{"id":73951,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12438:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12422:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":73953,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"12442:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73957,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73954,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12458:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12462:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12458:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12442:22:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73958,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12421:44:152","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":73959,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"12469:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73963,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73960,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12485:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12489:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12485:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12469:22:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":73964,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"12493:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73966,"indexExpression":{"id":73965,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12509:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12493:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73967,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12468:44:152","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"src":"12421:91:152","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73969,"nodeType":"ExpressionStatement","src":"12421:91:152"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73911,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12253:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73912,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73893,"src":"12257:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":73913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12261:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12257:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":73915,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73898,"src":"12265:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12257:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12253:13:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73973,"initializationExpression":{"assignments":[73908],"declarations":[{"constant":false,"id":73908,"mutability":"mutable","name":"j","nameLocation":"12246:1:152","nodeType":"VariableDeclaration","scope":73973,"src":"12238:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73907,"name":"uint256","nodeType":"ElementaryTypeName","src":"12238:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73910,"initialValue":{"hexValue":"30","id":73909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12250:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12238:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12268:3:152","subExpression":{"id":73918,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73908,"src":"12268:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73920,"nodeType":"ExpressionStatement","src":"12268:3:152"},"nodeType":"ForStatement","src":"12233:312:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73901,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73898,"src":"12207:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":73902,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73893,"src":"12211:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12207:5:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73975,"initializationExpression":{"assignments":[73898],"declarations":[{"constant":false,"id":73898,"mutability":"mutable","name":"i","nameLocation":"12200:1:152","nodeType":"VariableDeclaration","scope":73975,"src":"12192:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73897,"name":"uint256","nodeType":"ElementaryTypeName","src":"12192:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73900,"initialValue":{"hexValue":"30","id":73899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12204:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12192:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12214:3:152","subExpression":{"id":73904,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73898,"src":"12214:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73906,"nodeType":"ExpressionStatement","src":"12214:3:152"},"nodeType":"ForStatement","src":"12187:368:152"},{"assignments":[73977],"declarations":[{"constant":false,"id":73977,"mutability":"mutable","name":"sameStakeCount","nameLocation":"12630:14:152","nodeType":"VariableDeclaration","scope":74049,"src":"12622:22:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73976,"name":"uint256","nodeType":"ElementaryTypeName","src":"12622:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73979,"initialValue":{"hexValue":"31","id":73978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12647:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"12622:26:152"},{"assignments":[73981],"declarations":[{"constant":false,"id":73981,"mutability":"mutable","name":"lastStake","nameLocation":"12666:9:152","nodeType":"VariableDeclaration","scope":74049,"src":"12658:17:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73980,"name":"uint256","nodeType":"ElementaryTypeName","src":"12658:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73987,"initialValue":{"baseExpression":{"id":73982,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73879,"src":"12678:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73986,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73983,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73859,"src":"12685:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":73984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12701:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12685:17:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12678:25:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12658:45:152"},{"body":{"id":74011,"nodeType":"Block","src":"12778:123:152","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":73999,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73879,"src":"12796:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":74001,"indexExpression":{"id":74000,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73989,"src":"12803:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12796:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":74002,"name":"lastStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73981,"src":"12809:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12796:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74006,"nodeType":"IfStatement","src":"12792:66:152","trueBody":{"id":74005,"nodeType":"Block","src":"12820:38:152","statements":[{"id":74004,"nodeType":"Break","src":"12838:5:152"}]}},{"expression":{"id":74009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74007,"name":"sameStakeCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73977,"src":"12871:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":74008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12889:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12871:19:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74010,"nodeType":"ExpressionStatement","src":"12871:19:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73992,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73989,"src":"12745:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":73993,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"12749:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12765:6:152","memberName":"length","nodeType":"MemberAccess","src":"12749:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12745:26:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74012,"initializationExpression":{"assignments":[73989],"declarations":[{"constant":false,"id":73989,"mutability":"mutable","name":"i","nameLocation":"12726:1:152","nodeType":"VariableDeclaration","scope":74012,"src":"12718:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73988,"name":"uint256","nodeType":"ElementaryTypeName","src":"12718:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73991,"initialValue":{"id":73990,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73859,"src":"12730:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12718:25:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12773:3:152","subExpression":{"id":73996,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73989,"src":"12773:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73998,"nodeType":"ExpressionStatement","src":"12773:3:152"},"nodeType":"ForStatement","src":"12713:188:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74013,"name":"sameStakeCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73977,"src":"12915:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":74014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12932:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12915:18:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74045,"nodeType":"IfStatement","src":"12911:316:152","trueBody":{"id":74044,"nodeType":"Block","src":"12935:292:152","statements":[{"assignments":[74017],"declarations":[{"constant":false,"id":74017,"mutability":"mutable","name":"randomIndex","nameLocation":"13046:11:152","nodeType":"VariableDeclaration","scope":74044,"src":"13038:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74016,"name":"uint256","nodeType":"ElementaryTypeName","src":"13038:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74029,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":74023,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73857,"src":"13095:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":74021,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13078:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74022,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13082:12:152","memberName":"encodePacked","nodeType":"MemberAccess","src":"13078:16:152","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":74024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13078:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74020,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"13068:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":74025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13068:31:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":74019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13060:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":74018,"name":"uint256","nodeType":"ElementaryTypeName","src":"13060:7:152","typeDescriptions":{}}},"id":74026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13060:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":74027,"name":"sameStakeCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73977,"src":"13103:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13060:57:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13038:79:152"},{"expression":{"id":74042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":74030,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"13131:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":74034,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74031,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73859,"src":"13147:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":74032,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13163:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13147:17:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13131:34:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":74035,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"13168:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":74041,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74036,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73859,"src":"13184:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":74037,"name":"randomIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74017,"src":"13200:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13184:27:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":74039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13214:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13184:31:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13168:48:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13131:85:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74043,"nodeType":"ExpressionStatement","src":"13131:85:152"}]}},{"AST":{"nativeSrc":"13262:62:152","nodeType":"YulBlock","src":"13262:62:152","statements":[{"expression":{"arguments":[{"name":"activeOperators","nativeSrc":"13283:15:152","nodeType":"YulIdentifier","src":"13283:15:152"},{"name":"maxValidators","nativeSrc":"13300:13:152","nodeType":"YulIdentifier","src":"13300:13:152"}],"functionName":{"name":"mstore","nativeSrc":"13276:6:152","nodeType":"YulIdentifier","src":"13276:6:152"},"nativeSrc":"13276:38:152","nodeType":"YulFunctionCall","src":"13276:38:152"},"nativeSrc":"13276:38:152","nodeType":"YulExpressionStatement","src":"13276:38:152"}]},"evmVersion":"prague","externalReferences":[{"declaration":73876,"isOffset":false,"isSlot":false,"src":"13283:15:152","valueSize":1},{"declaration":73859,"isOffset":false,"isSlot":false,"src":"13300:13:152","valueSize":1}],"flags":["memory-safe"],"id":74046,"nodeType":"InlineAssembly","src":"13237:87:152"},{"expression":{"id":74047,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73876,"src":"13341:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":73864,"id":74048,"nodeType":"Return","src":"13334:22:152"}]},"baseFunctions":[72189],"functionSelector":"6e5c7932","implemented":true,"kind":"function","modifiers":[],"name":"makeElectionAt","nameLocation":"11724:14:152","parameters":{"id":73860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73857,"mutability":"mutable","name":"ts","nameLocation":"11746:2:152","nodeType":"VariableDeclaration","scope":74050,"src":"11739:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73856,"name":"uint48","nodeType":"ElementaryTypeName","src":"11739:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":73859,"mutability":"mutable","name":"maxValidators","nameLocation":"11758:13:152","nodeType":"VariableDeclaration","scope":74050,"src":"11750:21:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73858,"name":"uint256","nodeType":"ElementaryTypeName","src":"11750:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11738:34:152"},"returnParameters":{"id":73864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73863,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74050,"src":"11796:16:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":73861,"name":"address","nodeType":"ElementaryTypeName","src":"11796:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73862,"nodeType":"ArrayTypeName","src":"11796:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"11795:18:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":74091,"nodeType":"FunctionDefinition","src":"13369:372:152","nodes":[],"body":{"id":74090,"nodeType":"Block","src":"13483:258:152","nodes":[],"statements":[{"assignments":[74063,74065],"declarations":[{"constant":false,"id":74063,"mutability":"mutable","name":"enabledTime","nameLocation":"13501:11:152","nodeType":"VariableDeclaration","scope":74090,"src":"13494:18:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74062,"name":"uint48","nodeType":"ElementaryTypeName","src":"13494:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74065,"mutability":"mutable","name":"disabledTime","nameLocation":"13521:12:152","nodeType":"VariableDeclaration","scope":74090,"src":"13514:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74064,"name":"uint48","nodeType":"ElementaryTypeName","src":"13514:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74072,"initialValue":{"arguments":[{"id":74070,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74052,"src":"13567:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74066,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"13537:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13537:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13548:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"13537:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74069,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13558:8:152","memberName":"getTimes","nodeType":"MemberAccess","referencedDeclaration":81146,"src":"13537:29:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (uint48,uint48)"}},"id":74071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13537:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint48_$_t_uint48_$","typeString":"tuple(uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"13493:83:152"},{"condition":{"id":74078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13590:44:152","subExpression":{"arguments":[{"id":74074,"name":"enabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74063,"src":"13604:11:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74075,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74065,"src":"13617:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74076,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74054,"src":"13631:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74073,"name":"_wasActiveAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74478,"src":"13591:12:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$_t_uint48_$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48,uint48,uint48) pure returns (bool)"}},"id":74077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13591:43:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74082,"nodeType":"IfStatement","src":"13586:83:152","trueBody":{"id":74081,"nodeType":"Block","src":"13636:33:152","statements":[{"expression":{"hexValue":"30","id":74079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13657:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":74061,"id":74080,"nodeType":"Return","src":"13650:8:152"}]}},{"expression":{"id":74088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74083,"name":"stake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74060,"src":"13679:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":74085,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74052,"src":"13721:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74086,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74054,"src":"13731:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74084,"name":"_collectOperatorStakeFromVaultsAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74449,"src":"13687:33:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint48_$returns$_t_uint256_$","typeString":"function (address,uint48) view returns (uint256)"}},"id":74087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13687:47:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13679:55:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74089,"nodeType":"ExpressionStatement","src":"13679:55:152"}]},"baseFunctions":[72199],"functionSelector":"d99ddfc7","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":74057,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74054,"src":"13455:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"id":74058,"kind":"modifierInvocation","modifierName":{"id":74056,"name":"validTimestamp","nameLocations":["13440:14:152"],"nodeType":"IdentifierPath","referencedDeclaration":74899,"src":"13440:14:152"},"nodeType":"ModifierInvocation","src":"13440:18:152"}],"name":"getOperatorStakeAt","nameLocation":"13378:18:152","parameters":{"id":74055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74052,"mutability":"mutable","name":"operator","nameLocation":"13405:8:152","nodeType":"VariableDeclaration","scope":74091,"src":"13397:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74051,"name":"address","nodeType":"ElementaryTypeName","src":"13397:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74054,"mutability":"mutable","name":"ts","nameLocation":"13422:2:152","nodeType":"VariableDeclaration","scope":74091,"src":"13415:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74053,"name":"uint48","nodeType":"ElementaryTypeName","src":"13415:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"13396:29:152"},"returnParameters":{"id":74061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74060,"mutability":"mutable","name":"stake","nameLocation":"13476:5:152","nodeType":"VariableDeclaration","scope":74091,"src":"13468:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74059,"name":"uint256","nodeType":"ElementaryTypeName","src":"13468:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13467:15:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":74193,"nodeType":"FunctionDefinition","src":"13784:940:152","nodes":[],"body":{"id":74192,"nodeType":"Block","src":"13965:759:152","nodes":[],"statements":[{"assignments":[74107],"declarations":[{"constant":false,"id":74107,"mutability":"mutable","name":"$","nameLocation":"13991:1:152","nodeType":"VariableDeclaration","scope":74192,"src":"13975:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74106,"nodeType":"UserDefinedTypeName","pathNode":{"id":74105,"name":"Storage","nameLocations":["13975:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"13975:7:152"},"referencedDeclaration":72078,"src":"13975:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74110,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74108,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"13995:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13995:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"13975:30:152"},{"expression":{"id":74120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74111,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74100,"src":"14015:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":74115,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74107,"src":"14047:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14049:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"14047:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14059:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"14047:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":74118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14047:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":74114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"14033:13:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":74112,"name":"address","nodeType":"ElementaryTypeName","src":"14037:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74113,"nodeType":"ArrayTypeName","src":"14037:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":74119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14033:35:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"14015:53:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":74121,"nodeType":"ExpressionStatement","src":"14015:53:152"},{"expression":{"id":74131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74122,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74103,"src":"14078:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":74126,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74107,"src":"14101:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14103:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"14101:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14113:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"14101:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":74129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14101:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":74125,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"14087:13:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":74123,"name":"uint256","nodeType":"ElementaryTypeName","src":"14091:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74124,"nodeType":"ArrayTypeName","src":"14091:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":74130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14087:35:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"14078:44:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":74132,"nodeType":"ExpressionStatement","src":"14078:44:152"},{"assignments":[74134],"declarations":[{"constant":false,"id":74134,"mutability":"mutable","name":"operatorIdx","nameLocation":"14141:11:152","nodeType":"VariableDeclaration","scope":74192,"src":"14133:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74133,"name":"uint256","nodeType":"ElementaryTypeName","src":"14133:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74136,"initialValue":{"hexValue":"30","id":74135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14155:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14133:23:152"},{"body":{"id":74189,"nodeType":"Block","src":"14214:369:152","statements":[{"assignments":[74150,74152,74154],"declarations":[{"constant":false,"id":74150,"mutability":"mutable","name":"operator","nameLocation":"14237:8:152","nodeType":"VariableDeclaration","scope":74189,"src":"14229:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74149,"name":"address","nodeType":"ElementaryTypeName","src":"14229:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74152,"mutability":"mutable","name":"enabled","nameLocation":"14254:7:152","nodeType":"VariableDeclaration","scope":74189,"src":"14247:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74151,"name":"uint48","nodeType":"ElementaryTypeName","src":"14247:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74154,"mutability":"mutable","name":"disabled","nameLocation":"14270:8:152","nodeType":"VariableDeclaration","scope":74189,"src":"14263:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74153,"name":"uint48","nodeType":"ElementaryTypeName","src":"14263:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74160,"initialValue":{"arguments":[{"id":74158,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74138,"src":"14306:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":74155,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74107,"src":"14282:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74156,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14284:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"14282:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14294:11:152","memberName":"atWithTimes","nodeType":"MemberAccess","referencedDeclaration":81122,"src":"14282:23:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint48,uint48)"}},"id":74159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14282:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint48_$_t_uint48_$","typeString":"tuple(address,uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"14228:80:152"},{"condition":{"id":74166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14327:36:152","subExpression":{"arguments":[{"id":74162,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74152,"src":"14341:7:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74163,"name":"disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74154,"src":"14350:8:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74164,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74093,"src":"14360:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74161,"name":"_wasActiveAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74478,"src":"14328:12:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$_t_uint48_$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48,uint48,uint48) pure returns (bool)"}},"id":74165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14328:35:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74169,"nodeType":"IfStatement","src":"14323:83:152","trueBody":{"id":74168,"nodeType":"Block","src":"14365:41:152","statements":[{"id":74167,"nodeType":"Continue","src":"14383:8:152"}]}},{"expression":{"id":74174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":74170,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74100,"src":"14420:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":74172,"indexExpression":{"id":74171,"name":"operatorIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74134,"src":"14436:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14420:28:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":74173,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74150,"src":"14451:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14420:39:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74175,"nodeType":"ExpressionStatement","src":"14420:39:152"},{"expression":{"id":74183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":74176,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74103,"src":"14473:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":74178,"indexExpression":{"id":74177,"name":"operatorIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74134,"src":"14480:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14473:19:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":74180,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74150,"src":"14529:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74181,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74093,"src":"14539:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74179,"name":"_collectOperatorStakeFromVaultsAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74449,"src":"14495:33:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint48_$returns$_t_uint256_$","typeString":"function (address,uint48) view returns (uint256)"}},"id":74182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14495:47:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14473:69:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74184,"nodeType":"ExpressionStatement","src":"14473:69:152"},{"expression":{"id":74187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74185,"name":"operatorIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74134,"src":"14556:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":74186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14571:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14556:16:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74188,"nodeType":"ExpressionStatement","src":"14556:16:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74140,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74138,"src":"14183:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":74141,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74107,"src":"14187:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74142,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14189:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"14187:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14199:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"14187:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":74144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14187:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14183:24:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74190,"initializationExpression":{"assignments":[74138],"declarations":[{"constant":false,"id":74138,"mutability":"mutable","name":"i","nameLocation":"14180:1:152","nodeType":"VariableDeclaration","scope":74190,"src":"14172:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74137,"name":"uint256","nodeType":"ElementaryTypeName","src":"14172:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74139,"nodeType":"VariableDeclarationStatement","src":"14172:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14209:3:152","subExpression":{"id":74146,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74138,"src":"14211:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74148,"nodeType":"ExpressionStatement","src":"14209:3:152"},"nodeType":"ForStatement","src":"14167:416:152"},{"AST":{"nativeSrc":"14618:100:152","nodeType":"YulBlock","src":"14618:100:152","statements":[{"expression":{"arguments":[{"name":"activeOperators","nativeSrc":"14639:15:152","nodeType":"YulIdentifier","src":"14639:15:152"},{"name":"operatorIdx","nativeSrc":"14656:11:152","nodeType":"YulIdentifier","src":"14656:11:152"}],"functionName":{"name":"mstore","nativeSrc":"14632:6:152","nodeType":"YulIdentifier","src":"14632:6:152"},"nativeSrc":"14632:36:152","nodeType":"YulFunctionCall","src":"14632:36:152"},"nativeSrc":"14632:36:152","nodeType":"YulExpressionStatement","src":"14632:36:152"},{"expression":{"arguments":[{"name":"stakes","nativeSrc":"14688:6:152","nodeType":"YulIdentifier","src":"14688:6:152"},{"name":"operatorIdx","nativeSrc":"14696:11:152","nodeType":"YulIdentifier","src":"14696:11:152"}],"functionName":{"name":"mstore","nativeSrc":"14681:6:152","nodeType":"YulIdentifier","src":"14681:6:152"},"nativeSrc":"14681:27:152","nodeType":"YulFunctionCall","src":"14681:27:152"},"nativeSrc":"14681:27:152","nodeType":"YulExpressionStatement","src":"14681:27:152"}]},"evmVersion":"prague","externalReferences":[{"declaration":74100,"isOffset":false,"isSlot":false,"src":"14639:15:152","valueSize":1},{"declaration":74134,"isOffset":false,"isSlot":false,"src":"14656:11:152","valueSize":1},{"declaration":74134,"isOffset":false,"isSlot":false,"src":"14696:11:152","valueSize":1},{"declaration":74103,"isOffset":false,"isSlot":false,"src":"14688:6:152","valueSize":1}],"flags":["memory-safe"],"id":74191,"nodeType":"InlineAssembly","src":"14593:125:152"}]},"functionSelector":"b5e5ad12","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":74096,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74093,"src":"13881:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"id":74097,"kind":"modifierInvocation","modifierName":{"id":74095,"name":"validTimestamp","nameLocations":["13866:14:152"],"nodeType":"IdentifierPath","referencedDeclaration":74899,"src":"13866:14:152"},"nodeType":"ModifierInvocation","src":"13866:18:152"}],"name":"getActiveOperatorsStakeAt","nameLocation":"13793:25:152","parameters":{"id":74094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74093,"mutability":"mutable","name":"ts","nameLocation":"13826:2:152","nodeType":"VariableDeclaration","scope":74193,"src":"13819:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74092,"name":"uint48","nodeType":"ElementaryTypeName","src":"13819:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"13818:11:152"},"returnParameters":{"id":74104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74100,"mutability":"mutable","name":"activeOperators","nameLocation":"13919:15:152","nodeType":"VariableDeclaration","scope":74193,"src":"13902:32:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":74098,"name":"address","nodeType":"ElementaryTypeName","src":"13902:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74099,"nodeType":"ArrayTypeName","src":"13902:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":74103,"mutability":"mutable","name":"stakes","nameLocation":"13953:6:152","nodeType":"VariableDeclaration","scope":74193,"src":"13936:23:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":74101,"name":"uint256","nodeType":"ElementaryTypeName","src":"13936:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74102,"nodeType":"ArrayTypeName","src":"13936:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"13901:59:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":74309,"nodeType":"FunctionDefinition","src":"14730:952:152","nodes":[],"body":{"id":74308,"nodeType":"Block","src":"14788:894:152","nodes":[],"statements":[{"assignments":[74202],"declarations":[{"constant":false,"id":74202,"mutability":"mutable","name":"$","nameLocation":"14814:1:152","nodeType":"VariableDeclaration","scope":74308,"src":"14798:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74201,"nodeType":"UserDefinedTypeName","pathNode":{"id":74200,"name":"Storage","nameLocations":["14798:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"14798:7:152"},"referencedDeclaration":72078,"src":"14798:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74205,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74203,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"14818:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14818:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"14798:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74206,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14843:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":74207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14847:6:152","memberName":"sender","nodeType":"MemberAccess","src":"14843:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":74208,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74202,"src":"14857:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14859:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"14857:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74210,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14869:18:152","memberName":"roleSlashRequester","nodeType":"MemberAccess","referencedDeclaration":80030,"src":"14857:30:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14843:44:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74216,"nodeType":"IfStatement","src":"14839:101:152","trueBody":{"id":74215,"nodeType":"Block","src":"14889:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74212,"name":"NotSlashRequester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72001,"src":"14910:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14910:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74214,"nodeType":"RevertStatement","src":"14903:26:152"}]}},{"body":{"id":74306,"nodeType":"Block","src":"14988:688:152","statements":[{"assignments":[74229],"declarations":[{"constant":false,"id":74229,"mutability":"mutable","name":"slashData","nameLocation":"15021:9:152","nodeType":"VariableDeclaration","scope":74306,"src":"15002:28:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData"},"typeName":{"id":74228,"nodeType":"UserDefinedTypeName","pathNode":{"id":74227,"name":"SlashData","nameLocations":["15002:9:152"],"nodeType":"IdentifierPath","referencedDeclaration":72092,"src":"15002:9:152"},"referencedDeclaration":72092,"src":"15002:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_storage_ptr","typeString":"struct IMiddleware.SlashData"}},"visibility":"internal"}],"id":74233,"initialValue":{"baseExpression":{"id":74230,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74197,"src":"15033:4:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashData_$72092_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata[] calldata"}},"id":74232,"indexExpression":{"id":74231,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74218,"src":"15038:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15033:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"nodeType":"VariableDeclarationStatement","src":"15002:38:152"},{"condition":{"id":74240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"15058:41:152","subExpression":{"arguments":[{"expression":{"id":74237,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74229,"src":"15080:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15090:8:152","memberName":"operator","nodeType":"MemberAccess","referencedDeclaration":72085,"src":"15080:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":74234,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74202,"src":"15059:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15061:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"15059:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15071:8:152","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":55718,"src":"15059:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (bool)"}},"id":74239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15059:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74245,"nodeType":"IfStatement","src":"15054:110:152","trueBody":{"id":74244,"nodeType":"Block","src":"15101:63:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74241,"name":"NotRegisteredOperator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71989,"src":"15126:21:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15126:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74243,"nodeType":"RevertStatement","src":"15119:30:152"}]}},{"body":{"id":74304,"nodeType":"Block","src":"15228:438:152","statements":[{"assignments":[74259],"declarations":[{"constant":false,"id":74259,"mutability":"mutable","name":"vaultData","nameLocation":"15270:9:152","nodeType":"VariableDeclaration","scope":74304,"src":"15246:33:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData"},"typeName":{"id":74258,"nodeType":"UserDefinedTypeName","pathNode":{"id":74257,"name":"VaultSlashData","nameLocations":["15246:14:152"],"nodeType":"IdentifierPath","referencedDeclaration":72083,"src":"15246:14:152"},"referencedDeclaration":72083,"src":"15246:14:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_storage_ptr","typeString":"struct IMiddleware.VaultSlashData"}},"visibility":"internal"}],"id":74264,"initialValue":{"baseExpression":{"expression":{"id":74260,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74229,"src":"15282:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15292:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72091,"src":"15282:16:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_VaultSlashData_$72083_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata[] calldata"}},"id":74263,"indexExpression":{"id":74262,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74247,"src":"15299:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15282:19:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata"}},"nodeType":"VariableDeclarationStatement","src":"15246:55:152"},{"condition":{"id":74271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"15324:35:152","subExpression":{"arguments":[{"expression":{"id":74268,"name":"vaultData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74259,"src":"15343:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata"}},"id":74269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15353:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":72080,"src":"15343:15:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":74265,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74202,"src":"15325:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74266,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15327:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"15325:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74267,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15334:8:152","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":55718,"src":"15325:17:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (bool)"}},"id":74270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15325:34:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74276,"nodeType":"IfStatement","src":"15320:109:152","trueBody":{"id":74275,"nodeType":"Block","src":"15361:68:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74272,"name":"NotRegisteredVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71986,"src":"15390:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15390:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74274,"nodeType":"RevertStatement","src":"15383:27:152"}]}},{"assignments":[74278],"declarations":[{"constant":false,"id":74278,"mutability":"mutable","name":"slasher","nameLocation":"15455:7:152","nodeType":"VariableDeclaration","scope":74304,"src":"15447:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74277,"name":"address","nodeType":"ElementaryTypeName","src":"15447:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":74285,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":74280,"name":"vaultData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74259,"src":"15472:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata"}},"id":74281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15482:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":72080,"src":"15472:15:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74279,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"15465:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15465:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15489:7:152","memberName":"slasher","nodeType":"MemberAccess","referencedDeclaration":65679,"src":"15465:31:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15465:33:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"15447:51:152"},{"expression":{"arguments":[{"expression":{"id":74290,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74202,"src":"15572:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74291,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15574:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"15572:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":74292,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74229,"src":"15586:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15596:8:152","memberName":"operator","nodeType":"MemberAccess","referencedDeclaration":72085,"src":"15586:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":74294,"name":"vaultData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74259,"src":"15606:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata"}},"id":74295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15616:6:152","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":72082,"src":"15606:16:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":74296,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74229,"src":"15624:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15634:2:152","memberName":"ts","nodeType":"MemberAccess","referencedDeclaration":72087,"src":"15624:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"arguments":[{"hexValue":"30","id":74300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15648:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15638:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74298,"name":"bytes","nodeType":"ElementaryTypeName","src":"15642:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15638:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":74287,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74278,"src":"15529:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74286,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"15516:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15516:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15559:12:152","memberName":"requestSlash","nodeType":"MemberAccess","referencedDeclaration":65240,"src":"15516:55:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint48_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes32,address,uint256,uint48,bytes memory) external returns (uint256)"}},"id":74302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15516:135:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74303,"nodeType":"ExpressionStatement","src":"15516:135:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74249,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74247,"src":"15194:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":74250,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74229,"src":"15198:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15208:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72091,"src":"15198:16:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_VaultSlashData_$72083_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata[] calldata"}},"id":74252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15215:6:152","memberName":"length","nodeType":"MemberAccess","src":"15198:23:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15194:27:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74305,"initializationExpression":{"assignments":[74247],"declarations":[{"constant":false,"id":74247,"mutability":"mutable","name":"j","nameLocation":"15191:1:152","nodeType":"VariableDeclaration","scope":74305,"src":"15183:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74246,"name":"uint256","nodeType":"ElementaryTypeName","src":"15183:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74248,"nodeType":"VariableDeclarationStatement","src":"15183:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15223:3:152","subExpression":{"id":74254,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74247,"src":"15225:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74256,"nodeType":"ExpressionStatement","src":"15223:3:152"},"nodeType":"ForStatement","src":"15178:488:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74220,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74218,"src":"14966:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74221,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74197,"src":"14970:4:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashData_$72092_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata[] calldata"}},"id":74222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14975:6:152","memberName":"length","nodeType":"MemberAccess","src":"14970:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14966:15:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74307,"initializationExpression":{"assignments":[74218],"declarations":[{"constant":false,"id":74218,"mutability":"mutable","name":"i","nameLocation":"14963:1:152","nodeType":"VariableDeclaration","scope":74307,"src":"14955:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74217,"name":"uint256","nodeType":"ElementaryTypeName","src":"14955:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74219,"nodeType":"VariableDeclarationStatement","src":"14955:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14983:3:152","subExpression":{"id":74224,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74218,"src":"14985:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74226,"nodeType":"ExpressionStatement","src":"14983:3:152"},"nodeType":"ForStatement","src":"14950:726:152"}]},"baseFunctions":[72206],"functionSelector":"0a71094c","implemented":true,"kind":"function","modifiers":[],"name":"requestSlash","nameLocation":"14739:12:152","parameters":{"id":74198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74197,"mutability":"mutable","name":"data","nameLocation":"14773:4:152","nodeType":"VariableDeclaration","scope":74309,"src":"14752:25:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashData_$72092_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashData[]"},"typeName":{"baseType":{"id":74195,"nodeType":"UserDefinedTypeName","pathNode":{"id":74194,"name":"SlashData","nameLocations":["14752:9:152"],"nodeType":"IdentifierPath","referencedDeclaration":72092,"src":"14752:9:152"},"referencedDeclaration":72092,"src":"14752:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_storage_ptr","typeString":"struct IMiddleware.SlashData"}},"id":74196,"nodeType":"ArrayTypeName","src":"14752:11:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashData_$72092_storage_$dyn_storage_ptr","typeString":"struct IMiddleware.SlashData[]"}},"visibility":"internal"}],"src":"14751:27:152"},"returnParameters":{"id":74199,"nodeType":"ParameterList","parameters":[],"src":"14788:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74378,"nodeType":"FunctionDefinition","src":"15688:528:152","nodes":[],"body":{"id":74377,"nodeType":"Block","src":"15755:461:152","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74316,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15769:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":74317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15773:6:152","memberName":"sender","nodeType":"MemberAccess","src":"15769:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74318,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"15783:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15783:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15794:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"15783:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15804:17:152","memberName":"roleSlashExecutor","nodeType":"MemberAccess","referencedDeclaration":80032,"src":"15783:38:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15769:52:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74327,"nodeType":"IfStatement","src":"15765:108:152","trueBody":{"id":74326,"nodeType":"Block","src":"15823:50:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74323,"name":"NotSlashExecutor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72004,"src":"15844:16:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15844:18:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74325,"nodeType":"RevertStatement","src":"15837:25:152"}]}},{"body":{"id":74375,"nodeType":"Block","src":"15924:286:152","statements":[{"assignments":[74340],"declarations":[{"constant":false,"id":74340,"mutability":"mutable","name":"slash","nameLocation":"15963:5:152","nodeType":"VariableDeclaration","scope":74375,"src":"15938:30:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier"},"typeName":{"id":74339,"nodeType":"UserDefinedTypeName","pathNode":{"id":74338,"name":"SlashIdentifier","nameLocations":["15938:15:152"],"nodeType":"IdentifierPath","referencedDeclaration":72097,"src":"15938:15:152"},"referencedDeclaration":72097,"src":"15938:15:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_storage_ptr","typeString":"struct IMiddleware.SlashIdentifier"}},"visibility":"internal"}],"id":74344,"initialValue":{"baseExpression":{"id":74341,"name":"slashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74313,"src":"15971:7:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashIdentifier_$72097_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata[] calldata"}},"id":74343,"indexExpression":{"id":74342,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74329,"src":"15979:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15971:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata"}},"nodeType":"VariableDeclarationStatement","src":"15938:43:152"},{"condition":{"id":74352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16000:40:152","subExpression":{"arguments":[{"expression":{"id":74349,"name":"slash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74340,"src":"16028:5:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata"}},"id":74350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16034:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":72094,"src":"16028:11:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74345,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"16001:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16001:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74347,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16012:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"16001:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74348,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16019:8:152","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":55718,"src":"16001:26:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (bool)"}},"id":74351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16001:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74357,"nodeType":"IfStatement","src":"15996:106:152","trueBody":{"id":74356,"nodeType":"Block","src":"16042:60:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74353,"name":"NotRegisteredVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71986,"src":"16067:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16067:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74355,"nodeType":"RevertStatement","src":"16060:27:152"}]}},{"expression":{"arguments":[{"expression":{"id":74367,"name":"slash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74340,"src":"16173:5:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata"}},"id":74368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16179:5:152","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":72096,"src":"16173:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":74371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16196:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"16186:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74369,"name":"bytes","nodeType":"ElementaryTypeName","src":"16190:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16186:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":74360,"name":"slash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74340,"src":"16136:5:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata"}},"id":74361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16142:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":72094,"src":"16136:11:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74359,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"16129:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16129:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16149:7:152","memberName":"slasher","nodeType":"MemberAccess","referencedDeclaration":65679,"src":"16129:27:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16129:29:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74358,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"16116:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16116:43:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16160:12:152","memberName":"executeSlash","nodeType":"MemberAccess","referencedDeclaration":65250,"src":"16116:56:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,bytes memory) external returns (uint256)"}},"id":74373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16116:83:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74374,"nodeType":"ExpressionStatement","src":"16116:83:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74331,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74329,"src":"15899:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74332,"name":"slashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74313,"src":"15903:7:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashIdentifier_$72097_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata[] calldata"}},"id":74333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15911:6:152","memberName":"length","nodeType":"MemberAccess","src":"15903:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15899:18:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74376,"initializationExpression":{"assignments":[74329],"declarations":[{"constant":false,"id":74329,"mutability":"mutable","name":"i","nameLocation":"15896:1:152","nodeType":"VariableDeclaration","scope":74376,"src":"15888:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74328,"name":"uint256","nodeType":"ElementaryTypeName","src":"15888:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74330,"nodeType":"VariableDeclarationStatement","src":"15888:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15919:3:152","subExpression":{"id":74335,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74329,"src":"15921:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74337,"nodeType":"ExpressionStatement","src":"15919:3:152"},"nodeType":"ForStatement","src":"15883:327:152"}]},"baseFunctions":[72213],"functionSelector":"af962995","implemented":true,"kind":"function","modifiers":[],"name":"executeSlash","nameLocation":"15697:12:152","parameters":{"id":74314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74313,"mutability":"mutable","name":"slashes","nameLocation":"15737:7:152","nodeType":"VariableDeclaration","scope":74378,"src":"15710:34:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashIdentifier_$72097_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier[]"},"typeName":{"baseType":{"id":74311,"nodeType":"UserDefinedTypeName","pathNode":{"id":74310,"name":"SlashIdentifier","nameLocations":["15710:15:152"],"nodeType":"IdentifierPath","referencedDeclaration":72097,"src":"15710:15:152"},"referencedDeclaration":72097,"src":"15710:15:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_storage_ptr","typeString":"struct IMiddleware.SlashIdentifier"}},"id":74312,"nodeType":"ArrayTypeName","src":"15710:17:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashIdentifier_$72097_storage_$dyn_storage_ptr","typeString":"struct IMiddleware.SlashIdentifier[]"}},"visibility":"internal"}],"src":"15709:36:152"},"returnParameters":{"id":74315,"nodeType":"ParameterList","parameters":[],"src":"15755:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74449,"nodeType":"FunctionDefinition","src":"16222:556:152","nodes":[],"body":{"id":74448,"nodeType":"Block","src":"16331:447:152","nodes":[],"statements":[{"assignments":[74389],"declarations":[{"constant":false,"id":74389,"mutability":"mutable","name":"$","nameLocation":"16357:1:152","nodeType":"VariableDeclaration","scope":74448,"src":"16341:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74388,"nodeType":"UserDefinedTypeName","pathNode":{"id":74387,"name":"Storage","nameLocations":["16341:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"16341:7:152"},"referencedDeclaration":72078,"src":"16341:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74392,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74390,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"16361:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16361:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16341:30:152"},{"body":{"id":74446,"nodeType":"Block","src":"16425:347:152","statements":[{"assignments":[74406,74408,74410],"declarations":[{"constant":false,"id":74406,"mutability":"mutable","name":"vault","nameLocation":"16448:5:152","nodeType":"VariableDeclaration","scope":74446,"src":"16440:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74405,"name":"address","nodeType":"ElementaryTypeName","src":"16440:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74408,"mutability":"mutable","name":"vaultEnabledTime","nameLocation":"16462:16:152","nodeType":"VariableDeclaration","scope":74446,"src":"16455:23:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74407,"name":"uint48","nodeType":"ElementaryTypeName","src":"16455:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74410,"mutability":"mutable","name":"vaultDisabledTime","nameLocation":"16487:17:152","nodeType":"VariableDeclaration","scope":74446,"src":"16480:24:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74409,"name":"uint48","nodeType":"ElementaryTypeName","src":"16480:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74416,"initialValue":{"arguments":[{"id":74414,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74394,"src":"16529:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":74411,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74389,"src":"16508:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16510:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"16508:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16517:11:152","memberName":"atWithTimes","nodeType":"MemberAccess","referencedDeclaration":81122,"src":"16508:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint48,uint48)"}},"id":74415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16508:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint48_$_t_uint48_$","typeString":"tuple(address,uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"16439:92:152"},{"condition":{"id":74422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16550:54:152","subExpression":{"arguments":[{"id":74418,"name":"vaultEnabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74408,"src":"16564:16:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74419,"name":"vaultDisabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74410,"src":"16582:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74420,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74382,"src":"16601:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74417,"name":"_wasActiveAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74478,"src":"16551:12:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$_t_uint48_$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48,uint48,uint48) pure returns (bool)"}},"id":74421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16551:53:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74425,"nodeType":"IfStatement","src":"16546:101:152","trueBody":{"id":74424,"nodeType":"Block","src":"16606:41:152","statements":[{"id":74423,"nodeType":"Continue","src":"16624:8:152"}]}},{"expression":{"id":74444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74426,"name":"stake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74385,"src":"16661:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"expression":{"id":74435,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74389,"src":"16720:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16722:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"16720:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74437,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74380,"src":"16734:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74438,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74382,"src":"16744:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"arguments":[{"hexValue":"30","id":74441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16758:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"16748:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74439,"name":"bytes","nodeType":"ElementaryTypeName","src":"16752:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16748:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74429,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74406,"src":"16692:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74428,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"16685:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16685:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16699:9:152","memberName":"delegator","nodeType":"MemberAccess","referencedDeclaration":65667,"src":"16685:23:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16685:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74427,"name":"IBaseDelegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64257,"src":"16670:14:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBaseDelegator_$64257_$","typeString":"type(contract IBaseDelegator)"}},"id":74433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16670:41:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"id":74434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16712:7:152","memberName":"stakeAt","nodeType":"MemberAccess","referencedDeclaration":64218,"src":"16670:49:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_uint48_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes32,address,uint48,bytes memory) view external returns (uint256)"}},"id":74443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16670:91:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16661:100:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74445,"nodeType":"ExpressionStatement","src":"16661:100:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74396,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74394,"src":"16397:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":74397,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74389,"src":"16401:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74398,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16403:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"16401:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16410:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"16401:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":74400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16401:17:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16397:21:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74447,"initializationExpression":{"assignments":[74394],"declarations":[{"constant":false,"id":74394,"mutability":"mutable","name":"i","nameLocation":"16394:1:152","nodeType":"VariableDeclaration","scope":74447,"src":"16386:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74393,"name":"uint256","nodeType":"ElementaryTypeName","src":"16386:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74395,"nodeType":"VariableDeclarationStatement","src":"16386:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16420:3:152","subExpression":{"id":74402,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74394,"src":"16422:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74404,"nodeType":"ExpressionStatement","src":"16420:3:152"},"nodeType":"ForStatement","src":"16381:391:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_collectOperatorStakeFromVaultsAt","nameLocation":"16231:33:152","parameters":{"id":74383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74380,"mutability":"mutable","name":"operator","nameLocation":"16273:8:152","nodeType":"VariableDeclaration","scope":74449,"src":"16265:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74379,"name":"address","nodeType":"ElementaryTypeName","src":"16265:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74382,"mutability":"mutable","name":"ts","nameLocation":"16290:2:152","nodeType":"VariableDeclaration","scope":74449,"src":"16283:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74381,"name":"uint48","nodeType":"ElementaryTypeName","src":"16283:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"16264:29:152"},"returnParameters":{"id":74386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74385,"mutability":"mutable","name":"stake","nameLocation":"16324:5:152","nodeType":"VariableDeclaration","scope":74449,"src":"16316:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74384,"name":"uint256","nodeType":"ElementaryTypeName","src":"16316:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16315:15:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":74478,"nodeType":"FunctionDefinition","src":"16784:208:152","nodes":[],"body":{"id":74477,"nodeType":"Block","src":"16886:106:152","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":74475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":74466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74460,"name":"enabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74451,"src":"16903:11:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":74461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16918:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16903:16:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74463,"name":"enabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74451,"src":"16923:11:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":74464,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74455,"src":"16938:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"16923:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16903:37:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":74473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74467,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74453,"src":"16945:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":74468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16961:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16945:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74470,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74453,"src":"16966:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":74471,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74455,"src":"16982:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"16966:18:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16945:39:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":74474,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16944:41:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16903:82:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":74459,"id":74476,"nodeType":"Return","src":"16896:89:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_wasActiveAt","nameLocation":"16793:12:152","parameters":{"id":74456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74451,"mutability":"mutable","name":"enabledTime","nameLocation":"16813:11:152","nodeType":"VariableDeclaration","scope":74478,"src":"16806:18:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74450,"name":"uint48","nodeType":"ElementaryTypeName","src":"16806:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74453,"mutability":"mutable","name":"disabledTime","nameLocation":"16833:12:152","nodeType":"VariableDeclaration","scope":74478,"src":"16826:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74452,"name":"uint48","nodeType":"ElementaryTypeName","src":"16826:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74455,"mutability":"mutable","name":"ts","nameLocation":"16854:2:152","nodeType":"VariableDeclaration","scope":74478,"src":"16847:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74454,"name":"uint48","nodeType":"ElementaryTypeName","src":"16847:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"16805:52:152"},"returnParameters":{"id":74459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74458,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74478,"src":"16880:4:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":74457,"name":"bool","nodeType":"ElementaryTypeName","src":"16880:4:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16879:6:152"},"scope":75047,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":74495,"nodeType":"FunctionDefinition","src":"17037:154:152","nodes":[],"body":{"id":74494,"nodeType":"Block","src":"17093:98:152","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74483,"name":"hook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74480,"src":"17107:4:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17123:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17115:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74484,"name":"address","nodeType":"ElementaryTypeName","src":"17115:7:152","typeDescriptions":{}}},"id":74487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17115:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17107:18:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74493,"nodeType":"IfStatement","src":"17103:82:152","trueBody":{"id":74492,"nodeType":"Block","src":"17127:58:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74489,"name":"UnsupportedDelegatorHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71956,"src":"17148:24:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17148:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74491,"nodeType":"RevertStatement","src":"17141:33:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_delegatorHookCheck","nameLocation":"17046:19:152","parameters":{"id":74481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74480,"mutability":"mutable","name":"hook","nameLocation":"17074:4:152","nodeType":"VariableDeclaration","scope":74495,"src":"17066:12:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74479,"name":"address","nodeType":"ElementaryTypeName","src":"17066:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17065:14:152"},"returnParameters":{"id":74482,"nodeType":"ParameterList","parameters":[],"src":"17093:0:152"},"scope":75047,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":74575,"nodeType":"FunctionDefinition","src":"17197:2173:152","nodes":[],"body":{"id":74574,"nodeType":"Block","src":"17255:2115:152","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74502,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"17273:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17275:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"17273:13:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":74504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17289:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17273:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"457261206475726174696f6e2063616e6e6f74206265207a65726f","id":74506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17292:29:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_9cb40eb337a8be46fe49b815745764a5c878d5f788a862958774564de9a6bdfb","typeString":"literal_string \"Era duration cannot be zero\""},"value":"Era duration cannot be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9cb40eb337a8be46fe49b815745764a5c878d5f788a862958774564de9a6bdfb","typeString":"literal_string \"Era duration cannot be zero\""}],"id":74501,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17265:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17265:57:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74508,"nodeType":"ExpressionStatement","src":"17265:57:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74510,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"17657:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74511,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17659:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"17657:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":74512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17684:1:152","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":74513,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"17688:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17690:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"17688:13:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"17684:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"17657:44:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d696e207661756c74732065706f6368206475726174696f6e206d75737420626520626967676572207468616e20322065726173","id":74517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17703:54:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_08d55bbfea360f7a0f51895beb619c7bea0ad070b37461a0b57fa718fbacc261","typeString":"literal_string \"Min vaults epoch duration must be bigger than 2 eras\""},"value":"Min vaults epoch duration must be bigger than 2 eras"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_08d55bbfea360f7a0f51895beb619c7bea0ad070b37461a0b57fa718fbacc261","typeString":"literal_string \"Min vaults epoch duration must be bigger than 2 eras\""}],"id":74509,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17649:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17649:109:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74519,"nodeType":"ExpressionStatement","src":"17649:109:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74521,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"17961:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17963:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"17961:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":74523,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"17986:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17988:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"17986:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"17961:48:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f70657261746f7220677261636520706572696f64206d75737420626520626967676572207468616e206d696e207661756c74732065706f6368206475726174696f6e","id":74526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18023:69:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_700fc0b24fd5539cc3c3176fece13ecd1ea0bf8b6a28ed1e2c6943912916cbc5","typeString":"literal_string \"Operator grace period must be bigger than min vaults epoch duration\""},"value":"Operator grace period must be bigger than min vaults epoch duration"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_700fc0b24fd5539cc3c3176fece13ecd1ea0bf8b6a28ed1e2c6943912916cbc5","typeString":"literal_string \"Operator grace period must be bigger than min vaults epoch duration\""}],"id":74520,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17940:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17940:162:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74528,"nodeType":"ExpressionStatement","src":"17940:162:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74530,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"18302:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18304:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"18302:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":74532,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"18324:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18326:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"18324:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"18302:45:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c7420677261636520706572696f64206d75737420626520626967676572207468616e206d696e207661756c74732065706f6368206475726174696f6e","id":74535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18361:66:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_2dd612bbaa621bf9dcf26798ef0b7419874868081ba1a27d638987f23019844a","typeString":"literal_string \"Vault grace period must be bigger than min vaults epoch duration\""},"value":"Vault grace period must be bigger than min vaults epoch duration"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2dd612bbaa621bf9dcf26798ef0b7419874868081ba1a27d638987f23019844a","typeString":"literal_string \"Vault grace period must be bigger than min vaults epoch duration\""}],"id":74529,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18281:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18281:156:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74537,"nodeType":"ExpressionStatement","src":"18281:156:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74539,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"18517:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18519:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"18517:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":74541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18537:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18517:21:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5665746f206475726174696f6e2063616e6e6f74206265207a65726f","id":74543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18540:30:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_466330493aafe40ad9b15938da24a0095ac1cc805fc368da2dc496ba6af4d822","typeString":"literal_string \"Veto duration cannot be zero\""},"value":"Veto duration cannot be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_466330493aafe40ad9b15938da24a0095ac1cc805fc368da2dc496ba6af4d822","typeString":"literal_string \"Veto duration cannot be zero\""}],"id":74538,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18509:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18509:62:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74545,"nodeType":"ExpressionStatement","src":"18509:62:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74547,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"18781:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74548,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18783:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"18781:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":74549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18808:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18781:28:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d696e20736c61736820657865637574696f6e2064656c61792063616e6e6f74206265207a65726f","id":74551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18811:42:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_2129939bf81227e27348301792d04b2554d3359286879c859fd621f958cd3c48","typeString":"literal_string \"Min slash execution delay cannot be zero\""},"value":"Min slash execution delay cannot be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2129939bf81227e27348301792d04b2554d3359286879c859fd621f958cd3c48","typeString":"literal_string \"Min slash execution delay cannot be zero\""}],"id":74546,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18773:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18773:81:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74553,"nodeType":"ExpressionStatement","src":"18773:81:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74555,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"18885:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74556,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18887:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"18885:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":74557,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"18905:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18907:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"18905:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"18885:44:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":74560,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"18933:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18935:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"18933:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"18885:71:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5665746f206475726174696f6e20616e6420736c61736820657865637574696f6e2064656c6179206d757374206265206c657373207468616e206f7220657175616c20746f206d696e207661756c74732065706f6368206475726174696f6e","id":74563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18970:97:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_c4436f7b10417f1b918c24bd40e94030f7b387a5e411c7abad1cd0b9c9989d18","typeString":"literal_string \"Veto duration and slash execution delay must be less than or equal to min vaults epoch duration\""},"value":"Veto duration and slash execution delay must be less than or equal to min vaults epoch duration"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c4436f7b10417f1b918c24bd40e94030f7b387a5e411c7abad1cd0b9c9989d18","typeString":"literal_string \"Veto duration and slash execution delay must be less than or equal to min vaults epoch duration\""}],"id":74554,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18864:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18864:213:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74565,"nodeType":"ExpressionStatement","src":"18864:213:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74567,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74498,"src":"19282:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19284:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"19282:27:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"33","id":74569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19313:1:152","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19282:32:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265736f6c766572207365742065706f6368732064656c6179206d757374206265206174206c656173742033","id":74571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19316:46:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_2bb1120b8d1dfac6f403f8b5650c7b4c6cc5a65cfa6676f98f5e056374cedc62","typeString":"literal_string \"Resolver set epochs delay must be at least 3\""},"value":"Resolver set epochs delay must be at least 3"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2bb1120b8d1dfac6f403f8b5650c7b4c6cc5a65cfa6676f98f5e056374cedc62","typeString":"literal_string \"Resolver set epochs delay must be at least 3\""}],"id":74566,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19274:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19274:89:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74573,"nodeType":"ExpressionStatement","src":"19274:89:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateStorage","nameLocation":"17206:16:152","parameters":{"id":74499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74498,"mutability":"mutable","name":"$","nameLocation":"17239:1:152","nodeType":"VariableDeclaration","scope":74575,"src":"17223:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74497,"nodeType":"UserDefinedTypeName","pathNode":{"id":74496,"name":"Storage","nameLocations":["17223:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"17223:7:152"},"referencedDeclaration":72078,"src":"17223:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"src":"17222:19:152"},"returnParameters":{"id":74500,"nodeType":"ParameterList","parameters":[],"src":"17255:0:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":74842,"nodeType":"FunctionDefinition","src":"19418:2572:152","nodes":[],"body":{"id":74841,"nodeType":"Block","src":"19466:2524:152","nodes":[],"statements":[{"assignments":[74582],"declarations":[{"constant":false,"id":74582,"mutability":"mutable","name":"$","nameLocation":"19492:1:152","nodeType":"VariableDeclaration","scope":74841,"src":"19476:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74581,"nodeType":"UserDefinedTypeName","pathNode":{"id":74580,"name":"Storage","nameLocations":["19476:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"19476:7:152"},"referencedDeclaration":72078,"src":"19476:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74585,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74583,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"19496:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19496:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"19476:30:152"},{"condition":{"id":74594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19521:54:152","subExpression":{"arguments":[{"id":74592,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74577,"src":"19568:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":74587,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"19532:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19534:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"19532:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74589,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19544:13:152","memberName":"vaultRegistry","nodeType":"MemberAccess","referencedDeclaration":80016,"src":"19532:25:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74586,"name":"IRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64083,"src":"19522:9:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRegistry_$64083_$","typeString":"type(contract IRegistry)"}},"id":74590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19522:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRegistry_$64083","typeString":"contract IRegistry"}},"id":74591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19559:8:152","memberName":"isEntity","nodeType":"MemberAccess","referencedDeclaration":64068,"src":"19522:45:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":74593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19522:53:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74599,"nodeType":"IfStatement","src":"19517:109:152","trueBody":{"id":74598,"nodeType":"Block","src":"19577:49:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74595,"name":"NonFactoryVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71929,"src":"19598:15:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19598:17:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74597,"nodeType":"RevertStatement","src":"19591:24:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":74607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74601,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74577,"src":"19658:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74600,"name":"IMigratableEntity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63959,"src":"19640:17:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMigratableEntity_$63959_$","typeString":"type(contract IMigratableEntity)"}},"id":74602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19640:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMigratableEntity_$63959","typeString":"contract IMigratableEntity"}},"id":74603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19666:7:152","memberName":"version","nodeType":"MemberAccess","referencedDeclaration":63940,"src":"19640:33:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint64_$","typeString":"function () view external returns (uint64)"}},"id":74604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19640:35:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":74605,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"19679:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19681:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"19679:25:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"19640:64:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74612,"nodeType":"IfStatement","src":"19636:128:152","trueBody":{"id":74611,"nodeType":"Block","src":"19706:58:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74608,"name":"IncompatibleVaultVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71980,"src":"19727:24:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19727:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74610,"nodeType":"RevertStatement","src":"19720:33:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74614,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74577,"src":"19785:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74613,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"19778:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19778:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19793:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":65655,"src":"19778:25:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19778:27:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":74618,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"19809:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74619,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19811:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"19809:12:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19778:43:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74625,"nodeType":"IfStatement","src":"19774:100:152","trueBody":{"id":74624,"nodeType":"Block","src":"19823:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74621,"name":"UnknownCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71935,"src":"19844:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19844:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74623,"nodeType":"RevertStatement","src":"19837:26:152"}]}},{"assignments":[74627],"declarations":[{"constant":false,"id":74627,"mutability":"mutable","name":"vaultEpochDuration","nameLocation":"19919:18:152","nodeType":"VariableDeclaration","scope":74841,"src":"19912:25:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74626,"name":"uint48","nodeType":"ElementaryTypeName","src":"19912:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74633,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74629,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74577,"src":"19947:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74628,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"19940:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19940:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19955:13:152","memberName":"epochDuration","nodeType":"MemberAccess","referencedDeclaration":65697,"src":"19940:28:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint48_$","typeString":"function () view external returns (uint48)"}},"id":74632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19940:30:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"19912:58:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74634,"name":"vaultEpochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74627,"src":"19984:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74635,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"20005:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74636,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20007:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"20005:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"19984:44:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74642,"nodeType":"IfStatement","src":"19980:107:152","trueBody":{"id":74641,"nodeType":"Block","src":"20030:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74638,"name":"VaultWrongEpochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71932,"src":"20051:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20051:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74640,"nodeType":"RevertStatement","src":"20044:32:152"}]}},{"condition":{"id":74648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20134:40:152","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74644,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74577,"src":"20142:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74643,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"20135:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20135:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20150:22:152","memberName":"isDelegatorInitialized","nodeType":"MemberAccess","referencedDeclaration":65673,"src":"20135:37:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":74647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20135:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74653,"nodeType":"IfStatement","src":"20130:103:152","trueBody":{"id":74652,"nodeType":"Block","src":"20176:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74649,"name":"DelegatorNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71962,"src":"20197:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20197:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74651,"nodeType":"RevertStatement","src":"20190:32:152"}]}},{"assignments":[74656],"declarations":[{"constant":false,"id":74656,"mutability":"mutable","name":"delegator","nameLocation":"20258:9:152","nodeType":"VariableDeclaration","scope":74841,"src":"20243:24:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"},"typeName":{"id":74655,"nodeType":"UserDefinedTypeName","pathNode":{"id":74654,"name":"IBaseDelegator","nameLocations":["20243:14:152"],"nodeType":"IdentifierPath","referencedDeclaration":64257,"src":"20243:14:152"},"referencedDeclaration":64257,"src":"20243:14:152","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"visibility":"internal"}],"id":74664,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74659,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74577,"src":"20292:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74658,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"20285:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20285:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20300:9:152","memberName":"delegator","nodeType":"MemberAccess","referencedDeclaration":65667,"src":"20285:24:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20285:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74657,"name":"IBaseDelegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64257,"src":"20270:14:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBaseDelegator_$64257_$","typeString":"type(contract IBaseDelegator)"}},"id":74663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20270:42:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"nodeType":"VariableDeclarationStatement","src":"20243:69:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":74667,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"20352:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74668,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20354:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"20352:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":74665,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74656,"src":"20326:9:152","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"id":74666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20336:15:152","memberName":"maxNetworkLimit","nodeType":"MemberAccess","referencedDeclaration":64204,"src":"20326:25:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) view external returns (uint256)"}},"id":74669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20326:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":74672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20374:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":74671,"name":"uint256","nodeType":"ElementaryTypeName","src":"20374:7:152","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":74670,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"20369:4:152","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":74673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20369:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":74674,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20383:3:152","memberName":"max","nodeType":"MemberAccess","src":"20369:17:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20326:60:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74688,"nodeType":"IfStatement","src":"20322:158:152","trueBody":{"id":74687,"nodeType":"Block","src":"20388:92:152","statements":[{"expression":{"arguments":[{"id":74679,"name":"NETWORK_IDENTIFIER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72853,"src":"20431:18:152","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"arguments":[{"id":74682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20456:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":74681,"name":"uint256","nodeType":"ElementaryTypeName","src":"20456:7:152","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":74680,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"20451:4:152","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":74683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20451:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":74684,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20465:3:152","memberName":"max","nodeType":"MemberAccess","src":"20451:17:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":74676,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74656,"src":"20402:9:152","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"id":74678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20412:18:152","memberName":"setMaxNetworkLimit","nodeType":"MemberAccess","referencedDeclaration":64236,"src":"20402:28:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint96_$_t_uint256_$returns$__$","typeString":"function (uint96,uint256) external"}},"id":74685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20402:67:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74686,"nodeType":"ExpressionStatement","src":"20402:67:152"}]}},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74691,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74656,"src":"20524:9:152","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}],"id":74690,"name":"IBaseDelegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64257,"src":"20509:14:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBaseDelegator_$64257_$","typeString":"type(contract IBaseDelegator)"}},"id":74692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20509:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"id":74693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20535:4:152","memberName":"hook","nodeType":"MemberAccess","referencedDeclaration":64196,"src":"20509:30:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20509:32:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74689,"name":"_delegatorHookCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74495,"src":"20489:19:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":74695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20489:53:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74696,"nodeType":"ExpressionStatement","src":"20489:53:152"},{"condition":{"id":74702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20588:38:152","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74698,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74577,"src":"20596:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74697,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"20589:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20589:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20604:20:152","memberName":"isSlasherInitialized","nodeType":"MemberAccess","referencedDeclaration":65685,"src":"20589:35:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":74701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20589:37:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74707,"nodeType":"IfStatement","src":"20584:99:152","trueBody":{"id":74706,"nodeType":"Block","src":"20628:55:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74703,"name":"SlasherNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71965,"src":"20649:21:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20649:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74705,"nodeType":"RevertStatement","src":"20642:30:152"}]}},{"assignments":[74709],"declarations":[{"constant":false,"id":74709,"mutability":"mutable","name":"slasher","nameLocation":"20701:7:152","nodeType":"VariableDeclaration","scope":74841,"src":"20693:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74708,"name":"address","nodeType":"ElementaryTypeName","src":"20693:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":74715,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74711,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74577,"src":"20718:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74710,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"20711:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20711:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20726:7:152","memberName":"slasher","nodeType":"MemberAccess","referencedDeclaration":65679,"src":"20711:22:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20711:24:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"20693:42:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":74723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74717,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74709,"src":"20757:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74716,"name":"IEntity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63851,"src":"20749:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEntity_$63851_$","typeString":"type(contract IEntity)"}},"id":74718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20749:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEntity_$63851","typeString":"contract IEntity"}},"id":74719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20766:4:152","memberName":"TYPE","nodeType":"MemberAccess","referencedDeclaration":63844,"src":"20749:21:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint64_$","typeString":"function () view external returns (uint64)"}},"id":74720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20749:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":74721,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"20776:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74722,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20778:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"20776:21:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"20749:48:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74728,"nodeType":"IfStatement","src":"20745:111:152","trueBody":{"id":74727,"nodeType":"Block","src":"20799:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74724,"name":"IncompatibleSlasherType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71968,"src":"20820:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20820:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74726,"nodeType":"RevertStatement","src":"20813:32:152"}]}},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74730,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74709,"src":"20883:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74729,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"20870:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20870:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20892:12:152","memberName":"isBurnerHook","nodeType":"MemberAccess","referencedDeclaration":64937,"src":"20870:34:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":74733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20870:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74738,"nodeType":"IfStatement","src":"20866:98:152","trueBody":{"id":74737,"nodeType":"Block","src":"20908:56:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74734,"name":"BurnerHookNotSupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71971,"src":"20929:22:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20929:24:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74736,"nodeType":"RevertStatement","src":"20922:31:152"}]}},{"assignments":[74740],"declarations":[{"constant":false,"id":74740,"mutability":"mutable","name":"vetoDuration","nameLocation":"20981:12:152","nodeType":"VariableDeclaration","scope":74841,"src":"20974:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74739,"name":"uint48","nodeType":"ElementaryTypeName","src":"20974:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74746,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74742,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74709,"src":"21009:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74741,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"20996:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20996:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21018:12:152","memberName":"vetoDuration","nodeType":"MemberAccess","referencedDeclaration":65172,"src":"20996:34:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint48_$","typeString":"function () view external returns (uint48)"}},"id":74745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20996:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"20974:58:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74747,"name":"vetoDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74740,"src":"21046:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74748,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"21061:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21063:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"21061:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"21046:32:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74755,"nodeType":"IfStatement","src":"21042:92:152","trueBody":{"id":74754,"nodeType":"Block","src":"21080:54:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74751,"name":"VetoDurationTooShort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71974,"src":"21101:20:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21101:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74753,"nodeType":"RevertStatement","src":"21094:29:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74756,"name":"vetoDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74740,"src":"21148:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":74757,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"21163:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21165:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"21163:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"21148:39:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":74760,"name":"vaultEpochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74627,"src":"21190:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"21148:60:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74766,"nodeType":"IfStatement","src":"21144:119:152","trueBody":{"id":74765,"nodeType":"Block","src":"21210:53:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74762,"name":"VetoDurationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71977,"src":"21231:19:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21231:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74764,"nodeType":"RevertStatement","src":"21224:28:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74768,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74709,"src":"21290:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74767,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"21277:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21277:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21299:22:152","memberName":"resolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":65202,"src":"21277:44:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":74771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21277:46:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":74772,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"21326:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74773,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21328:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"21326:27:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21277:76:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74779,"nodeType":"IfStatement","src":"21273:139:152","trueBody":{"id":74778,"nodeType":"Block","src":"21355:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74775,"name":"ResolverSetDelayTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71995,"src":"21376:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21376:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74777,"nodeType":"RevertStatement","src":"21369:32:152"}]}},{"assignments":[74781],"declarations":[{"constant":false,"id":74781,"mutability":"mutable","name":"resolver","nameLocation":"21430:8:152","nodeType":"VariableDeclaration","scope":74841,"src":"21422:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74780,"name":"address","nodeType":"ElementaryTypeName","src":"21422:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":74793,"initialValue":{"arguments":[{"expression":{"id":74786,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"21472:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21474:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"21472:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":74790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21496:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74789,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"21486:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74788,"name":"bytes","nodeType":"ElementaryTypeName","src":"21490:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21486:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":74783,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74709,"src":"21454:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74782,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"21441:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21441:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21463:8:152","memberName":"resolver","nodeType":"MemberAccess","referencedDeclaration":65224,"src":"21441:30:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (bytes32,bytes memory) view external returns (address)"}},"id":74792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21441:58:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"21422:77:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74794,"name":"resolver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74781,"src":"21513:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21533:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74796,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21525:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74795,"name":"address","nodeType":"ElementaryTypeName","src":"21525:7:152","typeDescriptions":{}}},"id":74798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21525:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21513:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74815,"name":"resolver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74781,"src":"21665:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":74816,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"21677:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74817,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21679:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"21677:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21689:12:152","memberName":"vetoResolver","nodeType":"MemberAccess","referencedDeclaration":80034,"src":"21677:24:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21665:36:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74824,"nodeType":"IfStatement","src":"21661:147:152","trueBody":{"id":74823,"nodeType":"Block","src":"21703:105:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74820,"name":"ResolverMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71992,"src":"21779:16:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21779:18:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74822,"nodeType":"RevertStatement","src":"21772:25:152"}]}},"id":74825,"nodeType":"IfStatement","src":"21509:299:152","trueBody":{"id":74814,"nodeType":"Block","src":"21537:118:152","statements":[{"expression":{"arguments":[{"id":74804,"name":"NETWORK_IDENTIFIER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72853,"src":"21585:18:152","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"expression":{"id":74805,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"21605:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74806,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21607:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"21605:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21617:12:152","memberName":"vetoResolver","nodeType":"MemberAccess","referencedDeclaration":80034,"src":"21605:24:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":74810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21641:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"21631:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74808,"name":"bytes","nodeType":"ElementaryTypeName","src":"21635:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21631:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":74801,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74709,"src":"21564:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74800,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"21551:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21551:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21573:11:152","memberName":"setResolver","nodeType":"MemberAccess","referencedDeclaration":65268,"src":"21551:33:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint96_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (uint96,address,bytes memory) external"}},"id":74812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21551:93:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74813,"nodeType":"ExpressionStatement","src":"21551:93:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74827,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74577,"src":"21901:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74826,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"21894:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21894:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21909:6:152","memberName":"burner","nodeType":"MemberAccess","referencedDeclaration":65661,"src":"21894:21:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21894:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21929:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74832,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21921:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74831,"name":"address","nodeType":"ElementaryTypeName","src":"21921:7:152","typeDescriptions":{}}},"id":74834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21921:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21894:37:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74840,"nodeType":"IfStatement","src":"21890:94:152","trueBody":{"id":74839,"nodeType":"Block","src":"21933:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74836,"name":"UnsupportedBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71959,"src":"21954:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21954:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74838,"nodeType":"RevertStatement","src":"21947:26:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateVault","nameLocation":"19427:14:152","parameters":{"id":74578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74577,"mutability":"mutable","name":"_vault","nameLocation":"19450:6:152","nodeType":"VariableDeclaration","scope":74842,"src":"19442:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74576,"name":"address","nodeType":"ElementaryTypeName","src":"19442:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19441:16:152"},"returnParameters":{"id":74579,"nodeType":"ParameterList","parameters":[],"src":"19466:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":74889,"nodeType":"FunctionDefinition","src":"21996:482:152","nodes":[],"body":{"id":74888,"nodeType":"Block","src":"22075:403:152","nodes":[],"statements":[{"condition":{"id":74858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"22089:72:152","subExpression":{"arguments":[{"id":74856,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74846,"src":"22152:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74850,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"22100:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22100:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74852,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22111:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"22100:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80035_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22121:20:152","memberName":"stakerRewardsFactory","nodeType":"MemberAccess","referencedDeclaration":80026,"src":"22100:41:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74849,"name":"IRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64083,"src":"22090:9:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRegistry_$64083_$","typeString":"type(contract IRegistry)"}},"id":74854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22090:52:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRegistry_$64083","typeString":"contract IRegistry"}},"id":74855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22143:8:152","memberName":"isEntity","nodeType":"MemberAccess","referencedDeclaration":64068,"src":"22090:61:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":74857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22090:71:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74863,"nodeType":"IfStatement","src":"22085:135:152","trueBody":{"id":74862,"nodeType":"Block","src":"22163:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74859,"name":"NonFactoryStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72007,"src":"22184:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22184:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74861,"nodeType":"RevertStatement","src":"22177:32:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74865,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74846,"src":"22256:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74864,"name":"IDefaultStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70743,"src":"22234:21:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDefaultStakerRewards_$70743_$","typeString":"type(contract IDefaultStakerRewards)"}},"id":74866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22234:31:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDefaultStakerRewards_$70743","typeString":"contract IDefaultStakerRewards"}},"id":74867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22266:5:152","memberName":"VAULT","nodeType":"MemberAccess","referencedDeclaration":70678,"src":"22234:37:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22234:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":74869,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74844,"src":"22277:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22234:49:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74875,"nodeType":"IfStatement","src":"22230:114:152","trueBody":{"id":74874,"nodeType":"Block","src":"22285:59:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74871,"name":"InvalidStakerRewardsVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72010,"src":"22306:25:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22306:27:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74873,"nodeType":"RevertStatement","src":"22299:34:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":74882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74877,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74846,"src":"22380:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74876,"name":"IDefaultStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70743,"src":"22358:21:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDefaultStakerRewards_$70743_$","typeString":"type(contract IDefaultStakerRewards)"}},"id":74878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22358:31:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDefaultStakerRewards_$70743","typeString":"contract IDefaultStakerRewards"}},"id":74879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22390:7:152","memberName":"version","nodeType":"MemberAccess","referencedDeclaration":70795,"src":"22358:39:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint64_$","typeString":"function () view external returns (uint64)"}},"id":74880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22358:41:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"32","id":74881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22403:1:152","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22358:46:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74887,"nodeType":"IfStatement","src":"22354:118:152","trueBody":{"id":74886,"nodeType":"Block","src":"22406:66:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74883,"name":"IncompatibleStakerRewardsVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71983,"src":"22427:32:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22427:34:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74885,"nodeType":"RevertStatement","src":"22420:41:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateStakerRewards","nameLocation":"22005:22:152","parameters":{"id":74847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74844,"mutability":"mutable","name":"_vault","nameLocation":"22036:6:152","nodeType":"VariableDeclaration","scope":74889,"src":"22028:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74843,"name":"address","nodeType":"ElementaryTypeName","src":"22028:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74846,"mutability":"mutable","name":"_rewards","nameLocation":"22052:8:152","nodeType":"VariableDeclaration","scope":74889,"src":"22044:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74845,"name":"address","nodeType":"ElementaryTypeName","src":"22044:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"22027:34:152"},"returnParameters":{"id":74848,"nodeType":"ParameterList","parameters":[],"src":"22075:0:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":74899,"nodeType":"ModifierDefinition","src":"22615:82:152","nodes":[],"body":{"id":74898,"nodeType":"Block","src":"22650:47:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":74894,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74891,"src":"22676:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74893,"name":"_validTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74946,"src":"22660:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$__$","typeString":"function (uint48) view"}},"id":74895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22660:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74896,"nodeType":"ExpressionStatement","src":"22660:19:152"},{"id":74897,"nodeType":"PlaceholderStatement","src":"22689:1:152"}]},"name":"validTimestamp","nameLocation":"22624:14:152","parameters":{"id":74892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74891,"mutability":"mutable","name":"ts","nameLocation":"22646:2:152","nodeType":"VariableDeclaration","scope":74899,"src":"22639:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74890,"name":"uint48","nodeType":"ElementaryTypeName","src":"22639:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"22638:11:152"},"virtual":false,"visibility":"internal"},{"id":74946,"nodeType":"FunctionDefinition","src":"22703:408:152","nodes":[],"body":{"id":74945,"nodeType":"Block","src":"22753:358:152","nodes":[],"statements":[{"assignments":[74906],"declarations":[{"constant":false,"id":74906,"mutability":"mutable","name":"$","nameLocation":"22779:1:152","nodeType":"VariableDeclaration","scope":74945,"src":"22763:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74905,"nodeType":"UserDefinedTypeName","pathNode":{"id":74904,"name":"Storage","nameLocations":["22763:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"22763:7:152"},"referencedDeclaration":72078,"src":"22763:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74909,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74907,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"22783:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22783:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"22763:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74910,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74901,"src":"22807:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":74911,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"22813:4:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Time_$59094_$","typeString":"type(library Time)"}},"id":74912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22818:9:152","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":58842,"src":"22813:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":74913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22813:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"22807:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74919,"nodeType":"IfStatement","src":"22803:80:152","trueBody":{"id":74918,"nodeType":"Block","src":"22831:52:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74915,"name":"IncorrectTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71947,"src":"22852:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22852:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74917,"nodeType":"RevertStatement","src":"22845:27:152"}]}},{"assignments":[74921],"declarations":[{"constant":false,"id":74921,"mutability":"mutable","name":"gracePeriod","nameLocation":"22900:11:152","nodeType":"VariableDeclaration","scope":74945,"src":"22893:18:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74920,"name":"uint48","nodeType":"ElementaryTypeName","src":"22893:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74932,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74922,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74906,"src":"22914:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22916:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"22914:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74924,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74906,"src":"22938:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74925,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22940:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"22938:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"22914:42:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":74929,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74906,"src":"22983:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74930,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22985:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"22983:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":74931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"22914:87:152","trueExpression":{"expression":{"id":74927,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74906,"src":"22959:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22961:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"22959:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"22893:108:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74933,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74901,"src":"23015:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":74934,"name":"gracePeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74921,"src":"23020:11:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"23015:16:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":74936,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"23035:4:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Time_$59094_$","typeString":"type(library Time)"}},"id":74937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23040:9:152","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":58842,"src":"23035:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":74938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23035:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"23015:36:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74944,"nodeType":"IfStatement","src":"23011:94:152","trueBody":{"id":74943,"nodeType":"Block","src":"23053:52:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74940,"name":"IncorrectTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71947,"src":"23074:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23074:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74942,"nodeType":"RevertStatement","src":"23067:27:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validTimestamp","nameLocation":"22712:15:152","parameters":{"id":74902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74901,"mutability":"mutable","name":"ts","nameLocation":"22735:2:152","nodeType":"VariableDeclaration","scope":74946,"src":"22728:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74900,"name":"uint48","nodeType":"ElementaryTypeName","src":"22728:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"22727:11:152"},"returnParameters":{"id":74903,"nodeType":"ParameterList","parameters":[],"src":"22753:0:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":74959,"nodeType":"FunctionDefinition","src":"23117:201:152","nodes":[],"body":{"id":74958,"nodeType":"Block","src":"23187:131:152","nodes":[],"statements":[{"assignments":[74953],"declarations":[{"constant":false,"id":74953,"mutability":"mutable","name":"slot","nameLocation":"23205:4:152","nodeType":"VariableDeclaration","scope":74958,"src":"23197:12:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74952,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23197:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":74956,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74954,"name":"_getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74971,"src":"23212:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":74955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23212:17:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"23197:32:152"},{"AST":{"nativeSrc":"23265:47:152","nodeType":"YulBlock","src":"23265:47:152","statements":[{"nativeSrc":"23279:23:152","nodeType":"YulAssignment","src":"23279:23:152","value":{"name":"slot","nativeSrc":"23298:4:152","nodeType":"YulIdentifier","src":"23298:4:152"},"variableNames":[{"name":"middleware.slot","nativeSrc":"23279:15:152","nodeType":"YulIdentifier","src":"23279:15:152"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":74950,"isOffset":false,"isSlot":true,"src":"23279:15:152","suffix":"slot","valueSize":1},{"declaration":74953,"isOffset":false,"isSlot":false,"src":"23298:4:152","valueSize":1}],"flags":["memory-safe"],"id":74957,"nodeType":"InlineAssembly","src":"23240:72:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_storage","nameLocation":"23126:8:152","parameters":{"id":74947,"nodeType":"ParameterList","parameters":[],"src":"23134:2:152"},"returnParameters":{"id":74951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74950,"mutability":"mutable","name":"middleware","nameLocation":"23175:10:152","nodeType":"VariableDeclaration","scope":74959,"src":"23159:26:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74949,"nodeType":"UserDefinedTypeName","pathNode":{"id":74948,"name":"Storage","nameLocations":["23159:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"23159:7:152"},"referencedDeclaration":72078,"src":"23159:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"src":"23158:28:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":74971,"nodeType":"FunctionDefinition","src":"23324:128:152","nodes":[],"body":{"id":74970,"nodeType":"Block","src":"23382:70:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":74966,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72847,"src":"23426:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":74964,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"23399:11:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":74965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23411:14:152","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":47773,"src":"23399:26:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$47728_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":74967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23399:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$47728_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":74968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23440:5:152","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47727,"src":"23399:46:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":74963,"id":74969,"nodeType":"Return","src":"23392:53:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorageSlot","nameLocation":"23333:15:152","parameters":{"id":74960,"nodeType":"ParameterList","parameters":[],"src":"23348:2:152"},"returnParameters":{"id":74963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74962,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74971,"src":"23373:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74961,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23373:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"23372:9:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":75016,"nodeType":"FunctionDefinition","src":"23458:252:152","nodes":[],"body":{"id":75015,"nodeType":"Block","src":"23526:184:152","nodes":[],"statements":[{"assignments":[74979],"declarations":[{"constant":false,"id":74979,"mutability":"mutable","name":"slot","nameLocation":"23544:4:152","nodeType":"VariableDeclaration","scope":75015,"src":"23536:12:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74978,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23536:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75005,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":74988,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74973,"src":"23596:9:152","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":74987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23590:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":74986,"name":"bytes","nodeType":"ElementaryTypeName","src":"23590:5:152","typeDescriptions":{}}},"id":74989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23590:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74985,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23580:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":74990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23580:27:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":74984,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23572:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":74983,"name":"uint256","nodeType":"ElementaryTypeName","src":"23572:7:152","typeDescriptions":{}}},"id":74991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23572:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":74992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23611:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23572:40:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":74981,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"23561:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23565:6:152","memberName":"encode","nodeType":"MemberAccess","src":"23561:10:152","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":74994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23561:52:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74980,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23551:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":74995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23551:63:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":75003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23617:23:152","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":75000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23634:4:152","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":74999,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23626:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":74998,"name":"uint256","nodeType":"ElementaryTypeName","src":"23626:7:152","typeDescriptions":{}}},"id":75001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23626:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":74997,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23618:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":74996,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23618:7:152","typeDescriptions":{}}},"id":75002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23618:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23551:89:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"23536:104:152"},{"expression":{"id":75013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":75009,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72847,"src":"23677:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75006,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"23650:11:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":75008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23662:14:152","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":47773,"src":"23650:26:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$47728_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":75010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23650:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$47728_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":75011,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23691:5:152","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47727,"src":"23650:46:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75012,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74979,"src":"23699:4:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23650:53:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75014,"nodeType":"ExpressionStatement","src":"23650:53:152"}]},"implemented":true,"kind":"function","modifiers":[{"id":74976,"kind":"modifierInvocation","modifierName":{"id":74975,"name":"onlyOwner","nameLocations":["23516:9:152"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"23516:9:152"},"nodeType":"ModifierInvocation","src":"23516:9:152"}],"name":"_setStorageSlot","nameLocation":"23467:15:152","parameters":{"id":74974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74973,"mutability":"mutable","name":"namespace","nameLocation":"23497:9:152","nodeType":"VariableDeclaration","scope":75016,"src":"23483:23:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":74972,"name":"string","nodeType":"ElementaryTypeName","src":"23483:6:152","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"23482:25:152"},"returnParameters":{"id":74977,"nodeType":"ParameterList","parameters":[],"src":"23526:0:152"},"scope":75047,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75026,"nodeType":"ModifierDefinition","src":"23716:81:152","nodes":[],"body":{"id":75025,"nodeType":"Block","src":"23751:46:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":75021,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75018,"src":"23773:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75020,"name":"_vaultOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75046,"src":"23761:11:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":75022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23761:18:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75023,"nodeType":"ExpressionStatement","src":"23761:18:152"},{"id":75024,"nodeType":"PlaceholderStatement","src":"23789:1:152"}]},"name":"vaultOwner","nameLocation":"23725:10:152","parameters":{"id":75019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75018,"mutability":"mutable","name":"vault","nameLocation":"23744:5:152","nodeType":"VariableDeclaration","scope":75026,"src":"23736:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75017,"name":"address","nodeType":"ElementaryTypeName","src":"23736:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23735:15:152"},"virtual":false,"visibility":"internal"},{"id":75046,"nodeType":"FunctionDefinition","src":"23803:181:152","nodes":[],"body":{"id":75045,"nodeType":"Block","src":"23853:131:152","nodes":[],"statements":[{"condition":{"id":75039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"23867:62:152","subExpression":{"arguments":[{"id":75035,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72850,"src":"23898:18:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75036,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"23918:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23922:6:152","memberName":"sender","nodeType":"MemberAccess","src":"23918:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":75032,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75028,"src":"23883:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75031,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43466,"src":"23868:14:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$43466_$","typeString":"type(contract IAccessControl)"}},"id":75033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23868:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControl_$43466","typeString":"contract IAccessControl"}},"id":75034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23890:7:152","memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":43433,"src":"23868:29:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view external returns (bool)"}},"id":75038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23868:61:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75044,"nodeType":"IfStatement","src":"23863:115:152","trueBody":{"id":75043,"nodeType":"Block","src":"23931:47:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":75040,"name":"NotVaultOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71944,"src":"23952:13:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":75041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23952:15:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":75042,"nodeType":"RevertStatement","src":"23945:22:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_vaultOwner","nameLocation":"23812:11:152","parameters":{"id":75029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75028,"mutability":"mutable","name":"vault","nameLocation":"23832:5:152","nodeType":"VariableDeclaration","scope":75046,"src":"23824:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75027,"name":"address","nodeType":"ElementaryTypeName","src":"23824:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23823:15:152"},"returnParameters":{"id":75030,"nodeType":"ParameterList","parameters":[],"src":"23853:0:152"},"scope":75047,"stateMutability":"view","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":72820,"name":"IMiddleware","nameLocations":["2190:11:152"],"nodeType":"IdentifierPath","referencedDeclaration":72281,"src":"2190:11:152"},"id":72821,"nodeType":"InheritanceSpecifier","src":"2190:11:152"},{"baseName":{"id":72822,"name":"OwnableUpgradeable","nameLocations":["2203:18:152"],"nodeType":"IdentifierPath","referencedDeclaration":41409,"src":"2203:18:152"},"id":72823,"nodeType":"InheritanceSpecifier","src":"2203:18:152"},{"baseName":{"id":72824,"name":"ReentrancyGuardTransientUpgradeable","nameLocations":["2223:35:152"],"nodeType":"IdentifierPath","referencedDeclaration":42870,"src":"2223:35:152"},"id":72825,"nodeType":"InheritanceSpecifier","src":"2223:35:152"}],"canonicalName":"Middleware","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[75047,42870,41409,42571,41677,72281],"name":"Middleware","nameLocation":"2176:10:152","scope":75048,"usedErrors":[41245,41250,41426,41429,42802,52631,54542,71929,71932,71935,71938,71941,71944,71947,71950,71953,71956,71959,71962,71965,71968,71971,71974,71977,71980,71983,71986,71989,71992,71995,71998,72001,72004,72007,72010,80898,80900,80902],"usedEvents":[41256,41434]}],"license":"UNLICENSED"},"id":152} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowedVaultImplVersion","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"changeSlashExecutor","inputs":[{"name":"newRole","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"changeSlashRequester","inputs":[{"name":"newRole","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"collateral","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"disableOperator","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"disableVault","inputs":[{"name":"vault","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"distributeOperatorRewards","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"distributeStakerRewards","inputs":[{"name":"_commitment","type":"tuple","internalType":"struct Gear.StakerRewardsCommitment","components":[{"name":"distribution","type":"tuple[]","internalType":"struct Gear.StakerRewards[]","components":[{"name":"vault","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"totalAmount","type":"uint256","internalType":"uint256"},{"name":"token","type":"address","internalType":"address"}]},{"name":"timestamp","type":"uint48","internalType":"uint48"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"enableOperator","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"enableVault","inputs":[{"name":"vault","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"eraDuration","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"executeSlash","inputs":[{"name":"slashes","type":"tuple[]","internalType":"struct IMiddleware.SlashIdentifier[]","components":[{"name":"vault","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getActiveOperatorsStakeAt","inputs":[{"name":"ts","type":"uint48","internalType":"uint48"}],"outputs":[{"name":"activeOperators","type":"address[]","internalType":"address[]"},{"name":"stakes","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getOperatorStakeAt","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"ts","type":"uint48","internalType":"uint48"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_params","type":"tuple","internalType":"struct IMiddleware.InitParams","components":[{"name":"owner","type":"address","internalType":"address"},{"name":"eraDuration","type":"uint48","internalType":"uint48"},{"name":"minVaultEpochDuration","type":"uint48","internalType":"uint48"},{"name":"operatorGracePeriod","type":"uint48","internalType":"uint48"},{"name":"vaultGracePeriod","type":"uint48","internalType":"uint48"},{"name":"minVetoDuration","type":"uint48","internalType":"uint48"},{"name":"minSlashExecutionDelay","type":"uint48","internalType":"uint48"},{"name":"allowedVaultImplVersion","type":"uint64","internalType":"uint64"},{"name":"vetoSlasherImplType","type":"uint64","internalType":"uint64"},{"name":"maxResolverSetEpochsDelay","type":"uint256","internalType":"uint256"},{"name":"maxAdminFee","type":"uint256","internalType":"uint256"},{"name":"collateral","type":"address","internalType":"address"},{"name":"router","type":"address","internalType":"address"},{"name":"symbiotic","type":"tuple","internalType":"struct Gear.SymbioticContracts","components":[{"name":"vaultRegistry","type":"address","internalType":"address"},{"name":"operatorRegistry","type":"address","internalType":"address"},{"name":"networkRegistry","type":"address","internalType":"address"},{"name":"middlewareService","type":"address","internalType":"address"},{"name":"networkOptIn","type":"address","internalType":"address"},{"name":"stakerRewardsFactory","type":"address","internalType":"address"},{"name":"operatorRewards","type":"address","internalType":"address"},{"name":"roleSlashRequester","type":"address","internalType":"address"},{"name":"roleSlashExecutor","type":"address","internalType":"address"},{"name":"vetoResolver","type":"address","internalType":"address"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"makeElectionAt","inputs":[{"name":"ts","type":"uint48","internalType":"uint48"},{"name":"maxValidators","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"maxAdminFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxResolverSetEpochsDelay","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"minSlashExecutionDelay","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"minVaultEpochDuration","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"minVetoDuration","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"operatorGracePeriod","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"registerOperator","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerVault","inputs":[{"name":"_vault","type":"address","internalType":"address"},{"name":"_rewards","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestSlash","inputs":[{"name":"data","type":"tuple[]","internalType":"struct IMiddleware.SlashData[]","components":[{"name":"operator","type":"address","internalType":"address"},{"name":"ts","type":"uint48","internalType":"uint48"},{"name":"vaults","type":"tuple[]","internalType":"struct IMiddleware.VaultSlashData[]","components":[{"name":"vault","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"subnetwork","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"symbioticContracts","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.SymbioticContracts","components":[{"name":"vaultRegistry","type":"address","internalType":"address"},{"name":"operatorRegistry","type":"address","internalType":"address"},{"name":"networkRegistry","type":"address","internalType":"address"},{"name":"middlewareService","type":"address","internalType":"address"},{"name":"networkOptIn","type":"address","internalType":"address"},{"name":"stakerRewardsFactory","type":"address","internalType":"address"},{"name":"operatorRewards","type":"address","internalType":"address"},{"name":"roleSlashRequester","type":"address","internalType":"address"},{"name":"roleSlashExecutor","type":"address","internalType":"address"},{"name":"vetoResolver","type":"address","internalType":"address"}]}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unregisterOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unregisterVault","inputs":[{"name":"vault","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"vaultGracePeriod","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"vetoSlasherImplType","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AlreadyAdded","inputs":[]},{"type":"error","name":"AlreadyEnabled","inputs":[]},{"type":"error","name":"BurnerHookNotSupported","inputs":[]},{"type":"error","name":"DelegatorNotInitialized","inputs":[]},{"type":"error","name":"EnumerableMapNonexistentKey","inputs":[{"name":"key","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"IncompatibleSlasherType","inputs":[]},{"type":"error","name":"IncompatibleStakerRewardsVersion","inputs":[]},{"type":"error","name":"IncompatibleVaultVersion","inputs":[]},{"type":"error","name":"IncorrectTimestamp","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidStakerRewardsVault","inputs":[]},{"type":"error","name":"NonFactoryStakerRewards","inputs":[]},{"type":"error","name":"NonFactoryVault","inputs":[]},{"type":"error","name":"NotEnabled","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"NotRegisteredOperator","inputs":[]},{"type":"error","name":"NotRegisteredVault","inputs":[]},{"type":"error","name":"NotRouter","inputs":[]},{"type":"error","name":"NotSlashExecutor","inputs":[]},{"type":"error","name":"NotSlashRequester","inputs":[]},{"type":"error","name":"NotVaultOwner","inputs":[]},{"type":"error","name":"OperatorDoesNotExist","inputs":[]},{"type":"error","name":"OperatorDoesNotOptIn","inputs":[]},{"type":"error","name":"OperatorGracePeriodNotPassed","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"ResolverMismatch","inputs":[]},{"type":"error","name":"ResolverSetDelayTooLong","inputs":[]},{"type":"error","name":"SafeCastOverflowedUintDowncast","inputs":[{"name":"bits","type":"uint8","internalType":"uint8"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SlasherNotInitialized","inputs":[]},{"type":"error","name":"UnknownCollateral","inputs":[]},{"type":"error","name":"UnsupportedBurner","inputs":[]},{"type":"error","name":"UnsupportedDelegatorHook","inputs":[]},{"type":"error","name":"VaultGracePeriodNotPassed","inputs":[]},{"type":"error","name":"VaultWrongEpochDuration","inputs":[]},{"type":"error","name":"VetoDurationTooLong","inputs":[]},{"type":"error","name":"VetoDurationTooShort","inputs":[]}],"bytecode":{"object":"0x6080806040523460aa575f516020613c925f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b604051613be390816100af8239f35b6001600160401b0319166001600160401b039081175f516020613c925f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c806305c4fdf9146124855780630a71094c146121dd5780632633b70f146121295780632acde09814611fd1578063373bba1f14611f9b5780633ccce78914611f5e5780633d15e74e14611f315780634455a38f14611efe578063461e7a8e14611ec85780636c2eb35014611a6f5780636d1064eb14611a025780636e5c7932146119c1578063709d06ae1461198b578063715018a614611922578063729e2f361461180457806379a8b245146117ce5780637fbe95b51461140b57806386c241a1146113ad5780638da5cb5b14611378578063936f43301461133b578063945cf2dd1461130557806396115bc2146112395780639e0323111461120b578063ab122753146107db578063af962995146105c8578063b5e5ad121461054f578063bcf339341461037f578063c639e2d614610351578063c9b0b1e91461031a578063ceebb69a146102ec578063d55a5bdf146102b2578063d8dfeb4514610279578063d99ddfc71461023b578063d99fcd661461020e578063f2fde38b146101e15763f887ea40146101a6575f80fd5b346101de57806003193601126101de575f516020613ba35f395f51905f5254600701546040516001600160a01b039091168152602090f35b80fd5b50346101de5760203660031901126101de5761020b6101fe612e1b565b610206613699565b613472565b80f35b50346101de57806003193601126101de5761020b60125f516020613ba35f395f51905f5254013390613593565b50346101de5760403660031901126101de57602061027161025a612e1b565b610262612e5a565b9061026c8261371d565b61342f565b604051908152f35b50346101de57806003193601126101de575f516020613ba35f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346101de57806003193601126101de5760206001600160401b0360035f516020613ba35f395f51905f5254015460401c16604051908152f35b50346101de57806003193601126101de57602060045f516020613ba35f395f51905f52540154604051908152f35b50346101de57806003193601126101de5760206001600160401b0360035f516020613ba35f395f51905f5254015416604051908152f35b50346101de57806003193601126101de57602060055f516020613ba35f395f51905f52540154604051908152f35b50346101de57806003193601126101de5761012060405161039f81612eab565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015201526101405f516020613ba35f395f51905f52546040516103f381612eab565b60018060a01b036008830154169182825260018060a01b036009820154166020830190815260018060a01b03600a830154166040840190815260018060a01b03600b840154166060850190815260018060a01b03600c850154166080860190815260018060a01b03600d860154169160a0870192835260018060a01b03600e870154169360c0880194855260018060a01b03600f880154169560e0890196875261012060018060a01b0360108a015416986101008b01998a52601160018060a01b03910154169901988952604051998a5260018060a01b0390511660208a015260018060a01b03905116604089015260018060a01b03905116606088015260018060a01b03905116608087015260018060a01b0390511660a086015260018060a01b0390511660c085015260018060a01b0390511660e084015260018060a01b0390511661010083015260018060a01b03905116610120820152f35b50346101de5760203660031901126101de5761058b90610575610570612e45565b61330e565b9091604051938493604085526040850190612e6f565b8381036020850152602080845192838152019301915b8181106105af575050500390f35b82518452859450602093840193909201916001016105a1565b50346101de5760203660031901126101de576004356001600160401b0381116107d757366023820112156107d75780600401356001600160401b0381116107d3576024820191602436918360061b0101116107d3575f516020613ba35f395f51905f5254601001546001600160a01b031633036107c4576020905f90845b818110610651578580f35b61065c818387612f8a565b5f516020613ba35f395f51905f525490919061069b906015016001600160a01b0361068685612f41565b16906001915f520160205260405f2054151590565b156107b5576004856001600160a01b036106b485612f41565b166040519283809263b134427160e01b82525afa9283156107aa576107229387928a9161077d575b50828a604051936106ed8386612edb565b81855289368487013760405197889586948593635ca61c3760e11b855201356004840152604060248401526044830190612fdc565b03926001600160a01b03165af191821561077257600192610745575b5001610646565b61076490863d881161076b575b61075c8183612edb565b810190612fcd565b505f61073e565b503d610752565b6040513d89823e3d90fd5b61079d9150833d85116107a3575b6107958183612edb565b810190612fae565b5f6106dc565b503d61078b565b6040513d8a823e3d90fd5b633b2fc1c360e21b8752600487fd5b632249f71f60e21b8352600483fd5b8280fd5b5080fd5b50346101de576102e03660031901126101de575f516020613bc35f395f51905f52546001600160401b0360ff8260401c1615911680159081611203575b60011490816111f9575b1590816111f0575b506111e1578060016001600160401b03195f516020613bc35f395f51905f525416175f516020613bc35f395f51905f52556111b1575b6004356001600160a01b03811681036107d3576108879061087f6139c3565b6102066139c3565b61088f6139c3565b604090815161089e8382612edb565b601f815260208101907f6d6964646c65776172652e73746f726167652e4d6964646c657761726556310082526108d2613699565b5190205f19810190811161119d5782519060208201908152602082526108f88483612edb565b60ff199151902016805f516020613ba35f395f51905f525560243565ffffffffffff8116810361119957815465ffffffffffff191665ffffffffffff91821617825560443590811681036111995781546bffffffffffff000000000000191660309190911b65ffffffffffff60301b1617815560643565ffffffffffff8116810361119957815465ffffffffffff60601b191660609190911b65ffffffffffff60601b1617815560843565ffffffffffff8116810361119957815465ffffffffffff60901b191660909190911b65ffffffffffff60901b1617815560a43565ffffffffffff8116810361119957815465ffffffffffff60c01b191660c09190911b65ffffffffffff60c01b1617815560c43565ffffffffffff811681036111995765ffffffffffff60018301911665ffffffffffff19825416178155600282019161012435835560e4356001600160401b0381168103611191576001600160401b036003830191166001600160401b0319825416178155610104356001600160401b03811681036111955781546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16179055610164356001600160a01b0381168103611191576006820180546001600160a01b0319166001600160a01b039283161790553060601b6004830155610144356005830155610184359081168103611191576007820180546001600160a01b0319166001600160a01b039283161790556101a4359081168103611191576008820180546001600160a01b0319166001600160a01b039283161790556101c4359081168103611191576009820180546001600160a01b0319166001600160a01b03909216919091179055610b7e612f13565b600a820180546001600160a01b0319166001600160a01b03909216919091179055610ba7612f2a565b600b820180546001600160a01b0319166001600160a01b0392831617905561022435908116810361119157600c820180546001600160a01b0319166001600160a01b0392831617905561024435908116810361119157600d820180546001600160a01b0319166001600160a01b0392831617905561026435908116810361119157600e820180546001600160a01b0319166001600160a01b0392831617905561028435908116810361119157600f820180546001600160a01b0319166001600160a01b039283161790556102a4359081168103611191576010820180546001600160a01b0319166001600160a01b039283161790556102c4359081168103611191576011820180546001600160a01b0319166001600160a01b039283161790558690610cd1612f13565b16803b156107d75781809160048951809481936387140b5b60e01b83525af180156111725761117c575b506001600160a01b03610d0c612f2a565b16803b156107d757818091602489518094819363b7d8e1a960e01b83523060048401525af1801561117257611159575b5050549065ffffffffffff8216156111155765ffffffffffff8260301c16918060011b6601fffffffffffe65fffffffffffe8216911681036111015783106110a0578265ffffffffffff8260601c161061102a578265ffffffffffff8260901c1610610fc05760c01c65ffffffffffff16908115610f7c575465ffffffffffff16908115610f275765ffffffffffff91610dd591613000565b1611610e97576003905410610e3e57610dec575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f516020613bc35f395f51905f5254165f516020613bc35f395f51905f52555160018152a180f35b815162461bcd60e51b815260206004820152602c60248201527f5265736f6c766572207365742065706f6368732064656c6179206d757374206260448201526b65206174206c65617374203360a01b6064820152608490fd5b825162461bcd60e51b815260206004820152605f60248201527f5665746f206475726174696f6e20616e6420736c61736820657865637574696f60448201527f6e2064656c6179206d757374206265206c657373207468616e206f722065717560648201527f616c20746f206d696e207661756c74732065706f6368206475726174696f6e00608482015260a490fd5b855162461bcd60e51b815260206004820152602860248201527f4d696e20736c61736820657865637574696f6e2064656c61792063616e6e6f74604482015267206265207a65726f60c01b6064820152608490fd5b855162461bcd60e51b815260206004820152601c60248201527f5665746f206475726174696f6e2063616e6e6f74206265207a65726f000000006044820152606490fd5b855162461bcd60e51b815260206004820152602481018790527f5661756c7420677261636520706572696f64206d75737420626520626967676560448201527f72207468616e206d696e207661756c74732065706f6368206475726174696f6e6064820152608490fd5b855162461bcd60e51b815260206004820152604360248201527f4f70657261746f7220677261636520706572696f64206d75737420626520626960448201527f67676572207468616e206d696e207661756c74732065706f636820647572617460648201526234b7b760e91b608482015260a490fd5b855162461bcd60e51b815260206004820152603460248201527f4d696e207661756c74732065706f6368206475726174696f6e206d75737420626044820152736520626967676572207468616e2032206572617360601b6064820152608490fd5b634e487b7160e01b88526011600452602488fd5b845162461bcd60e51b815260206004820152601b60248201527f457261206475726174696f6e2063616e6e6f74206265207a65726f00000000006044820152606490fd5b8161116391612edb565b61116e57855f610d3c565b8580fd5b87513d84823e3d90fd5b8161118691612edb565b61116e57855f610cfb565b8680fd5b8780fd5b8480fd5b634e487b7160e01b84526011600452602484fd5b600160401b60ff60401b195f516020613bc35f395f51905f525416175f516020613bc35f395f51905f5255610860565b63f92ee8a960e01b8252600482fd5b9050155f61082a565b303b159150610822565b829150610818565b50346101de57806003193601126101de57602060025f516020613ba35f395f51905f52540154604051908152f35b50346101de5760203660031901126101de57611253612e1b565b5f516020613ba35f395f51905f52546001600160a01b0390911690601281019061129d61128084846139ee565b65ffffffffffff81169165ffffffffffff8260301c169160601c90565b5065ffffffffffff81161592915082156112d5575b50506112c657906112c2916139a9565b5080f35b63f1c9810160e01b8352600483fd5b65ffffffffffff9192506112fa8291826112ee4261397a565b955460601c1690613000565b169116105f806112b2565b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460301c16604051908152f35b50346101de5760203660031901126101de5761020b611358612e1b565b611361816134e3565b60155f516020613ba35f395f51905f52540161361d565b50346101de57806003193601126101de575f516020613b835f395f51905f52546040516001600160a01b039091168152602090f35b50346101de5760203660031901126101de576113c7612e1b565b5f516020613ba35f395f51905f525460100180549091906001600160a01b031633036107c45781546001600160a01b0319166001600160a01b039190911617905580f35b50346101de5760403660031901126101de576004356001600160401b0381116107d757606060031982360301126107d757604051606081018181106001600160401b038211176117ba5760405281600401356001600160401b0381116117b6578201366023820112156117b657600481013561148681612efc565b916114946040519384612edb565b818352602060048185019360061b830101019036821161119157602401915b8183106117585750505081526114d6604460208301936024810135855201612e31565b90604081019182526114e6612e5a565b935f516020613ba35f395f51905f525490600782019460018060a01b03865416330361174957845160068401546001600160a01b0391821691160361173a57819594939550606093829565ffffffffffff60056015870196019916926020965b895180518a10156116f3578961155b9161304a565b5180516001600160a01b03165f908152600189016020526040902054156107b557908b91866116148b6116068b6115f46115a38f6112809060018060a01b038a5116906139ee565b9a546040516001600160a01b03909c169b925090506115c28683612edb565b838252604051936115d38786612edb565b845260405197889687015260408601526080606086015260a0850190612fdc565b838103601f1901608085015290612fdc565b03601f198101835282612edb565b85548751838d0180519096909290916001600160a01b039081169116823b156116ef57908c809493926116746040519788968795869463239723ed60e01b8652600486015260248501526044840152608060648401526084830190612fdc565b03925af180156116e4579089916116cf575b5050916116c791600193519151604051926bffffffffffffffffffffffff199060601b168c8401526034830152603482526116c2605483612edb565b6132ce565b980197611546565b816116d991612edb565b61119557875f611686565b6040513d8b823e3d90fd5b8c80fd5b8861172c86848651915160405192858401526bffffffffffffffffffffffff199060601b166040830152603482526116c2605483612edb565b818151910120604051908152f35b63039a1fd760e21b8252600482fd5b639165520160e01b8252600482fd5b60408336031261119157604051604081018181106001600160401b038211176117a25791602091604093845261178d86612e31565b815282860135838201528152019201916114b3565b634e487b7160e01b89526041600452602489fd5b8380fd5b634e487b7160e01b84526041600452602484fd5b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460901c16604051908152f35b50346101de5760603660031901126101de5761181e612e1b565b5f516020613ba35f395f51905f5254600781015460243592604435926001600160a01b0390921691338390036119135760068101546001600160a01b039283169216820361190457600e01546001600160a01b031691859190833b156107d3576084908360405195869485936348a78da760e01b8552600485015260248401528860448401528760648401525af180156118f9576118e4575b60208383604051908382019283526040820152604081526118d9606082612edb565b519020604051908152f35b6118ef848092612edb565b6107d357826118b7565b6040513d86823e3d90fd5b63039a1fd760e21b8652600486fd5b639165520160e01b8652600486fd5b50346101de57806003193601126101de5761193b613699565b5f516020613b835f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460601c16604051908152f35b50346101de5760403660031901126101de576119fe6119ea6119e1612e45565b6024359061306b565b604051918291602083526020830190612e6f565b0390f35b50346101de5760203660031901126101de57611a1c612e1b565b5f516020613ba35f395f51905f5254600f0180549091906001600160a01b03163303611a605781546001600160a01b0319166001600160a01b039190911617905580f35b633fdc220360e01b8352600483fd5b50346101de57806003193601126101de57611a88613699565b5f516020613bc35f395f51905f525460ff8160401c16908115611eb3575b50611ea4575f516020613bc35f395f51905f52805468ffffffffffffffffff1916680100000000000000021790555f516020613b835f395f51905f5254611af8906001600160a01b031661087f6139c3565b5f516020613ba35f395f51905f525460408051611b158282612edb565b601f815260208101907f6d6964646c65776172652e73746f726167652e4d6964646c65776172655632008252611b49613699565b5190205f19810190811161119d578151906020820190815260208252611b6f8383612edb565b9051902060ff19165f516020613ba35f395f51905f528190558254815465ffffffffffff90911665ffffffffffff19821681178355845465ffffffffffff60301b166001600160601b031990921617178155908254825465ffffffffffff60601b191665ffffffffffff60601b9091161782558254825465ffffffffffff60901b191665ffffffffffff60901b9091161782558254825465ffffffffffff60c01b191665ffffffffffff60c01b90911617825565ffffffffffff60018401541665ffffffffffff60018401911665ffffffffffff1982541617905560028301546002830155611ca2600384016001600160401b03808254169181600387019316821984541617835554841c1667ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b1916179055565b60068381015490830180546001600160a01b039283166001600160a01b031991821617909155600480860154908501556005808601549085015560078086015490850180549190931691161790556008808301908401848403611dbc575b50508392601281019260128101955b8454811015611d365780611d2f611d28600193886136cc565b908a6136fb565b5001611d0f565b50601590810192910184805b8254811015611d695780611d62611d5b600193866136cc565b90886136fb565b5001611d42565b507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260208460ff60401b195f516020613bc35f395f51905f5254165f516020613bc35f395f51905f52555160028152a180f35b5481546001600160a01b03199081166001600160a01b039283161790925560098581015490850180548416918316919091179055600a8086015490850180548416918316919091179055600b8086015490850180548416918316919091179055600c8086015490850180548416918316919091179055600d8086015490850180548416918316919091179055600e8086015490850180548416918316919091179055600f808601549085018054841691831691909117905560108086015490850180548416918316919091179055601180860154908501805490931691161790555f80611d00565b63f92ee8a960e01b8152600490fd5b600291506001600160401b031610155f611aa6565b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460c01c16604051908152f35b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545416604051908152f35b50346101de57806003193601126101de5761020b60125f516020613ba35f395f51905f525401339061361d565b50346101de5760203660031901126101de5761020b611f7b612e1b565b611f84816134e3565b60155f516020613ba35f395f51905f525401613593565b50346101de57806003193601126101de57602065ffffffffffff60015f516020613ba35f395f51905f5254015416604051908152f35b50346101de57806003193601126101de575f516020613ba35f395f51905f525460098101546040516302910f8b60e31b815233600482015290602090829060249082906001600160a01b03165afa9081156120f057839161210a575b50156120fb57600c8101546040516308834cb560e21b815233600482015230602482015290602090829060449082906001600160a01b03165afa9081156120f05783916120c1575b50156120b25761209b9065ffffffffffff61208f4261397a565b169060123391016136fb565b156120a35780f35b63f411c32760e01b8152600490fd5b6396cc2bc360e01b8252600482fd5b6120e3915060203d6020116120e9575b6120db8183612edb565b810190613032565b5f612075565b503d6120d1565b6040513d85823e3d90fd5b6325878fa360e21b8252600482fd5b612123915060203d6020116120e9576120db8183612edb565b5f61202d565b50346101de5760203660031901126101de57612143612e1b565b61214c816134e3565b5f516020613ba35f395f51905f52546001600160a01b0390911690601581019061217961128084846139ee565b5065ffffffffffff81161592915082156121ad575b505061219e57906112c2916139a9565b6347a11ef760e11b8352600483fd5b65ffffffffffff9192506121d28291826121c64261397a565b955460901c1690613000565b169116105f8061218e565b50346101de5760203660031901126101de576001600160401b03600435116101de573660236004350112156101de576001600160401b0360043560040135116101de573660246004356004013560051b6004350101116101de575f516020613ba35f395f51905f5254600f8101546001600160a01b031633036124765781906020905b600435600401358310156124725760248360051b6004350101356082196004353603018112156111995760043501906122bc6001600160a01b036122a660248501612f41565b165f908152601383016020526040902054151590565b1561246357845b6122d36064840160248501612f55565b9050811015612456576122f6816122f06064860160248701612f55565b90612f8a565b6123206001600160a01b0361230a83612f41565b165f908152601685016020526040902054151590565b156107b557869190600490866001600160a01b0361233d83612f41565b166040519384809263b134427160e01b82525afa9182156118f9578492612437575b5060048501549161237260248801612f41565b604488013565ffffffffffff8116900361116e57889586946123f760405161239a8882612edb565b838152601f1988013689830137604051998a978896879563545ce38960e01b8752600487015260018060a01b031660248601520135604484015265ffffffffffff60448d013516606484015260a0608484015260a4830190612fdc565b03926001600160a01b03165af19182156107725760019261241a575b50016122c3565b61243090863d881161076b5761075c8183612edb565b505f612413565b61244f919250873d89116107a3576107958183612edb565b905f61235f565b5092600191500191612260565b6303fa1eaf60e41b8552600485fd5b8380f35b633fdc220360e01b8252600482fd5b5034612b47576040366003190112612b475761249f612e1b565b6024356001600160a01b038116929190839003612b47576124bf816134e3565b5f516020613ba35f395f51905f525460088101546040516302910f8b60e31b81526001600160a01b038085166004830181905294939260209183916024918391165afa908115612cd9575f91612dfc575b5015612ded5760405163054fd4d560e41b8152602081600481875afa908115612cd9575f91612dce575b5060038201906001600160401b0380835416911603612dbf5760405163d8dfeb4560e01b8152602081600481885afa908115612cd9575f91612da0575b5060068301546001600160a01b03908116911603612d91576040516327f843b560e11b8152602081600481885afa908115612cd9575f91612d72575b5065ffffffffffff80845460301c169116908110612d635760405163142186b760e21b8152602081600481895afa908115612cd9575f91612d44575b5015612d3557604051630ce9b79360e41b8152602081600481895afa908115612cd9575f91612d16575b50600484810180546040516368adba0760e11b81529283015292916001600160a01b031690602081602481855afa908115612cd9575f91612ce4575b5019612c87575b602060049160405192838092637f5a7c7b60e01b82525afa9081156107aa578891612c68575b506001600160a01b0316612c5657604051630dd83c7f60e31b81526020816004818a5afa9081156107aa578891612c37575b5015612c285760405163b134427160e01b81526020816004818a5afa9081156107aa578891612c09575b50604051635d927f4560e11b81526001600160a01b039190911693602082600481885afa9182156116e4578992612bdd575b506001600160401b0380915460401c16911603612bce57604051631a684c7560e11b8152602081600481875afa9081156107aa578891612baf575b50612ba05760405163e054e08b60e01b8152602081600481875afa9081156107aa578891612b71575b5065ffffffffffff855460c01c1665ffffffffffff821610612b62576127a865ffffffffffff918260018801541690613000565b1611612b535760405163bc6eac5b60e01b8152602081600481865afa908115610772578791612b1d575b50600284015410612b0e57549060209261282a846040516127f38282612edb565b898152601f19820195863684840137604051938492839263cd05b8a160e01b84526004840152604060248401526044830190612fdc565b0381865afa9081156107aa578891612af1575b506001600160a01b031680612aca575060110154604051926001600160a01b039091169061286b8585612edb565b8784523685850137813b15611191579186916128b193836040518096819582946348b47ce960e11b84528460048501526024840152606060448401526064830190612fdc565b03925af18015612a1b57908591612ab5575b50505b6040516313c085b760e11b81528181600481875afa908115612a1b578591612a98575b506001600160a01b031615612a89575f516020613ba35f395f51905f52549260248260018060a01b03600d87015416604051928380926302910f8b60e31b82528b60048301525afa908115612a52578691612a6c575b5015612a5d5760405163411557d160e01b815282816004818a5afa908115612a52578691612a35575b506001600160a01b031603612a265760405163054fd4d560e41b81528181600481895afa918215612a1b57916001600160401b039160029387926129ee575b505016036129df57601561209b939465ffffffffffff6129c64261397a565b1660609190911b6001600160601b0319161792016136fb565b63ded51c0b60e01b8352600483fd5b612a0d9250803d10612a14575b612a058183612edb565b810190613556565b5f806129a7565b503d6129fb565b6040513d87823e3d90fd5b630a724f6160e01b8452600484fd5b612a4c9150833d85116107a3576107958183612edb565b5f612968565b6040513d88823e3d90fd5b6346e01c4360e11b8552600485fd5b612a839150833d85116120e9576120db8183612edb565b5f61293f565b630c6b5ff760e31b8452600484fd5b612aaf9150823d84116107a3576107958183612edb565b5f6128e9565b81612abf91612edb565b6117b657835f6128c3565b6011909101546001600160a01b03161491506128c6905057633cc6586560e21b8452600484fd5b612b089150853d87116107a3576107958183612edb565b5f61283d565b633a2662c360e11b8652600486fd5b90506020813d602011612b4b575b81612b3860209383612edb565b81010312612b4757515f6127d2565b5f80fd5b3d9150612b2b565b6307cfe49360e51b8652600486fd5b633062eb1960e21b8852600488fd5b612b93915060203d602011612b99575b612b8b8183612edb565b810190613575565b5f612774565b503d612b81565b63447984b360e11b8752600487fd5b612bc8915060203d6020116120e9576120db8183612edb565b5f61274b565b63f8c618c760e01b8752600487fd5b6001600160401b03919250612c01829160203d602011612a1457612a058183612edb565b929150612710565b612c22915060203d6020116107a3576107958183612edb565b5f6126de565b631501f36360e21b8752600487fd5b612c50915060203d6020116120e9576120db8183612edb565b5f6126b4565b60016221bb1360e11b03198752600487fd5b612c81915060203d6020116107a3576107958183612edb565b5f612682565b803b15612b47576040516323f752d560e01b81525f600482018190525f1960248301528160448183865af18015612cd957612cc3575b5061265c565b612cd09198505f90612edb565b5f966020612cbd565b6040513d5f823e3d90fd5b90506020813d602011612d0e575b81612cff60209383612edb565b81010312612b4757515f612655565b3d9150612cf2565b612d2f915060203d6020116107a3576107958183612edb565b5f612619565b636e549c1760e11b5f5260045ffd5b612d5d915060203d6020116120e9576120db8183612edb565b5f6125ef565b634934476760e01b5f5260045ffd5b612d8b915060203d602011612b9957612b8b8183612edb565b5f6125b3565b63039a1fd760e21b5f5260045ffd5b612db9915060203d6020116107a3576107958183612edb565b5f612577565b63bfcdc45f60e01b5f5260045ffd5b612de7915060203d602011612a1457612a058183612edb565b5f61253a565b635b19e4bb60e01b5f5260045ffd5b612e15915060203d6020116120e9576120db8183612edb565b5f612510565b600435906001600160a01b0382168203612b4757565b35906001600160a01b0382168203612b4757565b6004359065ffffffffffff82168203612b4757565b6024359065ffffffffffff82168203612b4757565b90602080835192838152019201905f5b818110612e8c5750505090565b82516001600160a01b0316845260209384019390920191600101612e7f565b61014081019081106001600160401b03821117612ec757604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b03821117612ec757604052565b6001600160401b038111612ec75760051b60200190565b6101e4356001600160a01b0381168103612b475790565b610204356001600160a01b0381168103612b475790565b356001600160a01b0381168103612b475790565b903590601e1981360301821215612b4757018035906001600160401b038211612b4757602001918160061b36038313612b4757565b9190811015612f9a5760061b0190565b634e487b7160e01b5f52603260045260245ffd5b90816020910312612b4757516001600160a01b0381168103612b475790565b90816020910312612b47575190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9065ffffffffffff8091169116019065ffffffffffff821161301e57565b634e487b7160e01b5f52601160045260245ffd5b90816020910312612b4757518015158103612b475790565b8051821015612f9a5760209160051b010190565b9190820180921161301e57565b9181156132785761307b8361330e565b9281518181111561326f575f5f198201828111925b80831061319657505050506001945f1982019082821161301e576130b4828761304a565b5183975b855189101561318857816130cc8a8a61304a565b51036130e8576001810180911161301e576001909801976130b8565b9395975050909294505b60018211613103575b505050815290565b604051602081019165ffffffffffff60d01b9060d01b1682526006815261312b602682612edb565b5190209080156131745761314091068361305e565b5f19810190811161301e5761316b906001600160a01b0390613162908661304a565b5116918461304a565b525f80806130fb565b634e487b7160e01b5f52601260045260245ffd5b9395975050909294506130f2565b9296958792959891945f935b61301e578685035f190186811161301e5784101561325c576131c4848961304a565b51600185019485811161301e57858c826001946131e28f9a8f61304a565b51116131f3575b50505001936131a2565b613253918d61322383613206878461304a565b5192613212828261304a565b5161321d898361304a565b5261304a565b52858060a01b03613234858361304a565b51169361321d878060a01b0361324a858561304a565b5116918361304a565b525f8c826131e9565b9491989560019197989493500191613090565b50509150915090565b60405162461bcd60e51b815260206004820152602860248201527f4d61782076616c696461746f7273206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608490fd5b61330c906020808095946040519684889551918291018487015e8401908282015f8152815193849201905e01015f815203601f198101845283612edb565b565b906133188261371d565b60125f516020613ba35f395f51905f52540180549261333684612efc565b916133446040519384612edb565b848352601f1961335386612efc565b0136602085013761336385612efc565b946133716040519687612edb565b808652601f1961338082612efc565b013660208801375f925f925b8284106133a0575050505080825283529190565b909192936133d56133dc846133b588866136cc565b93909365ffffffffffff81169165ffffffffffff8260301c169160601c90565b50906137a7565b156134255783613401916133f0848a61304a565b6001600160a01b0382169052613800565b61340b828a61304a565b526001810180911161301e57600190945b0192919061338c565b509360019061341c565b9061345b816133d561128060125f516020613ba35f395f51905f52540160018060a01b038716906139ee565b1561346c5761346991613800565b90565b50505f90565b6001600160a01b031680156134d0575f516020613b835f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b604051632474521560e21b81525f600482015233602482015290602090829060449082906001600160a01b03165afa908115612cd9575f91613537575b501561352857565b630e7fea9d60e01b5f5260045ffd5b613550915060203d6020116120e9576120db8183612edb565b5f613520565b90816020910312612b4757516001600160401b0381168103612b475790565b90816020910312612b47575165ffffffffffff81168103612b475790565b65ffffffffffff916135b16112806001600160a01b038316846139ee565b919490941693841590811561360b575b506135fc576135f99365ffffffffffff60301b6135dd4261397a565b60301b161760609190911b6001600160601b03191617916136fb565b50565b633f54562b60e11b5f5260045ffd5b65ffffffffffff91501615155f6135c1565b65ffffffffffff9161363b6112806001600160a01b038316846139ee565b9490911615159081613688575b50613679576135f99265ffffffffffff6136614261397a565b1660609190911b6001600160601b03191617916136fb565b637952fbad60e11b5f5260045ffd5b65ffffffffffff915016155f613648565b5f516020613b835f395f51905f52546001600160a01b031633036136b957565b63118cdaa760e01b5f523360045260245ffd5b91906136da60029184613a45565b90549060031b1c92835f520160205260405f20549160018060a01b03169190565b613469929160018060a01b031691825f526002820160205260405f2055613b35565b5f516020613ba35f395f51905f52549065ffffffffffff61373d4261397a565b1665ffffffffffff8216101561379057613774915465ffffffffffff808260601c169160901c168082105f1461379f575090613000565b65ffffffffffff806137854261397a565b169116111561379057565b63686c69fd60e01b5f5260045ffd5b905090613000565b65ffffffffffff16801515929190836137ed575b50826137c657505090565b65ffffffffffff16801592509082156137de57505090565b65ffffffffffff161115905090565b65ffffffffffff8316101592505f6137bb565b5f516020613ba35f395f51905f52546015810180546004909201545f95948694602093869391905b868810613839575050505050505050565b90919293949596986133d5613852866133b58d866136cc565b1561397057604051630ce9b79360e41b8152908890829060049082906001600160a01b03165afa908115612cd9576138ee9189915f91613953575b506040519061389c8383612edb565b5f825289368484013760405163e02f693760e01b8152600481018990526001600160a01b038816602482015265ffffffffffff8a16604482015260806064820152938492839182916084830190612fdc565b03916001600160a01b03165afa908115612cd9575f91613925575b506139169060019261305e565b995b0196959493929190613828565b90508781813d831161394c575b61393c8183612edb565b81010312612b4757516001613909565b503d613932565b61396a9150823d84116107a3576107958183612edb565b5f61388d565b5098600190613918565b65ffffffffffff81116139925765ffffffffffff1690565b6306dfcc6560e41b5f52603060045260245260445ffd5b9061346991815f52600281016020525f6040812055613a5a565b60ff5f516020613bc35f395f51905f525460401c16156139df57565b631afcd79f60e31b5f5260045ffd5b90805f526002820160205260405f2054918183159182613a25575b5050613a13575090565b63015ab34360e11b5f5260045260245ffd5b613a3d92506001915f520160205260405f2054151590565b15815f613a09565b8054821015612f9a575f5260205f2001905f90565b906001820191815f528260205260405f20548015155f14613b2d575f19810181811161301e5782545f1981019190821161301e57818103613ae2575b50505080548015613ace575f190190613aaf8282613a45565b8154905f199060031b1b19169055555f526020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b613b18613af2613b029386613a45565b90549060031b1c92839286613a45565b819391549060031b91821b915f19901b19161790565b90555f528360205260405f20555f8080613a96565b505050505f90565b5f82815260018201602052604090205461346c57805490600160401b821015612ec75782613b6d613b02846001809601855584613a45565b90558054925f520160205260405f205560019056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993000b8c56af6cc9ad401ad225bfe96df77f3049ba17eadac1cb95ee89df1e69d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"2167:21819:152:-:0;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;7894:76:30;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;7983:34:30;7979:146;;-1:-1:-1;2167:21819:152;;;;;;;;;7979:146:30;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;8085:29:30;;2167:21819:152;;8085:29:30;7979:146;;;;7894:76;7936:23;;;-1:-1:-1;7936:23:30;;-1:-1:-1;7936:23:30;2167:21819:152;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f5f3560e01c806305c4fdf9146124855780630a71094c146121dd5780632633b70f146121295780632acde09814611fd1578063373bba1f14611f9b5780633ccce78914611f5e5780633d15e74e14611f315780634455a38f14611efe578063461e7a8e14611ec85780636c2eb35014611a6f5780636d1064eb14611a025780636e5c7932146119c1578063709d06ae1461198b578063715018a614611922578063729e2f361461180457806379a8b245146117ce5780637fbe95b51461140b57806386c241a1146113ad5780638da5cb5b14611378578063936f43301461133b578063945cf2dd1461130557806396115bc2146112395780639e0323111461120b578063ab122753146107db578063af962995146105c8578063b5e5ad121461054f578063bcf339341461037f578063c639e2d614610351578063c9b0b1e91461031a578063ceebb69a146102ec578063d55a5bdf146102b2578063d8dfeb4514610279578063d99ddfc71461023b578063d99fcd661461020e578063f2fde38b146101e15763f887ea40146101a6575f80fd5b346101de57806003193601126101de575f516020613ba35f395f51905f5254600701546040516001600160a01b039091168152602090f35b80fd5b50346101de5760203660031901126101de5761020b6101fe612e1b565b610206613699565b613472565b80f35b50346101de57806003193601126101de5761020b60125f516020613ba35f395f51905f5254013390613593565b50346101de5760403660031901126101de57602061027161025a612e1b565b610262612e5a565b9061026c8261371d565b61342f565b604051908152f35b50346101de57806003193601126101de575f516020613ba35f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346101de57806003193601126101de5760206001600160401b0360035f516020613ba35f395f51905f5254015460401c16604051908152f35b50346101de57806003193601126101de57602060045f516020613ba35f395f51905f52540154604051908152f35b50346101de57806003193601126101de5760206001600160401b0360035f516020613ba35f395f51905f5254015416604051908152f35b50346101de57806003193601126101de57602060055f516020613ba35f395f51905f52540154604051908152f35b50346101de57806003193601126101de5761012060405161039f81612eab565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015201526101405f516020613ba35f395f51905f52546040516103f381612eab565b60018060a01b036008830154169182825260018060a01b036009820154166020830190815260018060a01b03600a830154166040840190815260018060a01b03600b840154166060850190815260018060a01b03600c850154166080860190815260018060a01b03600d860154169160a0870192835260018060a01b03600e870154169360c0880194855260018060a01b03600f880154169560e0890196875261012060018060a01b0360108a015416986101008b01998a52601160018060a01b03910154169901988952604051998a5260018060a01b0390511660208a015260018060a01b03905116604089015260018060a01b03905116606088015260018060a01b03905116608087015260018060a01b0390511660a086015260018060a01b0390511660c085015260018060a01b0390511660e084015260018060a01b0390511661010083015260018060a01b03905116610120820152f35b50346101de5760203660031901126101de5761058b90610575610570612e45565b61330e565b9091604051938493604085526040850190612e6f565b8381036020850152602080845192838152019301915b8181106105af575050500390f35b82518452859450602093840193909201916001016105a1565b50346101de5760203660031901126101de576004356001600160401b0381116107d757366023820112156107d75780600401356001600160401b0381116107d3576024820191602436918360061b0101116107d3575f516020613ba35f395f51905f5254601001546001600160a01b031633036107c4576020905f90845b818110610651578580f35b61065c818387612f8a565b5f516020613ba35f395f51905f525490919061069b906015016001600160a01b0361068685612f41565b16906001915f520160205260405f2054151590565b156107b5576004856001600160a01b036106b485612f41565b166040519283809263b134427160e01b82525afa9283156107aa576107229387928a9161077d575b50828a604051936106ed8386612edb565b81855289368487013760405197889586948593635ca61c3760e11b855201356004840152604060248401526044830190612fdc565b03926001600160a01b03165af191821561077257600192610745575b5001610646565b61076490863d881161076b575b61075c8183612edb565b810190612fcd565b505f61073e565b503d610752565b6040513d89823e3d90fd5b61079d9150833d85116107a3575b6107958183612edb565b810190612fae565b5f6106dc565b503d61078b565b6040513d8a823e3d90fd5b633b2fc1c360e21b8752600487fd5b632249f71f60e21b8352600483fd5b8280fd5b5080fd5b50346101de576102e03660031901126101de575f516020613bc35f395f51905f52546001600160401b0360ff8260401c1615911680159081611203575b60011490816111f9575b1590816111f0575b506111e1578060016001600160401b03195f516020613bc35f395f51905f525416175f516020613bc35f395f51905f52556111b1575b6004356001600160a01b03811681036107d3576108879061087f6139c3565b6102066139c3565b61088f6139c3565b604090815161089e8382612edb565b601f815260208101907f6d6964646c65776172652e73746f726167652e4d6964646c657761726556310082526108d2613699565b5190205f19810190811161119d5782519060208201908152602082526108f88483612edb565b60ff199151902016805f516020613ba35f395f51905f525560243565ffffffffffff8116810361119957815465ffffffffffff191665ffffffffffff91821617825560443590811681036111995781546bffffffffffff000000000000191660309190911b65ffffffffffff60301b1617815560643565ffffffffffff8116810361119957815465ffffffffffff60601b191660609190911b65ffffffffffff60601b1617815560843565ffffffffffff8116810361119957815465ffffffffffff60901b191660909190911b65ffffffffffff60901b1617815560a43565ffffffffffff8116810361119957815465ffffffffffff60c01b191660c09190911b65ffffffffffff60c01b1617815560c43565ffffffffffff811681036111995765ffffffffffff60018301911665ffffffffffff19825416178155600282019161012435835560e4356001600160401b0381168103611191576001600160401b036003830191166001600160401b0319825416178155610104356001600160401b03811681036111955781546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16179055610164356001600160a01b0381168103611191576006820180546001600160a01b0319166001600160a01b039283161790553060601b6004830155610144356005830155610184359081168103611191576007820180546001600160a01b0319166001600160a01b039283161790556101a4359081168103611191576008820180546001600160a01b0319166001600160a01b039283161790556101c4359081168103611191576009820180546001600160a01b0319166001600160a01b03909216919091179055610b7e612f13565b600a820180546001600160a01b0319166001600160a01b03909216919091179055610ba7612f2a565b600b820180546001600160a01b0319166001600160a01b0392831617905561022435908116810361119157600c820180546001600160a01b0319166001600160a01b0392831617905561024435908116810361119157600d820180546001600160a01b0319166001600160a01b0392831617905561026435908116810361119157600e820180546001600160a01b0319166001600160a01b0392831617905561028435908116810361119157600f820180546001600160a01b0319166001600160a01b039283161790556102a4359081168103611191576010820180546001600160a01b0319166001600160a01b039283161790556102c4359081168103611191576011820180546001600160a01b0319166001600160a01b039283161790558690610cd1612f13565b16803b156107d75781809160048951809481936387140b5b60e01b83525af180156111725761117c575b506001600160a01b03610d0c612f2a565b16803b156107d757818091602489518094819363b7d8e1a960e01b83523060048401525af1801561117257611159575b5050549065ffffffffffff8216156111155765ffffffffffff8260301c16918060011b6601fffffffffffe65fffffffffffe8216911681036111015783106110a0578265ffffffffffff8260601c161061102a578265ffffffffffff8260901c1610610fc05760c01c65ffffffffffff16908115610f7c575465ffffffffffff16908115610f275765ffffffffffff91610dd591613000565b1611610e97576003905410610e3e57610dec575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f516020613bc35f395f51905f5254165f516020613bc35f395f51905f52555160018152a180f35b815162461bcd60e51b815260206004820152602c60248201527f5265736f6c766572207365742065706f6368732064656c6179206d757374206260448201526b65206174206c65617374203360a01b6064820152608490fd5b825162461bcd60e51b815260206004820152605f60248201527f5665746f206475726174696f6e20616e6420736c61736820657865637574696f60448201527f6e2064656c6179206d757374206265206c657373207468616e206f722065717560648201527f616c20746f206d696e207661756c74732065706f6368206475726174696f6e00608482015260a490fd5b855162461bcd60e51b815260206004820152602860248201527f4d696e20736c61736820657865637574696f6e2064656c61792063616e6e6f74604482015267206265207a65726f60c01b6064820152608490fd5b855162461bcd60e51b815260206004820152601c60248201527f5665746f206475726174696f6e2063616e6e6f74206265207a65726f000000006044820152606490fd5b855162461bcd60e51b815260206004820152602481018790527f5661756c7420677261636520706572696f64206d75737420626520626967676560448201527f72207468616e206d696e207661756c74732065706f6368206475726174696f6e6064820152608490fd5b855162461bcd60e51b815260206004820152604360248201527f4f70657261746f7220677261636520706572696f64206d75737420626520626960448201527f67676572207468616e206d696e207661756c74732065706f636820647572617460648201526234b7b760e91b608482015260a490fd5b855162461bcd60e51b815260206004820152603460248201527f4d696e207661756c74732065706f6368206475726174696f6e206d75737420626044820152736520626967676572207468616e2032206572617360601b6064820152608490fd5b634e487b7160e01b88526011600452602488fd5b845162461bcd60e51b815260206004820152601b60248201527f457261206475726174696f6e2063616e6e6f74206265207a65726f00000000006044820152606490fd5b8161116391612edb565b61116e57855f610d3c565b8580fd5b87513d84823e3d90fd5b8161118691612edb565b61116e57855f610cfb565b8680fd5b8780fd5b8480fd5b634e487b7160e01b84526011600452602484fd5b600160401b60ff60401b195f516020613bc35f395f51905f525416175f516020613bc35f395f51905f5255610860565b63f92ee8a960e01b8252600482fd5b9050155f61082a565b303b159150610822565b829150610818565b50346101de57806003193601126101de57602060025f516020613ba35f395f51905f52540154604051908152f35b50346101de5760203660031901126101de57611253612e1b565b5f516020613ba35f395f51905f52546001600160a01b0390911690601281019061129d61128084846139ee565b65ffffffffffff81169165ffffffffffff8260301c169160601c90565b5065ffffffffffff81161592915082156112d5575b50506112c657906112c2916139a9565b5080f35b63f1c9810160e01b8352600483fd5b65ffffffffffff9192506112fa8291826112ee4261397a565b955460601c1690613000565b169116105f806112b2565b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460301c16604051908152f35b50346101de5760203660031901126101de5761020b611358612e1b565b611361816134e3565b60155f516020613ba35f395f51905f52540161361d565b50346101de57806003193601126101de575f516020613b835f395f51905f52546040516001600160a01b039091168152602090f35b50346101de5760203660031901126101de576113c7612e1b565b5f516020613ba35f395f51905f525460100180549091906001600160a01b031633036107c45781546001600160a01b0319166001600160a01b039190911617905580f35b50346101de5760403660031901126101de576004356001600160401b0381116107d757606060031982360301126107d757604051606081018181106001600160401b038211176117ba5760405281600401356001600160401b0381116117b6578201366023820112156117b657600481013561148681612efc565b916114946040519384612edb565b818352602060048185019360061b830101019036821161119157602401915b8183106117585750505081526114d6604460208301936024810135855201612e31565b90604081019182526114e6612e5a565b935f516020613ba35f395f51905f525490600782019460018060a01b03865416330361174957845160068401546001600160a01b0391821691160361173a57819594939550606093829565ffffffffffff60056015870196019916926020965b895180518a10156116f3578961155b9161304a565b5180516001600160a01b03165f908152600189016020526040902054156107b557908b91866116148b6116068b6115f46115a38f6112809060018060a01b038a5116906139ee565b9a546040516001600160a01b03909c169b925090506115c28683612edb565b838252604051936115d38786612edb565b845260405197889687015260408601526080606086015260a0850190612fdc565b838103601f1901608085015290612fdc565b03601f198101835282612edb565b85548751838d0180519096909290916001600160a01b039081169116823b156116ef57908c809493926116746040519788968795869463239723ed60e01b8652600486015260248501526044840152608060648401526084830190612fdc565b03925af180156116e4579089916116cf575b5050916116c791600193519151604051926bffffffffffffffffffffffff199060601b168c8401526034830152603482526116c2605483612edb565b6132ce565b980197611546565b816116d991612edb565b61119557875f611686565b6040513d8b823e3d90fd5b8c80fd5b8861172c86848651915160405192858401526bffffffffffffffffffffffff199060601b166040830152603482526116c2605483612edb565b818151910120604051908152f35b63039a1fd760e21b8252600482fd5b639165520160e01b8252600482fd5b60408336031261119157604051604081018181106001600160401b038211176117a25791602091604093845261178d86612e31565b815282860135838201528152019201916114b3565b634e487b7160e01b89526041600452602489fd5b8380fd5b634e487b7160e01b84526041600452602484fd5b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460901c16604051908152f35b50346101de5760603660031901126101de5761181e612e1b565b5f516020613ba35f395f51905f5254600781015460243592604435926001600160a01b0390921691338390036119135760068101546001600160a01b039283169216820361190457600e01546001600160a01b031691859190833b156107d3576084908360405195869485936348a78da760e01b8552600485015260248401528860448401528760648401525af180156118f9576118e4575b60208383604051908382019283526040820152604081526118d9606082612edb565b519020604051908152f35b6118ef848092612edb565b6107d357826118b7565b6040513d86823e3d90fd5b63039a1fd760e21b8652600486fd5b639165520160e01b8652600486fd5b50346101de57806003193601126101de5761193b613699565b5f516020613b835f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460601c16604051908152f35b50346101de5760403660031901126101de576119fe6119ea6119e1612e45565b6024359061306b565b604051918291602083526020830190612e6f565b0390f35b50346101de5760203660031901126101de57611a1c612e1b565b5f516020613ba35f395f51905f5254600f0180549091906001600160a01b03163303611a605781546001600160a01b0319166001600160a01b039190911617905580f35b633fdc220360e01b8352600483fd5b50346101de57806003193601126101de57611a88613699565b5f516020613bc35f395f51905f525460ff8160401c16908115611eb3575b50611ea4575f516020613bc35f395f51905f52805468ffffffffffffffffff1916680100000000000000021790555f516020613b835f395f51905f5254611af8906001600160a01b031661087f6139c3565b5f516020613ba35f395f51905f525460408051611b158282612edb565b601f815260208101907f6d6964646c65776172652e73746f726167652e4d6964646c65776172655632008252611b49613699565b5190205f19810190811161119d578151906020820190815260208252611b6f8383612edb565b9051902060ff19165f516020613ba35f395f51905f528190558254815465ffffffffffff90911665ffffffffffff19821681178355845465ffffffffffff60301b166001600160601b031990921617178155908254825465ffffffffffff60601b191665ffffffffffff60601b9091161782558254825465ffffffffffff60901b191665ffffffffffff60901b9091161782558254825465ffffffffffff60c01b191665ffffffffffff60c01b90911617825565ffffffffffff60018401541665ffffffffffff60018401911665ffffffffffff1982541617905560028301546002830155611ca2600384016001600160401b03808254169181600387019316821984541617835554841c1667ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b1916179055565b60068381015490830180546001600160a01b039283166001600160a01b031991821617909155600480860154908501556005808601549085015560078086015490850180549190931691161790556008808301908401848403611dbc575b50508392601281019260128101955b8454811015611d365780611d2f611d28600193886136cc565b908a6136fb565b5001611d0f565b50601590810192910184805b8254811015611d695780611d62611d5b600193866136cc565b90886136fb565b5001611d42565b507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260208460ff60401b195f516020613bc35f395f51905f5254165f516020613bc35f395f51905f52555160028152a180f35b5481546001600160a01b03199081166001600160a01b039283161790925560098581015490850180548416918316919091179055600a8086015490850180548416918316919091179055600b8086015490850180548416918316919091179055600c8086015490850180548416918316919091179055600d8086015490850180548416918316919091179055600e8086015490850180548416918316919091179055600f808601549085018054841691831691909117905560108086015490850180548416918316919091179055601180860154908501805490931691161790555f80611d00565b63f92ee8a960e01b8152600490fd5b600291506001600160401b031610155f611aa6565b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545460c01c16604051908152f35b50346101de57806003193601126101de57602065ffffffffffff5f516020613ba35f395f51905f52545416604051908152f35b50346101de57806003193601126101de5761020b60125f516020613ba35f395f51905f525401339061361d565b50346101de5760203660031901126101de5761020b611f7b612e1b565b611f84816134e3565b60155f516020613ba35f395f51905f525401613593565b50346101de57806003193601126101de57602065ffffffffffff60015f516020613ba35f395f51905f5254015416604051908152f35b50346101de57806003193601126101de575f516020613ba35f395f51905f525460098101546040516302910f8b60e31b815233600482015290602090829060249082906001600160a01b03165afa9081156120f057839161210a575b50156120fb57600c8101546040516308834cb560e21b815233600482015230602482015290602090829060449082906001600160a01b03165afa9081156120f05783916120c1575b50156120b25761209b9065ffffffffffff61208f4261397a565b169060123391016136fb565b156120a35780f35b63f411c32760e01b8152600490fd5b6396cc2bc360e01b8252600482fd5b6120e3915060203d6020116120e9575b6120db8183612edb565b810190613032565b5f612075565b503d6120d1565b6040513d85823e3d90fd5b6325878fa360e21b8252600482fd5b612123915060203d6020116120e9576120db8183612edb565b5f61202d565b50346101de5760203660031901126101de57612143612e1b565b61214c816134e3565b5f516020613ba35f395f51905f52546001600160a01b0390911690601581019061217961128084846139ee565b5065ffffffffffff81161592915082156121ad575b505061219e57906112c2916139a9565b6347a11ef760e11b8352600483fd5b65ffffffffffff9192506121d28291826121c64261397a565b955460901c1690613000565b169116105f8061218e565b50346101de5760203660031901126101de576001600160401b03600435116101de573660236004350112156101de576001600160401b0360043560040135116101de573660246004356004013560051b6004350101116101de575f516020613ba35f395f51905f5254600f8101546001600160a01b031633036124765781906020905b600435600401358310156124725760248360051b6004350101356082196004353603018112156111995760043501906122bc6001600160a01b036122a660248501612f41565b165f908152601383016020526040902054151590565b1561246357845b6122d36064840160248501612f55565b9050811015612456576122f6816122f06064860160248701612f55565b90612f8a565b6123206001600160a01b0361230a83612f41565b165f908152601685016020526040902054151590565b156107b557869190600490866001600160a01b0361233d83612f41565b166040519384809263b134427160e01b82525afa9182156118f9578492612437575b5060048501549161237260248801612f41565b604488013565ffffffffffff8116900361116e57889586946123f760405161239a8882612edb565b838152601f1988013689830137604051998a978896879563545ce38960e01b8752600487015260018060a01b031660248601520135604484015265ffffffffffff60448d013516606484015260a0608484015260a4830190612fdc565b03926001600160a01b03165af19182156107725760019261241a575b50016122c3565b61243090863d881161076b5761075c8183612edb565b505f612413565b61244f919250873d89116107a3576107958183612edb565b905f61235f565b5092600191500191612260565b6303fa1eaf60e41b8552600485fd5b8380f35b633fdc220360e01b8252600482fd5b5034612b47576040366003190112612b475761249f612e1b565b6024356001600160a01b038116929190839003612b47576124bf816134e3565b5f516020613ba35f395f51905f525460088101546040516302910f8b60e31b81526001600160a01b038085166004830181905294939260209183916024918391165afa908115612cd9575f91612dfc575b5015612ded5760405163054fd4d560e41b8152602081600481875afa908115612cd9575f91612dce575b5060038201906001600160401b0380835416911603612dbf5760405163d8dfeb4560e01b8152602081600481885afa908115612cd9575f91612da0575b5060068301546001600160a01b03908116911603612d91576040516327f843b560e11b8152602081600481885afa908115612cd9575f91612d72575b5065ffffffffffff80845460301c169116908110612d635760405163142186b760e21b8152602081600481895afa908115612cd9575f91612d44575b5015612d3557604051630ce9b79360e41b8152602081600481895afa908115612cd9575f91612d16575b50600484810180546040516368adba0760e11b81529283015292916001600160a01b031690602081602481855afa908115612cd9575f91612ce4575b5019612c87575b602060049160405192838092637f5a7c7b60e01b82525afa9081156107aa578891612c68575b506001600160a01b0316612c5657604051630dd83c7f60e31b81526020816004818a5afa9081156107aa578891612c37575b5015612c285760405163b134427160e01b81526020816004818a5afa9081156107aa578891612c09575b50604051635d927f4560e11b81526001600160a01b039190911693602082600481885afa9182156116e4578992612bdd575b506001600160401b0380915460401c16911603612bce57604051631a684c7560e11b8152602081600481875afa9081156107aa578891612baf575b50612ba05760405163e054e08b60e01b8152602081600481875afa9081156107aa578891612b71575b5065ffffffffffff855460c01c1665ffffffffffff821610612b62576127a865ffffffffffff918260018801541690613000565b1611612b535760405163bc6eac5b60e01b8152602081600481865afa908115610772578791612b1d575b50600284015410612b0e57549060209261282a846040516127f38282612edb565b898152601f19820195863684840137604051938492839263cd05b8a160e01b84526004840152604060248401526044830190612fdc565b0381865afa9081156107aa578891612af1575b506001600160a01b031680612aca575060110154604051926001600160a01b039091169061286b8585612edb565b8784523685850137813b15611191579186916128b193836040518096819582946348b47ce960e11b84528460048501526024840152606060448401526064830190612fdc565b03925af18015612a1b57908591612ab5575b50505b6040516313c085b760e11b81528181600481875afa908115612a1b578591612a98575b506001600160a01b031615612a89575f516020613ba35f395f51905f52549260248260018060a01b03600d87015416604051928380926302910f8b60e31b82528b60048301525afa908115612a52578691612a6c575b5015612a5d5760405163411557d160e01b815282816004818a5afa908115612a52578691612a35575b506001600160a01b031603612a265760405163054fd4d560e41b81528181600481895afa918215612a1b57916001600160401b039160029387926129ee575b505016036129df57601561209b939465ffffffffffff6129c64261397a565b1660609190911b6001600160601b0319161792016136fb565b63ded51c0b60e01b8352600483fd5b612a0d9250803d10612a14575b612a058183612edb565b810190613556565b5f806129a7565b503d6129fb565b6040513d87823e3d90fd5b630a724f6160e01b8452600484fd5b612a4c9150833d85116107a3576107958183612edb565b5f612968565b6040513d88823e3d90fd5b6346e01c4360e11b8552600485fd5b612a839150833d85116120e9576120db8183612edb565b5f61293f565b630c6b5ff760e31b8452600484fd5b612aaf9150823d84116107a3576107958183612edb565b5f6128e9565b81612abf91612edb565b6117b657835f6128c3565b6011909101546001600160a01b03161491506128c6905057633cc6586560e21b8452600484fd5b612b089150853d87116107a3576107958183612edb565b5f61283d565b633a2662c360e11b8652600486fd5b90506020813d602011612b4b575b81612b3860209383612edb565b81010312612b4757515f6127d2565b5f80fd5b3d9150612b2b565b6307cfe49360e51b8652600486fd5b633062eb1960e21b8852600488fd5b612b93915060203d602011612b99575b612b8b8183612edb565b810190613575565b5f612774565b503d612b81565b63447984b360e11b8752600487fd5b612bc8915060203d6020116120e9576120db8183612edb565b5f61274b565b63f8c618c760e01b8752600487fd5b6001600160401b03919250612c01829160203d602011612a1457612a058183612edb565b929150612710565b612c22915060203d6020116107a3576107958183612edb565b5f6126de565b631501f36360e21b8752600487fd5b612c50915060203d6020116120e9576120db8183612edb565b5f6126b4565b60016221bb1360e11b03198752600487fd5b612c81915060203d6020116107a3576107958183612edb565b5f612682565b803b15612b47576040516323f752d560e01b81525f600482018190525f1960248301528160448183865af18015612cd957612cc3575b5061265c565b612cd09198505f90612edb565b5f966020612cbd565b6040513d5f823e3d90fd5b90506020813d602011612d0e575b81612cff60209383612edb565b81010312612b4757515f612655565b3d9150612cf2565b612d2f915060203d6020116107a3576107958183612edb565b5f612619565b636e549c1760e11b5f5260045ffd5b612d5d915060203d6020116120e9576120db8183612edb565b5f6125ef565b634934476760e01b5f5260045ffd5b612d8b915060203d602011612b9957612b8b8183612edb565b5f6125b3565b63039a1fd760e21b5f5260045ffd5b612db9915060203d6020116107a3576107958183612edb565b5f612577565b63bfcdc45f60e01b5f5260045ffd5b612de7915060203d602011612a1457612a058183612edb565b5f61253a565b635b19e4bb60e01b5f5260045ffd5b612e15915060203d6020116120e9576120db8183612edb565b5f612510565b600435906001600160a01b0382168203612b4757565b35906001600160a01b0382168203612b4757565b6004359065ffffffffffff82168203612b4757565b6024359065ffffffffffff82168203612b4757565b90602080835192838152019201905f5b818110612e8c5750505090565b82516001600160a01b0316845260209384019390920191600101612e7f565b61014081019081106001600160401b03821117612ec757604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b03821117612ec757604052565b6001600160401b038111612ec75760051b60200190565b6101e4356001600160a01b0381168103612b475790565b610204356001600160a01b0381168103612b475790565b356001600160a01b0381168103612b475790565b903590601e1981360301821215612b4757018035906001600160401b038211612b4757602001918160061b36038313612b4757565b9190811015612f9a5760061b0190565b634e487b7160e01b5f52603260045260245ffd5b90816020910312612b4757516001600160a01b0381168103612b475790565b90816020910312612b47575190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9065ffffffffffff8091169116019065ffffffffffff821161301e57565b634e487b7160e01b5f52601160045260245ffd5b90816020910312612b4757518015158103612b475790565b8051821015612f9a5760209160051b010190565b9190820180921161301e57565b9181156132785761307b8361330e565b9281518181111561326f575f5f198201828111925b80831061319657505050506001945f1982019082821161301e576130b4828761304a565b5183975b855189101561318857816130cc8a8a61304a565b51036130e8576001810180911161301e576001909801976130b8565b9395975050909294505b60018211613103575b505050815290565b604051602081019165ffffffffffff60d01b9060d01b1682526006815261312b602682612edb565b5190209080156131745761314091068361305e565b5f19810190811161301e5761316b906001600160a01b0390613162908661304a565b5116918461304a565b525f80806130fb565b634e487b7160e01b5f52601260045260245ffd5b9395975050909294506130f2565b9296958792959891945f935b61301e578685035f190186811161301e5784101561325c576131c4848961304a565b51600185019485811161301e57858c826001946131e28f9a8f61304a565b51116131f3575b50505001936131a2565b613253918d61322383613206878461304a565b5192613212828261304a565b5161321d898361304a565b5261304a565b52858060a01b03613234858361304a565b51169361321d878060a01b0361324a858561304a565b5116918361304a565b525f8c826131e9565b9491989560019197989493500191613090565b50509150915090565b60405162461bcd60e51b815260206004820152602860248201527f4d61782076616c696461746f7273206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608490fd5b61330c906020808095946040519684889551918291018487015e8401908282015f8152815193849201905e01015f815203601f198101845283612edb565b565b906133188261371d565b60125f516020613ba35f395f51905f52540180549261333684612efc565b916133446040519384612edb565b848352601f1961335386612efc565b0136602085013761336385612efc565b946133716040519687612edb565b808652601f1961338082612efc565b013660208801375f925f925b8284106133a0575050505080825283529190565b909192936133d56133dc846133b588866136cc565b93909365ffffffffffff81169165ffffffffffff8260301c169160601c90565b50906137a7565b156134255783613401916133f0848a61304a565b6001600160a01b0382169052613800565b61340b828a61304a565b526001810180911161301e57600190945b0192919061338c565b509360019061341c565b9061345b816133d561128060125f516020613ba35f395f51905f52540160018060a01b038716906139ee565b1561346c5761346991613800565b90565b50505f90565b6001600160a01b031680156134d0575f516020613b835f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b604051632474521560e21b81525f600482015233602482015290602090829060449082906001600160a01b03165afa908115612cd9575f91613537575b501561352857565b630e7fea9d60e01b5f5260045ffd5b613550915060203d6020116120e9576120db8183612edb565b5f613520565b90816020910312612b4757516001600160401b0381168103612b475790565b90816020910312612b47575165ffffffffffff81168103612b475790565b65ffffffffffff916135b16112806001600160a01b038316846139ee565b919490941693841590811561360b575b506135fc576135f99365ffffffffffff60301b6135dd4261397a565b60301b161760609190911b6001600160601b03191617916136fb565b50565b633f54562b60e11b5f5260045ffd5b65ffffffffffff91501615155f6135c1565b65ffffffffffff9161363b6112806001600160a01b038316846139ee565b9490911615159081613688575b50613679576135f99265ffffffffffff6136614261397a565b1660609190911b6001600160601b03191617916136fb565b637952fbad60e11b5f5260045ffd5b65ffffffffffff915016155f613648565b5f516020613b835f395f51905f52546001600160a01b031633036136b957565b63118cdaa760e01b5f523360045260245ffd5b91906136da60029184613a45565b90549060031b1c92835f520160205260405f20549160018060a01b03169190565b613469929160018060a01b031691825f526002820160205260405f2055613b35565b5f516020613ba35f395f51905f52549065ffffffffffff61373d4261397a565b1665ffffffffffff8216101561379057613774915465ffffffffffff808260601c169160901c168082105f1461379f575090613000565b65ffffffffffff806137854261397a565b169116111561379057565b63686c69fd60e01b5f5260045ffd5b905090613000565b65ffffffffffff16801515929190836137ed575b50826137c657505090565b65ffffffffffff16801592509082156137de57505090565b65ffffffffffff161115905090565b65ffffffffffff8316101592505f6137bb565b5f516020613ba35f395f51905f52546015810180546004909201545f95948694602093869391905b868810613839575050505050505050565b90919293949596986133d5613852866133b58d866136cc565b1561397057604051630ce9b79360e41b8152908890829060049082906001600160a01b03165afa908115612cd9576138ee9189915f91613953575b506040519061389c8383612edb565b5f825289368484013760405163e02f693760e01b8152600481018990526001600160a01b038816602482015265ffffffffffff8a16604482015260806064820152938492839182916084830190612fdc565b03916001600160a01b03165afa908115612cd9575f91613925575b506139169060019261305e565b995b0196959493929190613828565b90508781813d831161394c575b61393c8183612edb565b81010312612b4757516001613909565b503d613932565b61396a9150823d84116107a3576107958183612edb565b5f61388d565b5098600190613918565b65ffffffffffff81116139925765ffffffffffff1690565b6306dfcc6560e41b5f52603060045260245260445ffd5b9061346991815f52600281016020525f6040812055613a5a565b60ff5f516020613bc35f395f51905f525460401c16156139df57565b631afcd79f60e31b5f5260045ffd5b90805f526002820160205260405f2054918183159182613a25575b5050613a13575090565b63015ab34360e11b5f5260045260245ffd5b613a3d92506001915f520160205260405f2054151590565b15815f613a09565b8054821015612f9a575f5260205f2001905f90565b906001820191815f528260205260405f20548015155f14613b2d575f19810181811161301e5782545f1981019190821161301e57818103613ae2575b50505080548015613ace575f190190613aaf8282613a45565b8154905f199060031b1b19169055555f526020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b613b18613af2613b029386613a45565b90549060031b1c92839286613a45565b819391549060031b91821b915f19901b19161790565b90555f528360205260405f20555f8080613a96565b505050505f90565b5f82815260018201602052604090205461346c57805490600160401b821015612ec75782613b6d613b02846001809601855584613a45565b90558054925f520160205260405f205560019056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993000b8c56af6cc9ad401ad225bfe96df77f3049ba17eadac1cb95ee89df1e69d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"2167:21819:152:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;7405:17;;2167:21819;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;2357:1:29;2167:21819:152;;:::i;:::-;2303:62:29;;:::i;:::-;2357:1;:::i;:::-;2167:21819:152;;;;;;;;;;;;;;;8657:10;8628:20;-1:-1:-1;;;;;;;;;;;2167:21819:152;8628:20;8657:10;;;:::i;2167:21819::-;;;;;;;-1:-1:-1;;2167:21819:152;;;;;13369:372;2167:21819;;:::i;:::-;;;:::i;:::-;22676:2;;;;:::i;:::-;13369:372;:::i;:::-;2167:21819;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;7092:21;;2167:21819;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6978:30:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;6978:30;2167:21819;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;7197:21;2167:21819;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6852:34:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;6852:34;2167:21819;;;;;;;;;;;;;;;;;;;;;;7303:22;-1:-1:-1;;;;;;;;;;;2167:21819:152;7303:22;2167:21819;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;:::i;:::-;;;;;;7537:20;;;2167:21819;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;15783:38;;2167:21819;-1:-1:-1;;;;;2167:21819:152;15769:10;:52;15765:108;;2167:21819;;;;15888:9;15899:18;;;;;;2167:21819;;;15919:3;15971:10;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;8806:28:83;;16001:17:152;;-1:-1:-1;;;;;16028:11:152;2167:21819;16028:11;:::i;:::-;2167:21819;8806:28:83;5197:14;5101:129;-1:-1:-1;2167:21819:152;5197:14:83;2167:21819:152;;;-1:-1:-1;2167:21819:152;;5197:26:83;;5101:129;;8806:28;16000:40:152;15996:106;;2167:21819;;-1:-1:-1;;;;;16136:11:152;;;:::i;:::-;2167:21819;;;;;;;;;;16129:29;;;;;;;;;2167:21819;16129:29;;;;;;;15919:3;2167:21819;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;16116:83;;16173:11;2167:21819;;16116:83;;2167:21819;;;;;;;;;;;:::i;:::-;16116:83;;-1:-1:-1;;;;;2167:21819:152;16116:83;;;;;;;2167:21819;16116:83;;;15919:3;;2167:21819;15888:9;;16116:83;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2167:21819;;;;;;;;;16129:29;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2167:21819;;;;;;;;;15996:106;-1:-1:-1;;;16067:20:152;;2167:21819;15390:20;16067;15765:108;-1:-1:-1;;;15844:18:152;;2167:21819;8031:18;15844;2167:21819;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;4301:16:30;2167:21819:152;;4724:16:30;;:34;;;;2167:21819:152;4803:1:30;4788:16;:50;;;;2167:21819:152;4853:13:30;:30;;;;2167:21819:152;4849:91:30;;;2167:21819:152;4803:1:30;-1:-1:-1;;;;;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;4977:67:30;;2167:21819:152;;;-1:-1:-1;;;;;2167:21819:152;;;;;;6959:1:30;;6891:76;;:::i;:::-;;;:::i;6959:1::-;6891:76;;:::i;:::-;2167:21819:152;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:29;;:::i;:::-;2167:21819:152;23580:27;;-1:-1:-1;;2167:21819:152;;;;;;;;;23561:52;2167:21819;23561:52;;2167:21819;;;;23561:52;;;;;;:::i;:::-;2167:21819;23617:23;2167:21819;;23551:63;;:89;2167:21819;-1:-1:-1;;;;;;;;;;;2167:21819:152;3270:19;2167:21819;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;;;3325:29;2167:21819;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3388:27;2167:21819;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3446:24;2167:21819;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3500:23;2167:21819;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3560:30;2167:21819;;;;;;;;;4803:1:30;3533:24:152;;2167:21819;;;;;;;;;;3600:27;;;2167:21819;3630:33;2167:21819;;;3701:31;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;-1:-1:-1;;;;;3673:25:152;;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;;;;;;;3766:27;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;-1:-1:-1;;;2167:21819:152;;;;3841:18;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;3826:12;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;3892:4;3388:27;2167:21819;;3869:12;;2167:21819;3954:19;2167:21819;3938:13;;;2167:21819;3995:14;2167:21819;;;;;;;;3984:8;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;4034:17;2167:21819;;;;;;;;4020:11;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;2872:1;;:::i;:::-;;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;2872:1;;:::i;:::-;;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;2872:1;2167:21819;;;;;;;;2872:1;;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;4079:33;;:::i;:::-;2167:21819;4062:69;;;;;2167:21819;;;;;;;;;;;;;4062:69;;;;;;;;;;2167:21819;-1:-1:-1;;;;;;4167:35:152;;:::i;:::-;2167:21819;4141:91;;;;;2167:21819;;;3270:19;2167:21819;;;;;;;;;4141:91;;3892:4;2167:21819;4141:91;;2167:21819;4141:91;;;;;;;;2167:21819;;;;;;;;17273:17;2167:21819;;;;;;;;;4803:1:30;2167:21819:152;;;;;;;;;;;17657:44;;2167:21819;;;;;3388:27;2167:21819;;17961:48;2167:21819;;;;;;;;18302:45;2167:21819;;3560:30;2167:21819;;;;18517:21;;2167:21819;;;;;;18781:28;;2167:21819;;;18885:44;;;;:::i;:::-;2167:21819;18885:71;2167:21819;;3673:25;2167:21819;;19282:32;2167:21819;;5064:101:30;;2167:21819:152;;;5064:101:30;2167:21819:152;5140:14:30;2167:21819:152;-1:-1:-1;;;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;4803:1:30;2167:21819:152;;5140:14:30;2167:21819:152;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;-1:-1:-1;;;3388:27:152;2167:21819;;;3446:24;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;;3388:27;2167:21819;;;;3446:24;2167:21819;;;3500:23;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;-1:-1:-1;;;3388:27:152;2167:21819;;;3446:24;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;3388:27;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;3270:19;2167:21819;;;;;;3325:29;2167:21819;;;;3388:27;2167:21819;;;3446:24;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;;3388:27;2167:21819;;;-1:-1:-1;;;3446:24:152;2167:21819;;;3500:23;;2167:21819;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;-1:-1:-1;;;3388:27:152;2167:21819;;;3446:24;;2167:21819;;-1:-1:-1;;;2167:21819:152;;2872:1;2167:21819;;3270:19;2167:21819;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;3270:19;2167:21819;;;;3325:29;2167:21819;;;3388:27;;2167:21819;4141:91;;;;;:::i;:::-;2167:21819;;4141:91;;;;2167:21819;;;;4141:91;2167:21819;;;;;;;;;4062:69;;;;;:::i;:::-;2167:21819;;4062:69;;;;2167:21819;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;4977:67:30;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;4977:67:30;;4849:91;-1:-1:-1;;;4906:23:30;;2167:21819:152;6496:23:30;4906;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:30;;4724:34;;;-1:-1:-1;4724:34:30;;2167:21819:152;;;;;;;;;;;;;;6720:36;-1:-1:-1;;;;;;;;;;;2167:21819:152;6720:36;2167:21819;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;8910:11;;;;2376:23:162;23973:47:82;2167:21819:152;8910:11;23973:47:82;:::i;:::-;2167:21819:152;;;;;;676:2:162;2167:21819:152;;;698:2:162;2167:21819:152;390:319:162;;2376:23;-1:-1:-1;2167:21819:152;;;8955:17;;2167:21819;-1:-1:-1;8955:76:152;;;;2167:21819;8951:144;;;;21805:50:82;;;;:::i;:::-;;2167:21819:152;;8951:144;-1:-1:-1;;;9054:30:152;;2167:21819;9054:30;;8955:76;2167:21819;837:15:84;;;8995:36:152;837:15:84;;;819:34;837:15;819:34;:::i;:::-;2167:21819:152;;;;;8995:36;;:::i;:::-;2167:21819;;;8976:55;8955:76;;;;2167:21819;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;11335:5;2167:21819;;:::i;:::-;23773:5;;;:::i;:::-;11310:17;-1:-1:-1;;;;;;;;;;;2167:21819:152;11310:17;11335:5;:::i;2167:21819::-;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;7979:29;;2167:21819;;7979:29;;2167:21819;-1:-1:-1;;;;;2167:21819:152;7965:10;:43;7961:99;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;2167:21819:152;9862:8;;;;2167:21819;;;;;;;;;9848:10;:22;9844:71;;2167:21819;;;9950:12;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;9929:33;9925:90;;10025:30;;;;;;2167:21819;10070:13;;10224:8;2167:21819;10460:13;10224:8;;;10460:13;;2167:21819;;;;10065:677;10122:3;10089:24;;2167:21819;;10085:35;;;;;10177:27;;;;:::i;:::-;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;-1:-1:-1;2167:21819:152;;;;5197:14:83;;2167:21819:152;;;;;;5197:26:83;10219:99:152;;2167:21819;;;;10438:58;2167:21819;;;;2581:23:162;2167:21819:152;23973:47:82;2167:21819:152;;;;;;;;;23973:47:82;;:::i;2581:23:162:-;2167:21819:152;;;;-1:-1:-1;;;;;2167:21819:152;;;;;-1:-1:-1;2167:21819:152;-1:-1:-1;2167:21819:152;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;10438:58;;;;;2167:21819;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;;;;;:::i;:::-;10438:58;2167:21819;;10438:58;;;;;;:::i;:::-;2167:21819;;;;10595:14;;;2167:21819;;10595:14;;2167:21819;;10595:14;;-1:-1:-1;;;;;2167:21819:152;;;;;10510:106;;;;;2167:21819;;;;;;;;;;;;;;;;;;;10510:106;;2167:21819;10510:106;;2167:21819;;;;;;;;;;;;;;;;;;;:::i;:::-;10510:106;;;;;;;;;;;;;10122:3;2167:21819;;;10651:80;2167:21819;;;;;;;;;;;;;;;10683:47;;;2167:21819;;;;;;10683:47;;;;;;:::i;:::-;10651:80;:::i;:::-;10122:3;2167:21819;10070:13;;;10510:106;;;;;:::i;:::-;2167:21819;;10510:106;;;;;2167:21819;;;;;;;;;10510:106;2167:21819;;;10085:35;;10769:93;10085:35;;;2167:21819;;;;;10801:60;;;;2167:21819;;;;;;;;;;;;10801:60;;;10683:47;10801:60;;:::i;10769:93::-;2167:21819;;;;;10759:104;2167:21819;;;;;;9925:90;-1:-1:-1;;;9985:19:152;;2167:21819;19844:19;9985;9844:71;-1:-1:-1;;;9893:11:152;;2167:21819;9353:11;9893;2167:21819;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;9322:8;;;2167:21819;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;9308:10;:22;;;9304:71;;9398:12;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;9389:21;;9385:78;;9497:27;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;9473:101;;;;;;2167:21819;;;;;;;;;;;;9473:101;;2167:21819;9473:101;;2167:21819;;;;;;;;;;;;;;;9473:101;;;;;;;;2167:21819;;;;;;9602:30;;;;2167:21819;;;;;;;;9602:30;;;2167:21819;9602:30;;:::i;:::-;2167:21819;9592:41;;2167:21819;;;;;;9473:101;;;;;;:::i;:::-;2167:21819;;9473:101;;;;2167:21819;;;;;;;;;9385:78;-1:-1:-1;;;9433:19:152;;2167:21819;19844:19;9433;9304:71;-1:-1:-1;;;9353:11:152;;2167:21819;9353:11;;2167:21819;;;;;;;;;;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;;;;;2167:21819:152;;;;;;;-1:-1:-1;;;;;2167:21819:152;3975:40:29;2167:21819:152;;3975:40:29;2167:21819:152;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;7711:30;;2167:21819;;7711:30;;2167:21819;-1:-1:-1;;;;;2167:21819:152;7697:10;:44;7693:101;;2167:21819;;-1:-1:-1;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;7693:101;-1:-1:-1;;;7764:19:152;;2167:21819;14910:19;7764;2167:21819;;;;;;;;;;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;6429:44:30;;;;;2167:21819:152;6425:105:30;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;2167:21819:152;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;6959:1:30;;-1:-1:-1;;;;;2167:21819:152;6891:76:30;;:::i;6959:1::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:29;;:::i;:::-;2167:21819:152;23580:27;;-1:-1:-1;;2167:21819:152;;;;;;;;;23561:52;2167:21819;23561:52;;2167:21819;;;;23561:52;;;;;;:::i;:::-;2167:21819;;23551:63;;-1:-1:-1;;23551:89:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;;;-1:-1:-1;;;2167:21819:152;-1:-1:-1;;;;;;2167:21819:152;;;;;;;23551:89;2167:21819;;;;-1:-1:-1;;;;2167:21819:152;-1:-1:-1;;;2167:21819:152;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;-1:-1:-1;;;2167:21819:152;;;;;;;;;;-1:-1:-1;;;;2167:21819:152;-1:-1:-1;;;2167:21819:152;;;;;;;6591:4:30;4964:33:152;;2167:21819;;;6591:4:30;4928:33:152;;2167:21819;;;;;;;;;;4382:1;5046:36;;2167:21819;4382:1;5007:36;;2167:21819;5173:63;5129:34;;;-1:-1:-1;;;;;2167:21819:152;;;;5092:34;;5129;5092;;2167:21819;;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;5173:63;5270:21;;;;2167:21819;5246:21;;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;;;-1:-1:-1;;;;;;2167:21819:152;;;;;;;;5325:21;;;2167:21819;5301:21;;;2167:21819;5381:22;;;;2167:21819;5356:22;;;2167:21819;5433:17;;;;2167:21819;5413:17;;;2167:21819;;;;;;;;;;;5483:20;5460;;;;5483;;2167:21819;;;;;;5519:13;;;;5538:20;;;5659;5538;5659;;5514:192;5569:3;2167:21819;;5534:33;;;;;5619:26;5659:36;5619:26;6591:4:30;5619:26:152;;;:::i;:::-;5659:36;;;:::i;:::-;;2167:21819;5519:13;;5534:33;-1:-1:-1;5740:17:152;5855;;;;5534:33;5740:17;5534:33;;5768:3;2167:21819;;5736:30;;;;;5818:23;5855:33;5818:23;6591:4:30;5818:23:152;;;:::i;:::-;5855:33;;;:::i;:::-;;2167:21819;5721:13;;5736:30;;6654:20:30;2167:21819:152;5736:30;-1:-1:-1;;;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;4382:1;2167:21819;;6654:20:30;2167:21819:152;;;;;;-1:-1:-1;;;;;;2167:21819:152;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2167:21819:152;;6425:105:30;-1:-1:-1;;;6496:23:30;;2167:21819:152;;6496:23:30;6429:44;4382:1:152;2167:21819;;-1:-1:-1;;;;;2167:21819:152;6448:25:30;;6429:44;;;2167:21819:152;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;8754:10;8726:20;-1:-1:-1;;;;;;;;;;;2167:21819:152;8726:20;8754:10;;;:::i;2167:21819::-;;;;;;;-1:-1:-1;;2167:21819:152;;;;11218:5;2167:21819;;:::i;:::-;23773:5;;;:::i;:::-;11192:17;-1:-1:-1;;;;;;;;;;;2167:21819:152;11192:17;11218:5;:::i;2167:21819::-;;;;;;;;;;;;;;;6588:33;-1:-1:-1;;;;;;;;;;;2167:21819:152;6588:33;2167:21819;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;8274:28;;;2167:21819;;;-1:-1:-1;;;8264:60:152;;8313:10;2167:21819;8264:60;;2167:21819;;;;;;8264:60;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;8264:60;;;;;;;;;;;2167:21819;8263:61;;8259:121;;8408:24;;;2167:21819;;;-1:-1:-1;;;8394:76:152;;8313:10;2167:21819;8394:76;;2167:21819;8464:4;8264:60;2167:21819;;;;;;;;8394:76;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;8394:76;;;;;;;;;;;2167:21819;8393:77;;8389:137;;1037:50:162;837:15:84;2167:21819:152;819:34:84;837:15;819:34;:::i;:::-;2167:21819:152;8313:10;8536:11;8313:10;8536:11;;1037:50:162;:::i;:::-;1036:51;1032:103;;2167:21819:152;;1032:103:162;-1:-1:-1;;;1110:14:162;;2167:21819:152;;1110:14:162;8389:137:152;-1:-1:-1;;;8493:22:152;;2167:21819;8493:22;;8394:76;;;;2167:21819;8394:76;2167:21819;8394:76;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2167:21819;;;;;;;;;8259:121;-1:-1:-1;;;8347:22:152;;2167:21819;8347:22;;8264:60;;;;2167:21819;8264:60;2167:21819;8264:60;;;;;;;:::i;:::-;;;;2167:21819;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;23773:5;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;;;;11497:8;;;;2376:23:162;23973:47:82;2167:21819:152;11497:8;23973:47:82;:::i;2376:23:162:-;-1:-1:-1;2167:21819:152;;;11536:17;;2167:21819;-1:-1:-1;11536:73:152;;;;2167:21819;11532:138;;;;21805:50:82;;;;:::i;11532:138:152:-;-1:-1:-1;;;11632:27:152;;2167:21819;11632:27;;11536:73;2167:21819;837:15:84;;;11576:33:152;837:15:84;;;819:34;837:15;819:34;:::i;:::-;2167:21819:152;;;;;11576:33;;:::i;:::-;2167:21819;;;11557:52;11536:73;;;;2167:21819;;;;;;;-1:-1:-1;;2167:21819:152;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2167:21819:152;14857:30;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;14843:10;:44;14839:101;;14955:9;2167:21819;;14950:726;14983:3;2167:21819;;;;;14966:15;;;;;2167:21819;;;;;;;;;;;;;;;;;;;;;;;;;8806:28:83;-1:-1:-1;;;;;15080:18:152;2167:21819;;;15080:18;:::i;:::-;2167:21819;-1:-1:-1;2167:21819:152;;;5197:14:83;;;2167:21819:152;;;;;;5197:26:83;;;5101:129;8806:28;15058:41:152;15054:110;;15183:9;15223:3;15198:16;;;;2167:21819;;;15198:16;:::i;:::-;15194:27;;;;;;;15282:19;15198:16;15282;15198;;;2167:21819;;;15282:16;:::i;:::-;:19;;:::i;:::-;8806:28:83;-1:-1:-1;;;;;15343:15:152;;;:::i;:::-;2167:21819;-1:-1:-1;2167:21819:152;;;5197:14:83;;;2167:21819:152;;;;;;5197:26:83;;;5101:129;8806:28;15324:35:152;15320:109;;2167:21819;;;;;;-1:-1:-1;;;;;15472:15:152;2167:21819;15472:15;:::i;:::-;2167:21819;;;;;;;;;;15465:33;;;;;;;;;;;;;15223:3;15572:12;2167:21819;15572:12;;2167:21819;;15586:18;2167:21819;;;15586:18;:::i;:::-;15624:12;;;2167:21819;;;;;;;;15624:12;;;;2167:21819;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;;;;;;;;;;;;;;;;;15516:135;;2167:21819;15516:135;;2167:21819;;;;;;;;;;;15606:16;2167:21819;;;;;;15624:12;;;2167:21819;;;;;;;;;;;;;;;;:::i;:::-;15516:135;;-1:-1:-1;;;;;2167:21819:152;15516:135;;;;;;;2167:21819;15516:135;;;15223:3;;2167:21819;15183:9;;15516:135;;;;;;;;;;;;;:::i;:::-;;;;;15465:33;;;;;;;;;;;;;;;:::i;:::-;;;;;15194:27;;;2167:21819;15194:27;;2167:21819;14955:9;;;15054:110;-1:-1:-1;;;15126:23:152;;2167:21819;15126:23;;14966:15;;2167:21819;;14839:101;-1:-1:-1;;;14910:19:152;;2167:21819;14910:19;;2167:21819;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;23773:5;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;2167:21819:152;19532:11;;;2167:21819;;;-1:-1:-1;;;19522:53:152;;-1:-1:-1;;;;;2167:21819:152;;;;19522:53;;2167:21819;;;;;;;;;;;;;;;19522:53;;;;;;;2167:21819;19522:53;;;2167:21819;19521:54;;19517:109;;2167:21819;;-1:-1:-1;;;19640:35:152;;2167:21819;;;;19640:35;;;;;;;;2167:21819;19640:35;;;2167:21819;19679:25;;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;19640:64;19636:128;;2167:21819;;-1:-1:-1;;;19778:27:152;;2167:21819;;;;19778:27;;;;;;;;2167:21819;19778:27;;;2167:21819;-1:-1:-1;19809:12:152;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;19778:43;19774:100;;2167:21819;;-1:-1:-1;;;19940:30:152;;2167:21819;;;;19940:30;;;;;;;;2167:21819;19940:30;;;2167:21819;;;;;;;;;;;19984:44;;;19980:107;;2167:21819;;-1:-1:-1;;;20135:39:152;;2167:21819;;;;20135:39;;;;;;;;2167:21819;20135:39;;;2167:21819;20134:40;;20130:103;;2167:21819;;-1:-1:-1;;;20285:26:152;;2167:21819;;;;20285:26;;;;;;;;2167:21819;20285:26;;;2167:21819;-1:-1:-1;2167:21819:152;20352:12;;;2167:21819;;;;-1:-1:-1;;;20326:39:152;;;;;2167:21819;20352:12;;-1:-1:-1;;;;;2167:21819:152;;;;;;;20326:39;;;;;;;2167:21819;20326:39;;;2167:21819;-1:-1:-1;20326:60:152;20322:158;;2167:21819;;;;;;;;;;;;;20509:32;;;;;;;;;;;;;2167:21819;-1:-1:-1;;;;;;2167:21819:152;17103:82;;2167:21819;;-1:-1:-1;;;20589:37:152;;2167:21819;;;;20589:37;;;;;;;;;;;;2167:21819;20588:38;;20584:99;;2167:21819;;-1:-1:-1;;;20711:24:152;;2167:21819;;;;20711:24;;;;;;;;;;;;2167:21819;-1:-1:-1;2167:21819:152;;-1:-1:-1;;;20749:23:152;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;20749:23;;;;;;;;;;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;20749:48;20745:111;;2167:21819;;-1:-1:-1;;;20870:36:152;;2167:21819;;;;20870:36;;;;;;;;;;;;2167:21819;20866:98;;;2167:21819;;-1:-1:-1;;;20996:36:152;;2167:21819;;;;20996:36;;;;;;;;;;;;2167:21819;;;;;;;;;;;21046:32;21042:92;;21148:39;2167:21819;21163:24;;;;;2167:21819;;21148:39;;:::i;:::-;2167:21819;21148:60;21144:119;;2167:21819;;-1:-1:-1;;;21277:46:152;;2167:21819;;;;21277:46;;;;;;;;;;;;2167:21819;21326:27;;;;2167:21819;-1:-1:-1;21273:139:152;;2167:21819;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;;;;;;;;;;;;;;;;;21441:58;;2167:21819;21441:58;;2167:21819;;;;;;;;;;;:::i;:::-;21441:58;;;;;;;;;;;;;;2167:21819;-1:-1:-1;;;;;;2167:21819:152;21513:22;;;-1:-1:-1;21605:24:152;;2167:21819;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;:::i;:::-;;;;;;;;;21551:93;;;;;2167:21819;;;;;;;;;;;;;;;;;21551:93;;;2167:21819;21551:93;;2167:21819;;;;;;;;;;;;;;;:::i;:::-;21551:93;;;;;;;;;;;;;21509:299;;;;2167:21819;;-1:-1:-1;;;21894:23:152;;;2167:21819;;;21894:23;;;;;;;;;;;;21509:299;-1:-1:-1;;;;;;2167:21819:152;21894:37;21890:94;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;;;;;;22100:41;;;2167:21819;;;;;;;;;;;22090:71;;;2167:21819;22090:71;;2167:21819;22090:71;;;;;;;;;;;21509:299;22089:72;;22085:135;;2167:21819;;-1:-1:-1;;;22234:39:152;;;2167:21819;;;22234:39;;;;;;;;;;;;21509:299;-1:-1:-1;;;;;;2167:21819:152;22234:49;22230:114;;2167:21819;;-1:-1:-1;;;22358:41:152;;;2167:21819;;;22358:41;;;;;;;;;-1:-1:-1;;;;;22358:41:152;21326:27;22358:41;;;;;21509:299;2167:21819;;;22358:46;22354:118;;11054:17;1037:50:162;837:15:84;;2167:21819:152;819:34:84;837:15;819:34;:::i;:::-;2167:21819:152;908:2:162;2167:21819:152;;;;-1:-1:-1;;;;;;2167:21819:152;835:76:162;;11054:17:152;1037:50:162;:::i;22354:118:152:-;-1:-1:-1;;;22427:34:152;;2167:21819;22427:34;;22358:41;;;;;;-1:-1:-1;22358:41:152;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2167:21819;;;;;;;;;22230:114;-1:-1:-1;;;22306:27:152;;2167:21819;22306:27;;22234:39;;;;;;;;;;;;;;:::i;:::-;;;;;2167:21819;;;;;;;;;22085:135;-1:-1:-1;;;22184:25:152;;2167:21819;22184:25;;22090:71;;;;;;;;;;;;;;:::i;:::-;;;;21890:94;-1:-1:-1;;;21954:19:152;;2167:21819;21954:19;;21894:23;;;;;;;;;;;;;;:::i;:::-;;;;21551:93;;;;;:::i;:::-;2167:21819;;21551:93;;;;21509:299;21677:24;;;;2167:21819;-1:-1:-1;;;;;2167:21819:152;21665:36;;-1:-1:-1;21509:299:152;;-1:-1:-1;21661:147:152;-1:-1:-1;;;21779:18:152;;2167:21819;21779:18;;21441:58;;;;;;;;;;;;;;:::i;:::-;;;;21273:139;-1:-1:-1;;;21376:25:152;;2167:21819;21376:25;;21277:46;;;2167:21819;21277:46;;2167:21819;21277:46;;;;;;2167:21819;21277:46;;;:::i;:::-;;;2167:21819;;;;;21277:46;;;2167:21819;-1:-1:-1;2167:21819:152;;21277:46;;;-1:-1:-1;21277:46:152;;21144:119;-1:-1:-1;;;21231:21:152;;2167:21819;21231:21;;21042:92;-1:-1:-1;;;21101:22:152;;2167:21819;21101:22;;20996:36;;;;2167:21819;20996:36;2167:21819;20996:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;20866:98;-1:-1:-1;;;20929:24:152;;2167:21819;20929:24;;20870:36;;;;2167:21819;20870:36;2167:21819;20870:36;;;;;;;:::i;:::-;;;;20745:111;-1:-1:-1;;;20820:25:152;;2167:21819;20820:25;;20749:23;-1:-1:-1;;;;;20749:23:152;;;;;;2167:21819;20749:23;2167:21819;20749:23;;;;;;;:::i;:::-;;;;;;20711:24;;;;2167:21819;20711:24;2167:21819;20711:24;;;;;;;:::i;:::-;;;;20584:99;-1:-1:-1;;;20649:23:152;;2167:21819;20649:23;;20589:37;;;;2167:21819;20589:37;2167:21819;20589:37;;;;;;;:::i;:::-;;;;17103:82;-1:-1:-1;;;;;;17148:26:152;;2167:21819;17148:26;;20509:32;;;;2167:21819;20509:32;2167:21819;20509:32;;;;;;;:::i;:::-;;;;20322:158;20402:67;;;;;2167:21819;;-1:-1:-1;;;20402:67:152;;2167:21819;;20402:67;;2167:21819;;;-1:-1:-1;;2167:21819:152;;;;;20402:67;2167:21819;;20402:67;;;;;;;;;20322:158;;;;20402:67;;;;;2167:21819;20402:67;;:::i;:::-;2167:21819;;;20402:67;;;2167:21819;;;;;;;;;20326:39;;;2167:21819;20326:39;;2167:21819;20326:39;;;;;;2167:21819;20326:39;;;:::i;:::-;;;2167:21819;;;;;20326:39;;;;;;-1:-1:-1;20326:39:152;;20285:26;;;;2167:21819;20285:26;2167:21819;20285:26;;;;;;;:::i;:::-;;;;20130:103;20197:25;;;2167:21819;20197:25;2167:21819;;20197:25;20135:39;;;;2167:21819;20135:39;2167:21819;20135:39;;;;;;;:::i;:::-;;;;19980:107;20051:25;;;2167:21819;20051:25;2167:21819;;20051:25;19940:30;;;;2167:21819;19940:30;2167:21819;19940:30;;;;;;;:::i;:::-;;;;19774:100;19844:19;;;2167:21819;19844:19;2167:21819;;19844:19;19778:27;;;;2167:21819;19778:27;2167:21819;19778:27;;;;;;;:::i;:::-;;;;19636:128;19727:26;;;2167:21819;19727:26;2167:21819;;19727:26;19640:35;;;;2167:21819;19640:35;2167:21819;19640:35;;;;;;;:::i;:::-;;;;19517:109;19598:17;;;2167:21819;19598:17;2167:21819;;19598:17;19522:53;;;;2167:21819;19522:53;2167:21819;19522:53;;;;;;;:::i;:::-;;;;2167:21819;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;:::o;:::-;;;-1:-1:-1;;;;;2167:21819:152;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;;;-1:-1:-1;2167:21819:152;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;:::o;:::-;2872:1;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;2872:1;2167:21819;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;-1:-1:-1;;2167:21819:152;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;11715:1648::-;;11832:17;;2167:21819;;11967:29;;;:::i;:::-;2167:21819;;;12011:39;;;;12007:92;;11848:1;20369:17;;2167:21819;;;;;12187:368;12207:5;;;;;;12622:26;;;;12261:1;20369:17;;;2167:21819;;;;;;;;12678:25;;;;:::i;:::-;2167:21819;12718:25;12713:188;12773:3;2167:21819;;12745:26;;;;;12796:9;;;;;:::i;:::-;2167:21819;12796:22;12792:66;;12261:1;2167:21819;;;;;;;12261:1;12871:19;12773:3;2167:21819;12718:25;;;12792:66;12838:5;;;;;;;;;12713:188;12261:1;12915:18;;12911:316;;12713:188;13237:87;;;;;11715:1648;:::o;12911:316::-;2167:21819;;13078:20;;;2167:21819;;;;;;;;;;13078:20;;;;;;;:::i;:::-;2167:21819;13068:31;;2167:21819;;;;;13184:27;2167:21819;;13184:27;;:::i;:::-;-1:-1:-1;;2167:21819:152;;;;;;;13131:85;;-1:-1:-1;;;;;2167:21819:152;13168:48;;;;:::i;:::-;2167:21819;;;13131:85;;:::i;:::-;2167:21819;12911:316;;;;;2167:21819;;;;11848:1;2167:21819;;;;;11848:1;2167:21819;12745:26;;;;;;;;;;;;12214:3;12238:13;;;;;;;;;11848:1;12233:312;12268:3;2167:21819;;;;;-1:-1:-1;;2167:21819:152;;;;;;12253:13;;;;;12295:9;;;;:::i;:::-;2167:21819;12261:1;2167:21819;;;;;;;;12307:13;;;12261:1;12307:13;;;;;;:::i;:::-;2167:21819;-1:-1:-1;12291:240:152;;12268:3;;;;2167:21819;12238:13;;;12291:240;12421:91;2167:21819;12374:13;12344:55;12374:13;;;;;:::i;:::-;2167:21819;12389:9;;;;;:::i;:::-;2167:21819;12344:55;;;;:::i;:::-;2167:21819;12344:55;:::i;:::-;2167:21819;;;;;;12469:22;;;;:::i;:::-;2167:21819;;;12421:91;2167:21819;;;;;12493:18;;;;:::i;:::-;2167:21819;;;12421:91;;:::i;:::-;2167:21819;12291:240;;;;;12253:13;;;;;12261:1;12253:13;;;;;;2167:21819;12192:13;;;12007:92;12066:22;;;;;;;:::o;2167:21819::-;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;;;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;;;-1:-1:-1;2167:21819:152;;;;;;;;;;;:::i;:::-;:::o;13784:940::-;;22676:2;;;:::i;:::-;14047:11;-1:-1:-1;;;;;;;;;;;2167:21819:152;14047:11;2167:21819;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2167:21819:152;;;:::i;:::-;;;;;;;-1:-1:-1;14172:9:152;-1:-1:-1;14167:416:152;14183:24;;;;;;14593:125;;;;;;;;;13936:23;13784:940;:::o;14209:3::-;2086:12:162;;;;2139:14;14328:35:152;2086:12:162;;;;;:::i;:::-;2139:14;;;2167:21819:152;;;;;;676:2:162;2167:21819:152;;;698:2:162;2167:21819:152;390:319:162;;2139:14;14328:35:152;;;:::i;:::-;14327:36;14323:83;;14420:39;14495:47;14420:39;;;;;:::i;:::-;-1:-1:-1;;;;;2167:21819:152;;;;14495:47;:::i;:::-;14473:69;;;;:::i;:::-;2167:21819;14571:1;2167:21819;;;;;;;14571:1;14556:16;14209:3;14172:9;2167:21819;14172:9;;;;;14323:83;14383:8;;14571:1;14383:8;;;13369:372;;13591:43;2167:21819;2376:23:162;23973:47:82;13537:20:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;13537:20;2167:21819;;;;;;;23973:47:82;;:::i;13591:43:152:-;13590:44;13586:83;;13687:47;;;:::i;:::-;13369:372;:::o;13586:83::-;13650:8;;-1:-1:-1;13650:8:152;:::o;3405:215:29:-;-1:-1:-1;;;;;2167:21819:152;3489:22:29;;3485:91;;-1:-1:-1;;;;;;;;;;;2167:21819:152;;-1:-1:-1;;;;;;2167:21819:152;;;;;;;-1:-1:-1;;;;;2167:21819:152;3975:40:29;-1:-1:-1;;3975:40:29;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;2167:21819:152;;3509:1:29;3534:31;23803:181:152;2167:21819;;-1:-1:-1;;;23868:61:152;;2818:4;23868:61;;;2167:21819;23918:10;2818:4;;;2167:21819;;2818:4;;2167:21819;;23868:61;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;23868:61;;;;;;;2818:4;23868:61;;;23803:181;23867:62;;23863:115;;23803:181::o;23863:115::-;23952:15;;;2818:4;23952:15;23868:61;2818:4;23952:15;23868:61;;;;2818:4;23868:61;2818:4;23868:61;;;;;;;:::i;:::-;;;;2167:21819;;;;;;;;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;1497:351:162:-;2167:21819:152;;1650:23:162;23973:47:82;-1:-1:-1;;;;;2167:21819:152;;23973:47:82;;:::i;1650:23:162:-;2167:21819:152;;;;;1688:16:162;;;:37;;;;;1497:351;1684:87;;;1781:60;837:15:84;-1:-1:-1;;;819:34:84;837:15;819:34;:::i;:::-;884:2:162;2167:21819:152;;835:52:162;908:2;2167:21819:152;;;;-1:-1:-1;;;;;;2167:21819:152;835:76:162;;1781:60;:::i;:::-;;1497:351::o;1684:87::-;1748:12;;;-1:-1:-1;1748:12:162;;-1:-1:-1;1748:12:162;1688:37;2167:21819:152;;;;1708:17:162;;1688:37;;;1147:344;2167:21819:152;;1299:23:162;23973:47:82;-1:-1:-1;;;;;2167:21819:152;;23973:47:82;;:::i;1299:23:162:-;2167:21819:152;;;;1337:16:162;;:37;;;;1147:344;1333:91;;;1434:50;837:15:84;2167:21819:152;819:34:84;837:15;819:34;:::i;:::-;2167:21819:152;908:2:162;2167:21819:152;;;;-1:-1:-1;;;;;;2167:21819:152;835:76:162;;1434:50;:::i;1333:91::-;1397:16;;;-1:-1:-1;1397:16:162;;-1:-1:-1;1397:16:162;1337:37;2167:21819:152;;;;1357:17:162;1337:37;;;2658:162:29;-1:-1:-1;;;;;;;;;;;2167:21819:152;-1:-1:-1;;;;;2167:21819:152;966:10:34;2717:23:29;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:29;966:10:34;2763:40:29;2167:21819:152;;-1:-1:-1;2763:40:29;23080:242:82;;;5853:18:83;5004:11:82;23080:242;5853:18:83;;:::i;:::-;2167:21819:152;;;;;;;;-1:-1:-1;2167:21819:152;5004:11:82;2167:21819:152;;;-1:-1:-1;2167:21819:152;;;;;;;;;23260:55:82;23080:242;:::o;21364:182::-;7898:23:83;21364:182:82;;2167:21819:152;;;;;;;;-1:-1:-1;2167:21819:152;3096:11:82;;;2167:21819:152;;;-1:-1:-1;2167:21819:152;;7898:23:83;:::i;22703:408:152:-;-1:-1:-1;;;;;;;;;;;2167:21819:152;837:15:84;2167:21819:152;819:34:84;837:15;819:34;:::i;:::-;2167:21819:152;;;;22807:22;;22803:80;;23015:16;2167:21819;;;;;;;;;;;;22914:42;;;:87;:42;;;:87;;23015:16;:::i;:::-;2167:21819;837:15:84;819:34;837:15;819:34;:::i;:::-;2167:21819:152;;;23015:36;;23011:94;;22703:408::o;23011:94::-;22852:20;;;-1:-1:-1;23074:20:152;;-1:-1:-1;23074:20:152;22914:87;;;;23015:16;:::i;16784:208::-;2167:21819;;16903:16;;;;16784:208;;16903:16;:37;;16784:208;16903:82;;;;16896:89;;16784:208;:::o;16903:82::-;2167:21819;;16945:17;;;-1:-1:-1;2167:21819:152;16945:39;;;;16903:82;;16784:208;:::o;16945:39::-;2167:21819;;-1:-1:-1;16966:18:152;;-1:-1:-1;16784:208:152;:::o;16903:37::-;2167:21819;;;-1:-1:-1;16923:17:152;;-1:-1:-1;16903:37:152;;;16222:556;-1:-1:-1;;;;;;;;;;;2167:21819:152;16401:8;;;2167:21819;;16685:25;16720:12;;;2167:21819;;;16222:556;2167:21819;;;;;;;16222:556;16397:21;;;;;;16222:556;;;;;;;;:::o;16420:3::-;2086:12:162;;;;;;;;2139:14;16551:53:152;2086:12:162;;;;;:::i;16551:53:152:-;16550:54;16546:101;;2167:21819;;-1:-1:-1;;;16685:25:152;;2167:21819;;;;;16685:25;;2167:21819;;-1:-1:-1;;;;;2167:21819:152;16685:25;;;;;;;2167:21819;16685:25;;;2167:21819;16685:25;;;16420:3;2167:21819;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;16670:91:152;;16685:25;16670:91;;2167:21819;;;-1:-1:-1;;;;;2167:21819:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16670:91;;-1:-1:-1;;;;;2167:21819:152;16670:91;;;;;;;2167:21819;16670:91;;;16420:3;16661:100;;;2167:21819;16661:100;;:::i;:::-;16420:3;16386:9;2167:21819;16386:9;;;;;;;;;16670:91;;;;;;;;;;;;;;;;:::i;:::-;;;2167:21819;;;;;;16670:91;;;;;;;16685:25;;;;;;;;;;;;;;:::i;:::-;;;;16546:101;16624:8;;2167:21819;16624:8;;;14296:213:80;2167:21819:152;14374:24:80;;14370:103;;2167:21819:152;;14296:213:80;:::o;14370:103::-;14421:41;;;;;14452:2;14421:41;2167:21819:152;;;;14421:41:80;;3330:164:82;;8192:26:83;3330:164:82;2167:21819:152;-1:-1:-1;2167:21819:152;3433:11:82;;;2167:21819:152;;-1:-1:-1;2167:21819:152;;;;8192:26:83;:::i;7082:141:30:-;2167:21819:152;-1:-1:-1;;;;;;;;;;;2167:21819:152;;;;7148:18:30;7144:73;;7082:141::o;7144:73::-;7189:17;;;-1:-1:-1;7189:17:30;;-1:-1:-1;7189:17:30;5626:274:82;;2167:21819:152;-1:-1:-1;2167:21819:152;5743:11:82;;;2167:21819:152;;;-1:-1:-1;2167:21819:152;;5773:10:82;;;;:33;;;;5626:274;5769:103;;;;5881:12;5626:274;:::o;5769:103::-;5829:32;;;-1:-1:-1;5829:32:82;;2167:21819:152;;-1:-1:-1;5829:32:82;5773:33;8806:28:83;;;5197:14;5101:129;-1:-1:-1;2167:21819:152;5197:14:83;2167:21819:152;;;-1:-1:-1;2167:21819:152;;5197:26:83;;5101:129;;8806:28;5787:19:82;5773:33;;;;2167:21819:152;;;;;;;;-1:-1:-1;2167:21819:152;;-1:-1:-1;2167:21819:152;;;-1:-1:-1;2167:21819:152;:::o;3071:1368:83:-;;3266:14;;;2167:21819:152;;;;;;;;;;;3302:13:83;;;3298:1135;3302:13;;;-1:-1:-1;;2167:21819:152;;;;;;;;;-1:-1:-1;;2167:21819:152;;;20369:17;2167:21819;;;;3777:23:83;;;3773:378;;3298:1135;2167:21819:152;;;;;;;;;-1:-1:-1;;2167:21819:152;;;;;;:::i;:::-;;;;20369:17;;2167:21819;;;;;;;;;;;;;;;;;;3266:14:83;4368:11;:::o;2167:21819:152:-;;;;;;;;;;;;3773:378:83;2167:21819:152;3840:22:83;3961:23;3840:22;;;:::i;:::-;2167:21819:152;;;;;;3961:23:83;;;;;:::i;:::-;2167:21819:152;;;;;;;;;;20369:17;;;2167:21819;;;;;;;;;;;;;;;;;;;3773:378:83;;;;;3298:1135;4410:12;;;;2167:21819:152;4410:12:83;:::o;2497:406::-;-1:-1:-1;2167:21819:152;;;5197:14:83;;;2167:21819:152;;;;;;2581:21:83;;2167:21819:152;;;-1:-1:-1;;;2167:21819:152;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:83;2167:21819:152;;;;;;;2832:11:83;:::o","linkReferences":{}},"methodIdentifiers":{"allowedVaultImplVersion()":"c9b0b1e9","changeSlashExecutor(address)":"86c241a1","changeSlashRequester(address)":"6d1064eb","collateral()":"d8dfeb45","disableOperator()":"d99fcd66","disableVault(address)":"3ccce789","distributeOperatorRewards(address,uint256,bytes32)":"729e2f36","distributeStakerRewards(((address,uint256)[],uint256,address),uint48)":"7fbe95b5","enableOperator()":"3d15e74e","enableVault(address)":"936f4330","eraDuration()":"4455a38f","executeSlash((address,uint256)[])":"af962995","getActiveOperatorsStakeAt(uint48)":"b5e5ad12","getOperatorStakeAt(address,uint48)":"d99ddfc7","initialize((address,uint48,uint48,uint48,uint48,uint48,uint48,uint64,uint64,uint256,uint256,address,address,(address,address,address,address,address,address,address,address,address,address)))":"ab122753","makeElectionAt(uint48,uint256)":"6e5c7932","maxAdminFee()":"c639e2d6","maxResolverSetEpochsDelay()":"9e032311","minSlashExecutionDelay()":"373bba1f","minVaultEpochDuration()":"945cf2dd","minVetoDuration()":"461e7a8e","operatorGracePeriod()":"709d06ae","owner()":"8da5cb5b","registerOperator()":"2acde098","registerVault(address,address)":"05c4fdf9","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestSlash((address,uint48,(address,uint256)[])[])":"0a71094c","router()":"f887ea40","subnetwork()":"ceebb69a","symbioticContracts()":"bcf33934","transferOwnership(address)":"f2fde38b","unregisterOperator(address)":"96115bc2","unregisterVault(address)":"2633b70f","vaultGracePeriod()":"79a8b245","vetoSlasherImplType()":"d55a5bdf"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BurnerHookNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelegatorNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"EnumerableMapNonexistentKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncompatibleSlasherType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncompatibleStakerRewardsVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncompatibleVaultVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectTimestamp\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStakerRewardsVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonFactoryStakerRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonFactoryVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotRegisteredOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotRegisteredVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSlashExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSlashRequester\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorDoesNotOptIn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorGracePeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResolverMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResolverSetDelayTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnknownCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedDelegatorHook\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultGracePeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultWrongEpochDuration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VetoDurationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VetoDurationTooShort\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowedVaultImplVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRole\",\"type\":\"address\"}],\"name\":\"changeSlashExecutor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRole\",\"type\":\"address\"}],\"name\":\"changeSlashRequester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"name\":\"disableVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"distributeOperatorRewards\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.StakerRewards[]\",\"name\":\"distribution\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct Gear.StakerRewardsCommitment\",\"name\":\"_commitment\",\"type\":\"tuple\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"}],\"name\":\"distributeStakerRewards\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"name\":\"enableVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eraDuration\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct IMiddleware.SlashIdentifier[]\",\"name\":\"slashes\",\"type\":\"tuple[]\"}],\"name\":\"executeSlash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"ts\",\"type\":\"uint48\"}],\"name\":\"getActiveOperatorsStakeAt\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"activeOperators\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"stakes\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"ts\",\"type\":\"uint48\"}],\"name\":\"getOperatorStakeAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"eraDuration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"minVaultEpochDuration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"operatorGracePeriod\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"vaultGracePeriod\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"minVetoDuration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"minSlashExecutionDelay\",\"type\":\"uint48\"},{\"internalType\":\"uint64\",\"name\":\"allowedVaultImplVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"vetoSlasherImplType\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"maxResolverSetEpochsDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAdminFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"vaultRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"networkRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"middlewareService\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"networkOptIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stakerRewardsFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorRewards\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"roleSlashRequester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"roleSlashExecutor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vetoResolver\",\"type\":\"address\"}],\"internalType\":\"struct Gear.SymbioticContracts\",\"name\":\"symbiotic\",\"type\":\"tuple\"}],\"internalType\":\"struct IMiddleware.InitParams\",\"name\":\"_params\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"ts\",\"type\":\"uint48\"},{\"internalType\":\"uint256\",\"name\":\"maxValidators\",\"type\":\"uint256\"}],\"name\":\"makeElectionAt\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAdminFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxResolverSetEpochsDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minSlashExecutionDelay\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minVaultEpochDuration\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minVetoDuration\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorGracePeriod\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rewards\",\"type\":\"address\"}],\"name\":\"registerVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"ts\",\"type\":\"uint48\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct IMiddleware.VaultSlashData[]\",\"name\":\"vaults\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IMiddleware.SlashData[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"requestSlash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetwork\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbioticContracts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"vaultRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"networkRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"middlewareService\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"networkOptIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stakerRewardsFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorRewards\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"roleSlashRequester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"roleSlashExecutor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vetoResolver\",\"type\":\"address\"}],\"internalType\":\"struct Gear.SymbioticContracts\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"unregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"name\":\"unregisterVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultGracePeriod\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vetoSlasherImplType\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BurnerHookNotSupported()\":[{\"details\":\"Emitted when vault's slasher has a burner hook.\"}],\"DelegatorNotInitialized()\":[{\"details\":\"Emitted in `registerVault` when vault's delegator is not initialized.\"}],\"EnumerableMapNonexistentKey(bytes32)\":[{\"details\":\"Query for a nonexistent map key.\"}],\"IncompatibleSlasherType()\":[{\"details\":\"Emitted in `registerVault` when the vaults' slasher type is not supported.\"}],\"IncompatibleStakerRewardsVersion()\":[{\"details\":\"Emitted when rewards contract has incompatible version.\"}],\"IncompatibleVaultVersion()\":[{\"details\":\"Emitted when the vault has incompatible version.\"}],\"IncorrectTimestamp()\":[{\"details\":\"Emitted when requested timestamp is in the future.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidStakerRewardsVault()\":[{\"details\":\"Emitted in `registerVault` when the vault in rewards contract is not the same as in the function parameter.\"}],\"NonFactoryStakerRewards()\":[{\"details\":\"Emitted when rewards contract was not created by the StakerRewardsFactory.\"}],\"NonFactoryVault()\":[{\"details\":\"Emitted when trying to register the vault from unknown factory.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"NotRegisteredOperator()\":[{\"details\":\"Emitted when `SlashData` contains the operator that is not registered in the Middleware.\"}],\"NotRegisteredVault()\":[{\"details\":\"Emitted when the vault is not registered in the Middleware.\"}],\"NotRouter()\":[{\"details\":\"Emitted when the `msg.sender` is not the Router contract.\"}],\"NotSlashExecutor()\":[{\"details\":\"Emitted when the `msg.sender` has not the role of slash executor.\"}],\"NotSlashRequester()\":[{\"details\":\"Emitted when the `msg.sender` has not the role of slash requester.\"}],\"NotVaultOwner()\":[{\"details\":\"Emitted when `msg.sender` is no the owner.\"}],\"OperatorDoesNotExist()\":[{\"details\":\"Emitted when the operator is not registered in the OperatorRegistry.\"}],\"OperatorDoesNotOptIn()\":[{\"details\":\"Emitted when the operator is not opted-in to the Middleware.\"}],\"OperatorGracePeriodNotPassed()\":[{\"details\":\"Emitted when trying to unregister the operator earlier then `operatorGracePeriod`.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"ResolverMismatch()\":[{\"details\":\"Emitted when slasher's veto resolver is not the same as in the Middleware.\"}],\"ResolverSetDelayTooLong()\":[{\"details\":\"Emitted when the slasher's delay to update the resolver is greater than the one in the Middleware.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SlasherNotInitialized()\":[{\"details\":\"Emitted in `registerVault` when vault's slasher is not initialized.\"}],\"UnknownCollateral()\":[{\"details\":\"Emitted when trying to distribute rewards with collateral that is not equal to the one in the Middleware.\"}],\"UnsupportedBurner()\":[{\"details\":\"Emitted when vault's burner is equal to `address(0)`.\"}],\"UnsupportedDelegatorHook()\":[{\"details\":\"Emitted when the delegator's hook is not equal to `address(0)`.\"}],\"VaultGracePeriodNotPassed()\":[{\"details\":\"Emitted when trying to unregister the vault earlier then `vaultGracePeriod`.\"}],\"VaultWrongEpochDuration()\":[{\"details\":\"Emitted when trying to register the vault with `epochDuration` less than `minVaultEpochDuration`.\"}],\"VetoDurationTooLong()\":[{\"details\":\"Emitted when the vault's slasher has a `vetoDuration` + `minShashExecutionDelay` is greater than vaultEpochDuration.\"}],\"VetoDurationTooShort()\":[{\"details\":\"Emitted when the vault's slasher has a `vetoDuration` less than `minVetoDuration`.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"getOperatorStakeAt(address,uint48)\":{\"returns\":{\"stake\":\"The total stake of the operator in all vaults that was active at the given timestamp.\"}},\"makeElectionAt(uint48,uint256)\":{\"details\":\"This function returns the list of validators that are will be responsible for block production in the next era.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerOperator()\":{\"details\":\"Operator must be registered in operator registry.\"},\"reinitialize()\":{\"custom:oz-upgrades-validate-as-initializer\":\"\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"IncompatibleStakerRewardsVersion()\":[{\"notice\":\"The version of the rewards contract is a index of the whitelisted versions in StakerRewardsFactory.\"}],\"IncompatibleVaultVersion()\":[{\"notice\":\"The version of the vault is a index of the whitelisted versions in VaultFactory.\"}]},\"kind\":\"user\",\"methods\":{\"disableOperator()\":{\"notice\":\"This function can be called only be operator themselves.\"},\"disableVault(address)\":{\"notice\":\"This function can be called only by the vault owner.\"},\"distributeOperatorRewards(address,uint256,bytes32)\":{\"notice\":\"The function can be called only by the Router contract.\"},\"enableOperator()\":{\"notice\":\"This function can be called only be operator themselves.\"},\"enableVault(address)\":{\"notice\":\"This function can be called only by the vault owner.\"},\"registerOperator()\":{\"notice\":\"This function can be called only be operator themselves.\"},\"unregisterOperator(address)\":{\"notice\":\"This function can be called only be operator themselves.\"},\"unregisterVault(address)\":{\"notice\":\"This function can be called only by the vault owner.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Middleware.sol\":\"Middleware\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@symbioticfi/core/=lib/symbiotic-rewards/lib/core/\",\":core/=lib/symbiotic-rewards/lib/core/\",\":ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":script/=script/\",\":src/=src/\",\":symbiotic-core/=lib/symbiotic-core/\",\":symbiotic-rewards/=lib/symbiotic-rewards/\",\":test/=test/\"],\"viaIR\":true},\"sources\":{\"lib/frost-secp256k1-evm/src/FROST.sol\":{\"keccak256\":\"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8\",\"dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA\"]},\"lib/frost-secp256k1-evm/src/utils/Memory.sol\":{\"keccak256\":\"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294\",\"dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb\",\"dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab\",\"dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol\":{\"keccak256\":\"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a\",\"dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol\":{\"keccak256\":\"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf\",\"dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol\":{\"keccak256\":\"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c\",\"dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]},\"lib/openzeppelin-contracts/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"lib/openzeppelin-contracts/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de\",\"dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol\":{\"keccak256\":\"0x5360739db087f427430f8566608e9267df704d96928337a3a3b3e5382925c57f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec939f4b4f68ca36961fd5ea7a417a6a390715173a6999254a2f0a34e9298503\",\"dweb:/ipfs/QmVEE8fRTjXE9jQ5pyKrPSyb9FPPtaWwsqjCdcxaPvAWwW\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"lib/openzeppelin-contracts/contracts/utils/types/Time.sol\":{\"keccak256\":\"0x36776530f012618bc7526ceb28e77b85e582cb12d9b9466a71d4bd6bf952e4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f867d046908497287d8a67643dd5d7e38c4027af4ab0a74ffbe1d6790c383c6\",\"dweb:/ipfs/QmQ7s9gMP1nkwThFmoDifnGgpUMsMe5q5ZrAxGDsNnRGza\"]},\"lib/symbiotic-core/src/contracts/libraries/Subnetwork.sol\":{\"keccak256\":\"0xf5ef5506fd66082b3c2e7f3df37529f5a8efad32ac62e7c8914bd63219190bfe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba031a54ee0d0e9a270c2b9e18437f5668cfeb659cfd5fe0677459d7fcac2a56\",\"dweb:/ipfs/QmReP3H7qQ78tAfgLnJKsNEQNCQfF1X1Get38Ffd4kzq32\"]},\"lib/symbiotic-core/src/interfaces/INetworkRegistry.sol\":{\"keccak256\":\"0x60dcd8ad04980a471f42b6ed57f6b96fbc4091db97b6314cb198914975327938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc207782fcb74a144ecb0c7dc1f427ee6de38710e0966c3cd43040493e11379f\",\"dweb:/ipfs/QmSa8LVejhmRr5T3pWYvUTrDr4fCfohfqyJfRyW2fV4zYy\"]},\"lib/symbiotic-core/src/interfaces/common/IEntity.sol\":{\"keccak256\":\"0x8ef4b63d6da63489778ccd5f8d13ebdd527dd4b62730b2c616df5af7474d2d21\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a8d69576a9219d85c50816a18ad53a4d53cfcb27ed38b8cccc808dc2734b71b\",\"dweb:/ipfs/QmYVN3P4Q4REvBWJ97TbAcaxm3uyB2anV6NSGa6ZtSwcEv\"]},\"lib/symbiotic-core/src/interfaces/common/IMigratableEntity.sol\":{\"keccak256\":\"0x8f5f2809f3afbe8ebfbb365dd7b57b4dd3b6f9943a6187eaf648d45895b8e3c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ffe640537d539e7a4fde70d30d3e4c57f4ba9c2c25c450cea713aae38e8fd5c\",\"dweb:/ipfs/QmSUTGzvdcn1R1KB7tLThMRtESsfPbeXDhhhKWGtntzBds\"]},\"lib/symbiotic-core/src/interfaces/common/IRegistry.sol\":{\"keccak256\":\"0x474c981518bb6ac974ba2a1274c49fd918d3b5acf1f3710e59786c5e3c8fc8bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db439e8880386dd308f8c67e612e9b15067fdffb29d6d0fd89c4edf820f30014\",\"dweb:/ipfs/QmQJuzgU17EZyPMoJNwknPkveK1Nwx1ByhZCBJzgRgcpvK\"]},\"lib/symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol\":{\"keccak256\":\"0x96bb312f032e17accce3f8f80936d99468029d6b37c9ca74acdb4b026a0148ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a66dcb5b7d1a6ef6a363431ea98ebd78bc4fdd3d7a134d9b542dc66e7d025c2\",\"dweb:/ipfs/QmRhTPLd2ZAyRHmJUFUcWKs9b3if49QY17LYZuRqWmghw8\"]},\"lib/symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol\":{\"keccak256\":\"0x347afc7fcf1fbcdb96d66162070ef6c78aed27b3af2c1d5dfb4e511840631783\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d90b8ceb495159e8e4e95d76447719dd166443f67dfabdd942846162071595c\",\"dweb:/ipfs/QmVVuiAWYx92T6vBvNMKZfTvraCf1fa16BsUKkdNs3hdHA\"]},\"lib/symbiotic-core/src/interfaces/service/IOptInService.sol\":{\"keccak256\":\"0x76fb5460a6d87a5705433d4fbeff7253cd75b8bbd0c888b2088f16e86ace146a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://990322019b3d11465f7024bae77ccbf7e2fe5d6fa3c754584778f37d04fa1337\",\"dweb:/ipfs/QmaSNHzcqxTkUCG9a4nqVfLECHLdjdrwAnDi3yDC7tDL24\"]},\"lib/symbiotic-core/src/interfaces/slasher/IBaseSlasher.sol\":{\"keccak256\":\"0x7c82528b445659c313ab77335c407b0b6efe5e79027187bb287f7bc74202b404\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0274c90aa5df1aa6bb470a6aab53992fb14fd7e5472c9430416505b29647d9cf\",\"dweb:/ipfs/QmckbmJLDetPemVzCnnGcKYWAZV2BRFXGDsjiaec8jkHxx\"]},\"lib/symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol\":{\"keccak256\":\"0xdf7edd04a4f36e9aec3a15241dcb6b6315b2e64927b12710c2c410d571fc55e9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c4be6ac339c2ebf230fed65363f036784224095d0cd0f3f2d01d64d6e0da9508\",\"dweb:/ipfs/QmRSMbpfaHExqrzUA8vYZMYZWh6eQW1KX9JKJSLdgronfg\"]},\"lib/symbiotic-core/src/interfaces/vault/IVault.sol\":{\"keccak256\":\"0xffee01d383cd4e1a5530c614bf4360c1ef070c288abec9da1eb531b51bc07235\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04f0046cac285d8ec44ebbb1f79dc94fab4495767190cad8364fbc1fafaadfb9\",\"dweb:/ipfs/QmUawAunwzXfCyShWfhKeThAgKtqe51hmrxvrXvM772M2R\"]},\"lib/symbiotic-core/src/interfaces/vault/IVaultStorage.sol\":{\"keccak256\":\"0x592626f13754194f83047135de19229c49390bd59e34659b1bb38be71d973a22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://06a6a9dfddd05e580b32bebe2cff4f63ba26a653180676d58225dd30d9c89d3e\",\"dweb:/ipfs/QmdgzBeY6Sxo8mGtyBxtv1tM1c2kU6J6zjeRd7vuXm4DU6\"]},\"lib/symbiotic-rewards/src/interfaces/defaultOperatorRewards/IDefaultOperatorRewards.sol\":{\"keccak256\":\"0xb0ba8270d29fa1af4a8024f20072d13bb2eefd3aa10a77dc4650829e738ddb28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6db9eca4620c65a96bc68d3b32d1b92f90558a354be72ac525e689162fda4b06\",\"dweb:/ipfs/QmV5TQpb7b9RMUrMNPw9n1rJX1TRyb573tUoG7rye2W1m4\"]},\"lib/symbiotic-rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol\":{\"keccak256\":\"0xc7ee0e2ffe9f592a6a295d216ab221cbacfcbeccbb06be6098e2b1e46863f6fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e6c09ad742a4836d07a4ec910f582a58991503f0244290c4a6c23fe641749e1a\",\"dweb:/ipfs/QmVR4k1D3ZNQVdJ1vkWpeZ1MAotsH4WTwCuu6Z2X1UJEb7\"]},\"lib/symbiotic-rewards/src/interfaces/stakerRewards/IStakerRewards.sol\":{\"keccak256\":\"0x7516733d48956a5d54243c843b977b402a3b53998b81dc0e9ec89afeabc2a60e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53571bf204dc1ccedc4a5f8154d4ad014c20e66f6196b062e260e14a7d0b6f4a\",\"dweb:/ipfs/QmT6JRgPjvQ5DEiFUMyrGxv6qxU1ZvyKMstdigtEKVpF41\"]},\"src/IMiddleware.sol\":{\"keccak256\":\"0x0875a0367485080460121eb75740dec89415b59f9940a781c6ccf684cccf1a90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abf8522c1c60625ecfab48ca43fec7ce61d787d71cfaa7b5ecff22682ad38570\",\"dweb:/ipfs/QmR7uYiQieqGkFk6tJsMuUFFFZTXN4DEdyTbxSHQE6mw3D\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xa774e6ad8cad715a5dda22c1a328bb06b71e54629352d3e027502d1c80ea0a8e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://403f2ebf24110c6d767ddbd0d4fc1f5f55d94fdc656272cf08b68d95f06d7d1d\",\"dweb:/ipfs/QmPkCszf5rWqQHj99J62cdJyn4qpHsKbqyi36pXaDVEeMY\"]},\"src/Middleware.sol\":{\"keccak256\":\"0x3853cfe3792a642df7243bd35451b3fb0927bb865ac1c5d9c6a9dacec4f5a0e9\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0555ec4766a5cdfd9c2ef3f6fbd371a48f5b465e8f798ebf6c845e268db081d7\",\"dweb:/ipfs/Qme2WABQZXBz2ocKKQRjWtk32FrLvGho2vVvFCkkYWUAR9\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0x4ed891c99c612ab3aa6c740a62fce18921e6e5ea4454acbf85c55e674d4fa77c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a8736bf7c0228ef51626284c1da0b9d1cda396a38d1c3aec5e9bac54627e6f80\",\"dweb:/ipfs/QmdEMYjzn5a7Crm5RXZSZoX4RFZ9GHzAvkuKHu6TtyKvxk\"]},\"src/libraries/MapWithTimeData.sol\":{\"keccak256\":\"0xd5e3813aea7b34db7c31ced5757a812e19b810d40ae5038dc8df2652c5ec2453\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ef4830ca46e5c72cd313f9e9d545f1e16b6a13253d51a2e5513692afb5d91ce0\",\"dweb:/ipfs/QmZyhDZcQ4DMNYd1X8YUBWwepi9f2mZo8Yd54FEUGS3eT3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AlreadyAdded"},{"inputs":[],"type":"error","name":"AlreadyEnabled"},{"inputs":[],"type":"error","name":"BurnerHookNotSupported"},{"inputs":[],"type":"error","name":"DelegatorNotInitialized"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"type":"error","name":"EnumerableMapNonexistentKey"},{"inputs":[],"type":"error","name":"IncompatibleSlasherType"},{"inputs":[],"type":"error","name":"IncompatibleStakerRewardsVersion"},{"inputs":[],"type":"error","name":"IncompatibleVaultVersion"},{"inputs":[],"type":"error","name":"IncorrectTimestamp"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidStakerRewardsVault"},{"inputs":[],"type":"error","name":"NonFactoryStakerRewards"},{"inputs":[],"type":"error","name":"NonFactoryVault"},{"inputs":[],"type":"error","name":"NotEnabled"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"NotRegisteredOperator"},{"inputs":[],"type":"error","name":"NotRegisteredVault"},{"inputs":[],"type":"error","name":"NotRouter"},{"inputs":[],"type":"error","name":"NotSlashExecutor"},{"inputs":[],"type":"error","name":"NotSlashRequester"},{"inputs":[],"type":"error","name":"NotVaultOwner"},{"inputs":[],"type":"error","name":"OperatorDoesNotExist"},{"inputs":[],"type":"error","name":"OperatorDoesNotOptIn"},{"inputs":[],"type":"error","name":"OperatorGracePeriodNotPassed"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"ResolverMismatch"},{"inputs":[],"type":"error","name":"ResolverSetDelayTooLong"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"type":"error","name":"SafeCastOverflowedUintDowncast"},{"inputs":[],"type":"error","name":"SlasherNotInitialized"},{"inputs":[],"type":"error","name":"UnknownCollateral"},{"inputs":[],"type":"error","name":"UnsupportedBurner"},{"inputs":[],"type":"error","name":"UnsupportedDelegatorHook"},{"inputs":[],"type":"error","name":"VaultGracePeriodNotPassed"},{"inputs":[],"type":"error","name":"VaultWrongEpochDuration"},{"inputs":[],"type":"error","name":"VetoDurationTooLong"},{"inputs":[],"type":"error","name":"VetoDurationTooShort"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"allowedVaultImplVersion","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"address","name":"newRole","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"changeSlashExecutor"},{"inputs":[{"internalType":"address","name":"newRole","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"changeSlashRequester"},{"inputs":[],"stateMutability":"view","type":"function","name":"collateral","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"disableOperator"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"disableVault"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"distributeOperatorRewards","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct Gear.StakerRewardsCommitment","name":"_commitment","type":"tuple","components":[{"internalType":"struct Gear.StakerRewards[]","name":"distribution","type":"tuple[]","components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}]},{"internalType":"uint48","name":"timestamp","type":"uint48"}],"stateMutability":"nonpayable","type":"function","name":"distributeStakerRewards","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"enableOperator"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"enableVault"},{"inputs":[],"stateMutability":"view","type":"function","name":"eraDuration","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[{"internalType":"struct IMiddleware.SlashIdentifier[]","name":"slashes","type":"tuple[]","components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"executeSlash"},{"inputs":[{"internalType":"uint48","name":"ts","type":"uint48"}],"stateMutability":"view","type":"function","name":"getActiveOperatorsStakeAt","outputs":[{"internalType":"address[]","name":"activeOperators","type":"address[]"},{"internalType":"uint256[]","name":"stakes","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint48","name":"ts","type":"uint48"}],"stateMutability":"view","type":"function","name":"getOperatorStakeAt","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"struct IMiddleware.InitParams","name":"_params","type":"tuple","components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint48","name":"eraDuration","type":"uint48"},{"internalType":"uint48","name":"minVaultEpochDuration","type":"uint48"},{"internalType":"uint48","name":"operatorGracePeriod","type":"uint48"},{"internalType":"uint48","name":"vaultGracePeriod","type":"uint48"},{"internalType":"uint48","name":"minVetoDuration","type":"uint48"},{"internalType":"uint48","name":"minSlashExecutionDelay","type":"uint48"},{"internalType":"uint64","name":"allowedVaultImplVersion","type":"uint64"},{"internalType":"uint64","name":"vetoSlasherImplType","type":"uint64"},{"internalType":"uint256","name":"maxResolverSetEpochsDelay","type":"uint256"},{"internalType":"uint256","name":"maxAdminFee","type":"uint256"},{"internalType":"address","name":"collateral","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"struct Gear.SymbioticContracts","name":"symbiotic","type":"tuple","components":[{"internalType":"address","name":"vaultRegistry","type":"address"},{"internalType":"address","name":"operatorRegistry","type":"address"},{"internalType":"address","name":"networkRegistry","type":"address"},{"internalType":"address","name":"middlewareService","type":"address"},{"internalType":"address","name":"networkOptIn","type":"address"},{"internalType":"address","name":"stakerRewardsFactory","type":"address"},{"internalType":"address","name":"operatorRewards","type":"address"},{"internalType":"address","name":"roleSlashRequester","type":"address"},{"internalType":"address","name":"roleSlashExecutor","type":"address"},{"internalType":"address","name":"vetoResolver","type":"address"}]}]}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint48","name":"ts","type":"uint48"},{"internalType":"uint256","name":"maxValidators","type":"uint256"}],"stateMutability":"view","type":"function","name":"makeElectionAt","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxAdminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxResolverSetEpochsDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minSlashExecutionDelay","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minVaultEpochDuration","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minVetoDuration","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"operatorGracePeriod","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"registerOperator"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_rewards","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerVault"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"struct IMiddleware.SlashData[]","name":"data","type":"tuple[]","components":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint48","name":"ts","type":"uint48"},{"internalType":"struct IMiddleware.VaultSlashData[]","name":"vaults","type":"tuple[]","components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"requestSlash"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"subnetwork","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbioticContracts","outputs":[{"internalType":"struct Gear.SymbioticContracts","name":"","type":"tuple","components":[{"internalType":"address","name":"vaultRegistry","type":"address"},{"internalType":"address","name":"operatorRegistry","type":"address"},{"internalType":"address","name":"networkRegistry","type":"address"},{"internalType":"address","name":"middlewareService","type":"address"},{"internalType":"address","name":"networkOptIn","type":"address"},{"internalType":"address","name":"stakerRewardsFactory","type":"address"},{"internalType":"address","name":"operatorRewards","type":"address"},{"internalType":"address","name":"roleSlashRequester","type":"address"},{"internalType":"address","name":"roleSlashExecutor","type":"address"},{"internalType":"address","name":"vetoResolver","type":"address"}]}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"unregisterOperator"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"unregisterVault"},{"inputs":[],"stateMutability":"view","type":"function","name":"vaultGracePeriod","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"vetoSlasherImplType","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"getOperatorStakeAt(address,uint48)":{"returns":{"stake":"The total stake of the operator in all vaults that was active at the given timestamp."}},"makeElectionAt(uint48,uint256)":{"details":"This function returns the list of validators that are will be responsible for block production in the next era."},"owner()":{"details":"Returns the address of the current owner."},"registerOperator()":{"details":"Operator must be registered in operator registry."},"reinitialize()":{"custom:oz-upgrades-validate-as-initializer":""},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"disableOperator()":{"notice":"This function can be called only be operator themselves."},"disableVault(address)":{"notice":"This function can be called only by the vault owner."},"distributeOperatorRewards(address,uint256,bytes32)":{"notice":"The function can be called only by the Router contract."},"enableOperator()":{"notice":"This function can be called only be operator themselves."},"enableVault(address)":{"notice":"This function can be called only by the vault owner."},"registerOperator()":{"notice":"This function can be called only be operator themselves."},"unregisterOperator(address)":{"notice":"This function can be called only be operator themselves."},"unregisterVault(address)":{"notice":"This function can be called only by the vault owner."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@symbioticfi/core/=lib/symbiotic-rewards/lib/core/","core/=lib/symbiotic-rewards/lib/core/","ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","script/=script/","src/=src/","symbiotic-core/=lib/symbiotic-core/","symbiotic-rewards/=lib/symbiotic-rewards/","test/=test/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/Middleware.sol":"Middleware"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"lib/frost-secp256k1-evm/src/FROST.sol":{"keccak256":"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f","urls":["bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8","dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/Memory.sol":{"keccak256":"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859","urls":["bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294","dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol":{"keccak256":"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56","urls":["bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb","dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol":{"keccak256":"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc","urls":["bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab","dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol":{"keccak256":"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b","urls":["bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a","dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol":{"keccak256":"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a","urls":["bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf","dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol":{"keccak256":"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba","urls":["bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c","dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c","urls":["bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d","dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Arrays.sol":{"keccak256":"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e","urls":["bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d","dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Comparators.sol":{"keccak256":"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58","urls":["bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd","dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26","urls":["bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2","dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4","urls":["bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e","dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946","urls":["bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de","dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631","urls":["bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59","dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol":{"keccak256":"0x5360739db087f427430f8566608e9267df704d96928337a3a3b3e5382925c57f","urls":["bzz-raw://ec939f4b4f68ca36961fd5ea7a417a6a390715173a6999254a2f0a34e9298503","dweb:/ipfs/QmVEE8fRTjXE9jQ5pyKrPSyb9FPPtaWwsqjCdcxaPvAWwW"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77","urls":["bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b","dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/types/Time.sol":{"keccak256":"0x36776530f012618bc7526ceb28e77b85e582cb12d9b9466a71d4bd6bf952e4cc","urls":["bzz-raw://9f867d046908497287d8a67643dd5d7e38c4027af4ab0a74ffbe1d6790c383c6","dweb:/ipfs/QmQ7s9gMP1nkwThFmoDifnGgpUMsMe5q5ZrAxGDsNnRGza"],"license":"MIT"},"lib/symbiotic-core/src/contracts/libraries/Subnetwork.sol":{"keccak256":"0xf5ef5506fd66082b3c2e7f3df37529f5a8efad32ac62e7c8914bd63219190bfe","urls":["bzz-raw://ba031a54ee0d0e9a270c2b9e18437f5668cfeb659cfd5fe0677459d7fcac2a56","dweb:/ipfs/QmReP3H7qQ78tAfgLnJKsNEQNCQfF1X1Get38Ffd4kzq32"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/INetworkRegistry.sol":{"keccak256":"0x60dcd8ad04980a471f42b6ed57f6b96fbc4091db97b6314cb198914975327938","urls":["bzz-raw://fc207782fcb74a144ecb0c7dc1f427ee6de38710e0966c3cd43040493e11379f","dweb:/ipfs/QmSa8LVejhmRr5T3pWYvUTrDr4fCfohfqyJfRyW2fV4zYy"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/common/IEntity.sol":{"keccak256":"0x8ef4b63d6da63489778ccd5f8d13ebdd527dd4b62730b2c616df5af7474d2d21","urls":["bzz-raw://5a8d69576a9219d85c50816a18ad53a4d53cfcb27ed38b8cccc808dc2734b71b","dweb:/ipfs/QmYVN3P4Q4REvBWJ97TbAcaxm3uyB2anV6NSGa6ZtSwcEv"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/common/IMigratableEntity.sol":{"keccak256":"0x8f5f2809f3afbe8ebfbb365dd7b57b4dd3b6f9943a6187eaf648d45895b8e3c4","urls":["bzz-raw://0ffe640537d539e7a4fde70d30d3e4c57f4ba9c2c25c450cea713aae38e8fd5c","dweb:/ipfs/QmSUTGzvdcn1R1KB7tLThMRtESsfPbeXDhhhKWGtntzBds"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/common/IRegistry.sol":{"keccak256":"0x474c981518bb6ac974ba2a1274c49fd918d3b5acf1f3710e59786c5e3c8fc8bb","urls":["bzz-raw://db439e8880386dd308f8c67e612e9b15067fdffb29d6d0fd89c4edf820f30014","dweb:/ipfs/QmQJuzgU17EZyPMoJNwknPkveK1Nwx1ByhZCBJzgRgcpvK"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol":{"keccak256":"0x96bb312f032e17accce3f8f80936d99468029d6b37c9ca74acdb4b026a0148ee","urls":["bzz-raw://2a66dcb5b7d1a6ef6a363431ea98ebd78bc4fdd3d7a134d9b542dc66e7d025c2","dweb:/ipfs/QmRhTPLd2ZAyRHmJUFUcWKs9b3if49QY17LYZuRqWmghw8"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol":{"keccak256":"0x347afc7fcf1fbcdb96d66162070ef6c78aed27b3af2c1d5dfb4e511840631783","urls":["bzz-raw://2d90b8ceb495159e8e4e95d76447719dd166443f67dfabdd942846162071595c","dweb:/ipfs/QmVVuiAWYx92T6vBvNMKZfTvraCf1fa16BsUKkdNs3hdHA"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/service/IOptInService.sol":{"keccak256":"0x76fb5460a6d87a5705433d4fbeff7253cd75b8bbd0c888b2088f16e86ace146a","urls":["bzz-raw://990322019b3d11465f7024bae77ccbf7e2fe5d6fa3c754584778f37d04fa1337","dweb:/ipfs/QmaSNHzcqxTkUCG9a4nqVfLECHLdjdrwAnDi3yDC7tDL24"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/slasher/IBaseSlasher.sol":{"keccak256":"0x7c82528b445659c313ab77335c407b0b6efe5e79027187bb287f7bc74202b404","urls":["bzz-raw://0274c90aa5df1aa6bb470a6aab53992fb14fd7e5472c9430416505b29647d9cf","dweb:/ipfs/QmckbmJLDetPemVzCnnGcKYWAZV2BRFXGDsjiaec8jkHxx"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol":{"keccak256":"0xdf7edd04a4f36e9aec3a15241dcb6b6315b2e64927b12710c2c410d571fc55e9","urls":["bzz-raw://c4be6ac339c2ebf230fed65363f036784224095d0cd0f3f2d01d64d6e0da9508","dweb:/ipfs/QmRSMbpfaHExqrzUA8vYZMYZWh6eQW1KX9JKJSLdgronfg"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/vault/IVault.sol":{"keccak256":"0xffee01d383cd4e1a5530c614bf4360c1ef070c288abec9da1eb531b51bc07235","urls":["bzz-raw://04f0046cac285d8ec44ebbb1f79dc94fab4495767190cad8364fbc1fafaadfb9","dweb:/ipfs/QmUawAunwzXfCyShWfhKeThAgKtqe51hmrxvrXvM772M2R"],"license":"MIT"},"lib/symbiotic-core/src/interfaces/vault/IVaultStorage.sol":{"keccak256":"0x592626f13754194f83047135de19229c49390bd59e34659b1bb38be71d973a22","urls":["bzz-raw://06a6a9dfddd05e580b32bebe2cff4f63ba26a653180676d58225dd30d9c89d3e","dweb:/ipfs/QmdgzBeY6Sxo8mGtyBxtv1tM1c2kU6J6zjeRd7vuXm4DU6"],"license":"MIT"},"lib/symbiotic-rewards/src/interfaces/defaultOperatorRewards/IDefaultOperatorRewards.sol":{"keccak256":"0xb0ba8270d29fa1af4a8024f20072d13bb2eefd3aa10a77dc4650829e738ddb28","urls":["bzz-raw://6db9eca4620c65a96bc68d3b32d1b92f90558a354be72ac525e689162fda4b06","dweb:/ipfs/QmV5TQpb7b9RMUrMNPw9n1rJX1TRyb573tUoG7rye2W1m4"],"license":"MIT"},"lib/symbiotic-rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol":{"keccak256":"0xc7ee0e2ffe9f592a6a295d216ab221cbacfcbeccbb06be6098e2b1e46863f6fc","urls":["bzz-raw://e6c09ad742a4836d07a4ec910f582a58991503f0244290c4a6c23fe641749e1a","dweb:/ipfs/QmVR4k1D3ZNQVdJ1vkWpeZ1MAotsH4WTwCuu6Z2X1UJEb7"],"license":"MIT"},"lib/symbiotic-rewards/src/interfaces/stakerRewards/IStakerRewards.sol":{"keccak256":"0x7516733d48956a5d54243c843b977b402a3b53998b81dc0e9ec89afeabc2a60e","urls":["bzz-raw://53571bf204dc1ccedc4a5f8154d4ad014c20e66f6196b062e260e14a7d0b6f4a","dweb:/ipfs/QmT6JRgPjvQ5DEiFUMyrGxv6qxU1ZvyKMstdigtEKVpF41"],"license":"MIT"},"src/IMiddleware.sol":{"keccak256":"0x0875a0367485080460121eb75740dec89415b59f9940a781c6ccf684cccf1a90","urls":["bzz-raw://abf8522c1c60625ecfab48ca43fec7ce61d787d71cfaa7b5ecff22682ad38570","dweb:/ipfs/QmR7uYiQieqGkFk6tJsMuUFFFZTXN4DEdyTbxSHQE6mw3D"],"license":"MIT"},"src/IRouter.sol":{"keccak256":"0xa774e6ad8cad715a5dda22c1a328bb06b71e54629352d3e027502d1c80ea0a8e","urls":["bzz-raw://403f2ebf24110c6d767ddbd0d4fc1f5f55d94fdc656272cf08b68d95f06d7d1d","dweb:/ipfs/QmPkCszf5rWqQHj99J62cdJyn4qpHsKbqyi36pXaDVEeMY"],"license":"UNLICENSED"},"src/Middleware.sol":{"keccak256":"0x3853cfe3792a642df7243bd35451b3fb0927bb865ac1c5d9c6a9dacec4f5a0e9","urls":["bzz-raw://0555ec4766a5cdfd9c2ef3f6fbd371a48f5b465e8f798ebf6c845e268db081d7","dweb:/ipfs/Qme2WABQZXBz2ocKKQRjWtk32FrLvGho2vVvFCkkYWUAR9"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0x4ed891c99c612ab3aa6c740a62fce18921e6e5ea4454acbf85c55e674d4fa77c","urls":["bzz-raw://a8736bf7c0228ef51626284c1da0b9d1cda396a38d1c3aec5e9bac54627e6f80","dweb:/ipfs/QmdEMYjzn5a7Crm5RXZSZoX4RFZ9GHzAvkuKHu6TtyKvxk"],"license":"UNLICENSED"},"src/libraries/MapWithTimeData.sol":{"keccak256":"0xd5e3813aea7b34db7c31ced5757a812e19b810d40ae5038dc8df2652c5ec2453","urls":["bzz-raw://ef4830ca46e5c72cd313f9e9d545f1e16b6a13253d51a2e5513692afb5d91ce0","dweb:/ipfs/QmZyhDZcQ4DMNYd1X8YUBWwepi9f2mZo8Yd54FEUGS3eT3"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Middleware.sol","id":75053,"exportedSymbols":{"EnumerableMap":[57294],"Gear":[80917],"IAccessControl":[43466],"IBaseDelegator":[64257],"IDefaultOperatorRewards":[70549],"IDefaultStakerRewards":[70743],"IEntity":[63851],"IMiddleware":[72281],"IMigratableEntity":[63959],"INetworkMiddlewareService":[64745],"INetworkRegistry":[63749],"IOptInService":[64871],"IRegistry":[64083],"IVault":[65607],"IVetoSlasher":[65269],"MapWithTimeData":[81199],"Middleware":[75052],"OwnableUpgradeable":[41409],"ReentrancyGuardTransientUpgradeable":[42870],"StorageSlot":[47840],"Subnetwork":[63729],"Time":[59094]},"nodeType":"SourceUnit","src":"39:23948:152","nodes":[{"id":72782,"nodeType":"PragmaDirective","src":"39:24:152","nodes":[],"literals":["solidity","^","0.8",".28"]},{"id":72784,"nodeType":"ImportDirective","src":"65:86:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableMap.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":57295,"symbolAliases":[{"foreign":{"id":72783,"name":"EnumerableMap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57294,"src":"73:13:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72786,"nodeType":"ImportDirective","src":"152:66:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/types/Time.sol","file":"@openzeppelin/contracts/utils/types/Time.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":59095,"symbolAliases":[{"foreign":{"id":72785,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"160:4:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72788,"nodeType":"ImportDirective","src":"219:42:152","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":80918,"symbolAliases":[{"foreign":{"id":72787,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"227:4:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72790,"nodeType":"ImportDirective","src":"263:46:152","nodes":[],"absolutePath":"src/IMiddleware.sol","file":"./IMiddleware.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":72282,"symbolAliases":[{"foreign":{"id":72789,"name":"IMiddleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72281,"src":"271:11:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72792,"nodeType":"ImportDirective","src":"310:81:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/contracts/libraries/Subnetwork.sol","file":"symbiotic-core/src/contracts/libraries/Subnetwork.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":63730,"symbolAliases":[{"foreign":{"id":72791,"name":"Subnetwork","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63729,"src":"318:10:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72794,"nodeType":"ImportDirective","src":"392:70:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/vault/IVault.sol","file":"symbiotic-core/src/interfaces/vault/IVault.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":65608,"symbolAliases":[{"foreign":{"id":72793,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"400:6:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72796,"nodeType":"ImportDirective","src":"463:77:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/common/IRegistry.sol","file":"symbiotic-core/src/interfaces/common/IRegistry.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":64084,"symbolAliases":[{"foreign":{"id":72795,"name":"IRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64083,"src":"471:9:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72798,"nodeType":"ImportDirective","src":"541:73:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/common/IEntity.sol","file":"symbiotic-core/src/interfaces/common/IEntity.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":63852,"symbolAliases":[{"foreign":{"id":72797,"name":"IEntity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63851,"src":"549:7:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72800,"nodeType":"ImportDirective","src":"615:90:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol","file":"symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":64258,"symbolAliases":[{"foreign":{"id":72799,"name":"IBaseDelegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64257,"src":"623:14:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72802,"nodeType":"ImportDirective","src":"706:84:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/INetworkRegistry.sol","file":"symbiotic-core/src/interfaces/INetworkRegistry.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":63750,"symbolAliases":[{"foreign":{"id":72801,"name":"INetworkRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63749,"src":"714:16:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72804,"nodeType":"ImportDirective","src":"791:86:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/service/IOptInService.sol","file":"symbiotic-core/src/interfaces/service/IOptInService.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":64872,"symbolAliases":[{"foreign":{"id":72803,"name":"IOptInService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64871,"src":"799:13:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72806,"nodeType":"ImportDirective","src":"878:110:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol","file":"symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":64746,"symbolAliases":[{"foreign":{"id":72805,"name":"INetworkMiddlewareService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64745,"src":"886:25:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72808,"nodeType":"ImportDirective","src":"989:84:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol","file":"symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":65270,"symbolAliases":[{"foreign":{"id":72807,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"997:12:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72810,"nodeType":"ImportDirective","src":"1074:93:152","nodes":[],"absolutePath":"lib/symbiotic-core/src/interfaces/common/IMigratableEntity.sol","file":"symbiotic-core/src/interfaces/common/IMigratableEntity.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":63960,"symbolAliases":[{"foreign":{"id":72809,"name":"IMigratableEntity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63959,"src":"1082:17:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72812,"nodeType":"ImportDirective","src":"1168:130:152","nodes":[],"absolutePath":"lib/symbiotic-rewards/src/interfaces/defaultOperatorRewards/IDefaultOperatorRewards.sol","file":"symbiotic-rewards/src/interfaces/defaultOperatorRewards/IDefaultOperatorRewards.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":70550,"symbolAliases":[{"foreign":{"id":72811,"name":"IDefaultOperatorRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70549,"src":"1181:23:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72814,"nodeType":"ImportDirective","src":"1299:118:152","nodes":[],"absolutePath":"lib/symbiotic-rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol","file":"symbiotic-rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":70744,"symbolAliases":[{"foreign":{"id":72813,"name":"IDefaultStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70743,"src":"1307:21:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72816,"nodeType":"ImportDirective","src":"1419:64:152","nodes":[],"absolutePath":"src/libraries/MapWithTimeData.sol","file":"./libraries/MapWithTimeData.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":81200,"symbolAliases":[{"foreign":{"id":72815,"name":"MapWithTimeData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81199,"src":"1427:15:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72818,"nodeType":"ImportDirective","src":"1484:81:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol","file":"@openzeppelin/contracts/access/IAccessControl.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":43467,"symbolAliases":[{"foreign":{"id":72817,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43466,"src":"1492:14:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72820,"nodeType":"ImportDirective","src":"1566:101:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":41410,"symbolAliases":[{"foreign":{"id":72819,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41409,"src":"1574:18:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72822,"nodeType":"ImportDirective","src":"1668:140:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardTransientUpgradeable.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":42871,"symbolAliases":[{"foreign":{"id":72821,"name":"ReentrancyGuardTransientUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42870,"src":"1681:35:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":72824,"nodeType":"ImportDirective","src":"1809:74:152","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":75053,"sourceUnit":47841,"symbolAliases":[{"foreign":{"id":72823,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"1817:11:152","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75052,"nodeType":"ContractDefinition","src":"2167:21819:152","nodes":[{"id":72834,"nodeType":"UsingForDirective","src":"2265:55:152","nodes":[],"global":false,"libraryName":{"id":72831,"name":"EnumerableMap","nameLocations":["2271:13:152"],"nodeType":"IdentifierPath","referencedDeclaration":57294,"src":"2271:13:152"},"typeName":{"id":72833,"nodeType":"UserDefinedTypeName","pathNode":{"id":72832,"name":"EnumerableMap.AddressToUintMap","nameLocations":["2289:13:152","2303:16:152"],"nodeType":"IdentifierPath","referencedDeclaration":55618,"src":"2289:30:152"},"referencedDeclaration":55618,"src":"2289:30:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage_ptr","typeString":"struct EnumerableMap.AddressToUintMap"}}},{"id":72838,"nodeType":"UsingForDirective","src":"2325:57:152","nodes":[],"global":false,"libraryName":{"id":72835,"name":"MapWithTimeData","nameLocations":["2331:15:152"],"nodeType":"IdentifierPath","referencedDeclaration":81199,"src":"2331:15:152"},"typeName":{"id":72837,"nodeType":"UserDefinedTypeName","pathNode":{"id":72836,"name":"EnumerableMap.AddressToUintMap","nameLocations":["2351:13:152","2365:16:152"],"nodeType":"IdentifierPath","referencedDeclaration":55618,"src":"2351:30:152"},"referencedDeclaration":55618,"src":"2351:30:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage_ptr","typeString":"struct EnumerableMap.AddressToUintMap"}}},{"id":72842,"nodeType":"UsingForDirective","src":"2388:58:152","nodes":[],"global":false,"libraryName":{"id":72839,"name":"EnumerableMap","nameLocations":["2394:13:152"],"nodeType":"IdentifierPath","referencedDeclaration":57294,"src":"2394:13:152"},"typeName":{"id":72841,"nodeType":"UserDefinedTypeName","pathNode":{"id":72840,"name":"EnumerableMap.AddressToAddressMap","nameLocations":["2412:13:152","2426:19:152"],"nodeType":"IdentifierPath","referencedDeclaration":55913,"src":"2412:33:152"},"referencedDeclaration":55913,"src":"2412:33:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToAddressMap_$55913_storage_ptr","typeString":"struct EnumerableMap.AddressToAddressMap"}}},{"id":72846,"nodeType":"UsingForDirective","src":"2451:60:152","nodes":[],"global":false,"libraryName":{"id":72843,"name":"MapWithTimeData","nameLocations":["2457:15:152"],"nodeType":"IdentifierPath","referencedDeclaration":81199,"src":"2457:15:152"},"typeName":{"id":72845,"nodeType":"UserDefinedTypeName","pathNode":{"id":72844,"name":"EnumerableMap.AddressToAddressMap","nameLocations":["2477:13:152","2491:19:152"],"nodeType":"IdentifierPath","referencedDeclaration":55913,"src":"2477:33:152"},"referencedDeclaration":55913,"src":"2477:33:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToAddressMap_$55913_storage_ptr","typeString":"struct EnumerableMap.AddressToAddressMap"}}},{"id":72849,"nodeType":"UsingForDirective","src":"2517:29:152","nodes":[],"global":false,"libraryName":{"id":72847,"name":"Subnetwork","nameLocations":["2523:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":63729,"src":"2523:10:152"},"typeName":{"id":72848,"name":"address","nodeType":"ElementaryTypeName","src":"2538:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":72852,"nodeType":"VariableDeclaration","src":"2659:106:152","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"2684:12:152","scope":75052,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":72850,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2659:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307830623863353661663663633961643430316164323235626665393664663737663330343962613137656164616331636239356565383964663165363964313030","id":72851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2699:66:152","typeDescriptions":{"typeIdentifier":"t_rational_5223398203118087324979291777783578297303922957705888423515209926851254931712_by_1","typeString":"int_const 5223...(68 digits omitted)...1712"},"value":"0x0b8c56af6cc9ad401ad225bfe96df77f3049ba17eadac1cb95ee89df1e69d100"},"visibility":"private"},{"id":72855,"nodeType":"VariableDeclaration","src":"2772:50:152","nodes":[],"constant":true,"mutability":"constant","name":"DEFAULT_ADMIN_ROLE","nameLocation":"2797:18:152","scope":75052,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":72853,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2772:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"30783030","id":72854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2818:4:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"private"},{"id":72858,"nodeType":"VariableDeclaration","src":"2828:45:152","nodes":[],"constant":true,"mutability":"constant","name":"NETWORK_IDENTIFIER","nameLocation":"2851:18:152","scope":75052,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":72856,"name":"uint8","nodeType":"ElementaryTypeName","src":"2828:5:152","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30","id":72857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2872:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"private"},{"id":72866,"nodeType":"FunctionDefinition","src":"2933:53:152","nodes":[],"body":{"id":72865,"nodeType":"Block","src":"2947:39:152","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":72862,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41631,"src":"2957:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":72863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2957:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72864,"nodeType":"ExpressionStatement","src":"2957:22:152"}]},"documentation":{"id":72859,"nodeType":"StructuredDocumentation","src":"2880:48:152","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":72860,"nodeType":"ParameterList","parameters":[],"src":"2944:2:152"},"returnParameters":{"id":72861,"nodeType":"ParameterList","parameters":[],"src":"2947:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":73020,"nodeType":"FunctionDefinition","src":"2992:1277:152","nodes":[],"body":{"id":73019,"nodeType":"Block","src":"3060:1209:152","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":72875,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3085:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3093:5:152","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":72012,"src":"3085:13:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":72874,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"3070:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":72877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3070:29:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72878,"nodeType":"ExpressionStatement","src":"3070:29:152"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":72879,"name":"__ReentrancyGuardTransient_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42819,"src":"3109:31:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":72880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3109:33:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72881,"nodeType":"ExpressionStatement","src":"3109:33:152"},{"expression":{"arguments":[{"hexValue":"6d6964646c65776172652e73746f726167652e4d6964646c65776172655631","id":72883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3169:33:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_02a5c5f8d11256fd69f3d6cf76a378a9929132c88934a20e220465858cdca742","typeString":"literal_string \"middleware.storage.MiddlewareV1\""},"value":"middleware.storage.MiddlewareV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_02a5c5f8d11256fd69f3d6cf76a378a9929132c88934a20e220465858cdca742","typeString":"literal_string \"middleware.storage.MiddlewareV1\""}],"id":72882,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75021,"src":"3153:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":72884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3153:50:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72885,"nodeType":"ExpressionStatement","src":"3153:50:152"},{"assignments":[72888],"declarations":[{"constant":false,"id":72888,"mutability":"mutable","name":"$","nameLocation":"3229:1:152","nodeType":"VariableDeclaration","scope":73019,"src":"3213:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":72887,"nodeType":"UserDefinedTypeName","pathNode":{"id":72886,"name":"Storage","nameLocations":["3213:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"3213:7:152"},"referencedDeclaration":72078,"src":"3213:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":72891,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":72889,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"3233:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":72890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3233:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3213:30:152"},{"expression":{"id":72897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72892,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3254:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3256:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"3254:13:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72895,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3270:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3278:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72014,"src":"3270:19:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3254:35:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72898,"nodeType":"ExpressionStatement","src":"3254:35:152"},{"expression":{"id":72904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72899,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3299:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3301:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"3299:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72902,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3325:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3333:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72016,"src":"3325:29:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3299:55:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72905,"nodeType":"ExpressionStatement","src":"3299:55:152"},{"expression":{"id":72911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72906,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3364:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72908,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3366:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"3364:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72909,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3388:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3396:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72018,"src":"3388:27:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3364:51:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72912,"nodeType":"ExpressionStatement","src":"3364:51:152"},{"expression":{"id":72918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72913,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3425:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3427:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"3425:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72916,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3446:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3454:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72020,"src":"3446:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3425:45:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72919,"nodeType":"ExpressionStatement","src":"3425:45:152"},{"expression":{"id":72925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72920,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3480:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72922,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3482:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"3480:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72923,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3500:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3508:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72022,"src":"3500:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3480:43:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72926,"nodeType":"ExpressionStatement","src":"3480:43:152"},{"expression":{"id":72932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72927,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3533:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72929,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3535:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"3533:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72930,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3560:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3568:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72024,"src":"3560:30:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"3533:57:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":72933,"nodeType":"ExpressionStatement","src":"3533:57:152"},{"expression":{"id":72939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72934,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3600:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3602:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"3600:27:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72937,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3630:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3638:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72030,"src":"3630:33:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3600:63:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":72940,"nodeType":"ExpressionStatement","src":"3600:63:152"},{"expression":{"id":72946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72941,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3673:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3675:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"3673:25:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72944,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3701:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3709:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72026,"src":"3701:31:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3673:59:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":72947,"nodeType":"ExpressionStatement","src":"3673:59:152"},{"expression":{"id":72953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72948,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3742:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72950,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3744:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"3742:21:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72951,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3766:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3774:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72028,"src":"3766:27:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3742:51:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":72954,"nodeType":"ExpressionStatement","src":"3742:51:152"},{"expression":{"id":72960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72955,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3826:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3828:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"3826:12:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72958,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3841:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3849:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72034,"src":"3841:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3826:33:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":72961,"nodeType":"ExpressionStatement","src":"3826:33:152"},{"expression":{"id":72972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72962,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3869:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72964,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3871:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"3869:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":72970,"name":"NETWORK_IDENTIFIER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72858,"src":"3909:18:152","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":72967,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3892:4:152","typeDescriptions":{"typeIdentifier":"t_contract$_Middleware_$75052","typeString":"contract Middleware"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Middleware_$75052","typeString":"contract Middleware"}],"id":72966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3884:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":72965,"name":"address","nodeType":"ElementaryTypeName","src":"3884:7:152","typeDescriptions":{}}},"id":72968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3884:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":72969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3898:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":63691,"src":"3884:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_uint96_$returns$_t_bytes32_$attached_to$_t_address_$","typeString":"function (address,uint96) pure returns (bytes32)"}},"id":72971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3884:44:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3869:59:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":72973,"nodeType":"ExpressionStatement","src":"3869:59:152"},{"expression":{"id":72979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72974,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3938:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3940:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"3938:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72977,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3954:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3962:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72032,"src":"3954:19:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3938:35:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":72980,"nodeType":"ExpressionStatement","src":"3938:35:152"},{"expression":{"id":72986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72981,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"3984:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3986:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"3984:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72984,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"3995:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4003:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72036,"src":"3995:14:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3984:25:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":72987,"nodeType":"ExpressionStatement","src":"3984:25:152"},{"expression":{"id":72993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":72988,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"4020:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":72990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4022:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"4020:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":72991,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"4034:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4042:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72039,"src":"4034:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_calldata_ptr","typeString":"struct Gear.SymbioticContracts calldata"}},"src":"4020:31:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":72994,"nodeType":"ExpressionStatement","src":"4020:31:152"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"expression":{"id":72996,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"4079:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":72997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4087:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72039,"src":"4079:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_calldata_ptr","typeString":"struct Gear.SymbioticContracts calldata"}},"id":72998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4097:15:152","memberName":"networkRegistry","nodeType":"MemberAccess","referencedDeclaration":80047,"src":"4079:33:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":72995,"name":"INetworkRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63749,"src":"4062:16:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_INetworkRegistry_$63749_$","typeString":"type(contract INetworkRegistry)"}},"id":72999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4062:51:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_INetworkRegistry_$63749","typeString":"contract INetworkRegistry"}},"id":73000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4114:15:152","memberName":"registerNetwork","nodeType":"MemberAccess","referencedDeclaration":63748,"src":"4062:67:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":73001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4062:69:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73002,"nodeType":"ExpressionStatement","src":"4062:69:152"},{"expression":{"arguments":[{"arguments":[{"id":73011,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4226:4:152","typeDescriptions":{"typeIdentifier":"t_contract$_Middleware_$75052","typeString":"contract Middleware"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Middleware_$75052","typeString":"contract Middleware"}],"id":73010,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4218:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":73009,"name":"address","nodeType":"ElementaryTypeName","src":"4218:7:152","typeDescriptions":{}}},"id":73012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4218:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":73004,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72869,"src":"4167:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams calldata"}},"id":73005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4175:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72039,"src":"4167:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_calldata_ptr","typeString":"struct Gear.SymbioticContracts calldata"}},"id":73006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4185:17:152","memberName":"middlewareService","nodeType":"MemberAccess","referencedDeclaration":80049,"src":"4167:35:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73003,"name":"INetworkMiddlewareService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64745,"src":"4141:25:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_INetworkMiddlewareService_$64745_$","typeString":"type(contract INetworkMiddlewareService)"}},"id":73007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4141:62:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_INetworkMiddlewareService_$64745","typeString":"contract INetworkMiddlewareService"}},"id":73008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4204:13:152","memberName":"setMiddleware","nodeType":"MemberAccess","referencedDeclaration":64744,"src":"4141:76:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":73013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4141:91:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73014,"nodeType":"ExpressionStatement","src":"4141:91:152"},{"expression":{"arguments":[{"id":73016,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72888,"src":"4260:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}],"id":73015,"name":"_validateStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74580,"src":"4243:16:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72078_storage_ptr_$returns$__$","typeString":"function (struct IMiddleware.Storage storage pointer) view"}},"id":73017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4243:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73018,"nodeType":"ExpressionStatement","src":"4243:19:152"}]},"functionSelector":"ab122753","implemented":true,"kind":"function","modifiers":[{"id":72872,"kind":"modifierInvocation","modifierName":{"id":72871,"name":"initializer","nameLocations":["3048:11:152"],"nodeType":"IdentifierPath","referencedDeclaration":41517,"src":"3048:11:152"},"nodeType":"ModifierInvocation","src":"3048:11:152"}],"name":"initialize","nameLocation":"3001:10:152","parameters":{"id":72870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":72869,"mutability":"mutable","name":"_params","nameLocation":"3032:7:152","nodeType":"VariableDeclaration","scope":73020,"src":"3012:27:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_calldata_ptr","typeString":"struct IMiddleware.InitParams"},"typeName":{"id":72868,"nodeType":"UserDefinedTypeName","pathNode":{"id":72867,"name":"InitParams","nameLocations":["3012:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":72040,"src":"3012:10:152"},"referencedDeclaration":72040,"src":"3012:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_InitParams_$72040_storage_ptr","typeString":"struct IMiddleware.InitParams"}},"visibility":"internal"}],"src":"3011:29:152"},"returnParameters":{"id":72873,"nodeType":"ParameterList","parameters":[],"src":"3060:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":73217,"nodeType":"FunctionDefinition","src":"4327:1578:152","nodes":[],"body":{"id":73216,"nodeType":"Block","src":"4385:1520:152","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":73030,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41320,"src":"4410:5:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":73031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4410:7:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73029,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"4395:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":73032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4395:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73033,"nodeType":"ExpressionStatement","src":"4395:23:152"},{"assignments":[73036],"declarations":[{"constant":false,"id":73036,"mutability":"mutable","name":"oldStorage","nameLocation":"4445:10:152","nodeType":"VariableDeclaration","scope":73216,"src":"4429:26:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73035,"nodeType":"UserDefinedTypeName","pathNode":{"id":73034,"name":"Storage","nameLocations":["4429:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"4429:7:152"},"referencedDeclaration":72078,"src":"4429:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73039,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73037,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"4458:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4458:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4429:39:152"},{"expression":{"arguments":[{"hexValue":"6d6964646c65776172652e73746f726167652e4d6964646c65776172655632","id":73041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4495:33:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_0b71a9760d0d67d1ebdec611fce51798c1c69a6c591e7131d01cf132bade8405","typeString":"literal_string \"middleware.storage.MiddlewareV2\""},"value":"middleware.storage.MiddlewareV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0b71a9760d0d67d1ebdec611fce51798c1c69a6c591e7131d01cf132bade8405","typeString":"literal_string \"middleware.storage.MiddlewareV2\""}],"id":73040,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75021,"src":"4479:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":73042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4479:50:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73043,"nodeType":"ExpressionStatement","src":"4479:50:152"},{"assignments":[73046],"declarations":[{"constant":false,"id":73046,"mutability":"mutable","name":"newStorage","nameLocation":"4555:10:152","nodeType":"VariableDeclaration","scope":73216,"src":"4539:26:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73045,"nodeType":"UserDefinedTypeName","pathNode":{"id":73044,"name":"Storage","nameLocations":["4539:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"4539:7:152"},"referencedDeclaration":72078,"src":"4539:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73049,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73047,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"4568:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4568:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4539:39:152"},{"expression":{"id":73055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73050,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"4589:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73052,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4600:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"4589:22:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73053,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"4614:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73054,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4625:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"4614:22:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4589:47:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73056,"nodeType":"ExpressionStatement","src":"4589:47:152"},{"expression":{"id":73062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73057,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"4646:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4657:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"4646:32:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73060,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"4681:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4692:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"4681:32:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4646:67:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73063,"nodeType":"ExpressionStatement","src":"4646:67:152"},{"expression":{"id":73069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73064,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"4723:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73066,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4734:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"4723:30:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73067,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"4756:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4767:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"4756:30:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4723:63:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73070,"nodeType":"ExpressionStatement","src":"4723:63:152"},{"expression":{"id":73076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73071,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"4796:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4807:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"4796:27:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73074,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"4826:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4837:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"4826:27:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4796:57:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73077,"nodeType":"ExpressionStatement","src":"4796:57:152"},{"expression":{"id":73083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73078,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"4863:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4874:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"4863:26:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73081,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"4892:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4903:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"4892:26:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4863:55:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73084,"nodeType":"ExpressionStatement","src":"4863:55:152"},{"expression":{"id":73090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73085,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"4928:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73087,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4939:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"4928:33:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73088,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"4964:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4975:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"4964:33:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"4928:69:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":73091,"nodeType":"ExpressionStatement","src":"4928:69:152"},{"expression":{"id":73097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73092,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5007:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5018:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"5007:36:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73095,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5046:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5057:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"5046:36:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5007:75:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73098,"nodeType":"ExpressionStatement","src":"5007:75:152"},{"expression":{"id":73104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73099,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5092:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5103:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"5092:34:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73102,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5129:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5140:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"5129:34:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"5092:71:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":73105,"nodeType":"ExpressionStatement","src":"5092:71:152"},{"expression":{"id":73111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73106,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5173:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73108,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5184:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"5173:30:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73109,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5206:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73110,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5217:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"5206:30:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"5173:63:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":73112,"nodeType":"ExpressionStatement","src":"5173:63:152"},{"expression":{"id":73118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73113,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5246:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73115,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5257:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"5246:21:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73116,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5270:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5281:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"5270:21:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5246:45:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73119,"nodeType":"ExpressionStatement","src":"5246:45:152"},{"expression":{"id":73125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73120,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5301:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5312:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"5301:21:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73123,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5325:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5336:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"5325:21:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5301:45:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":73126,"nodeType":"ExpressionStatement","src":"5301:45:152"},{"expression":{"id":73132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73127,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5356:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73129,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5367:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"5356:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73130,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5381:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5392:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"5381:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5356:47:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73133,"nodeType":"ExpressionStatement","src":"5356:47:152"},{"expression":{"id":73139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73134,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5413:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5424:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"5413:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73137,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5433:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5444:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"5433:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5413:37:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73140,"nodeType":"ExpressionStatement","src":"5413:37:152"},{"expression":{"id":73146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":73141,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5460:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5471:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"5460:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":73144,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5483:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5494:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"5483:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"src":"5460:43:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73147,"nodeType":"ExpressionStatement","src":"5460:43:152"},{"body":{"id":73180,"nodeType":"Block","src":"5574:132:152","statements":[{"assignments":[73162,73164],"declarations":[{"constant":false,"id":73162,"mutability":"mutable","name":"key","nameLocation":"5597:3:152","nodeType":"VariableDeclaration","scope":73180,"src":"5589:11:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73161,"name":"address","nodeType":"ElementaryTypeName","src":"5589:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":73164,"mutability":"mutable","name":"value","nameLocation":"5610:5:152","nodeType":"VariableDeclaration","scope":73180,"src":"5602:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73163,"name":"uint256","nodeType":"ElementaryTypeName","src":"5602:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73170,"initialValue":{"arguments":[{"id":73168,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73149,"src":"5643:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":73165,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5619:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5630:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"5619:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5640:2:152","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":55773,"src":"5619:23:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint256)"}},"id":73169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5619:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5588:57:152"},{"expression":{"arguments":[{"id":73176,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73162,"src":"5684:3:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73177,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73164,"src":"5689:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":73171,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5659:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73174,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5670:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"5659:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73175,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5680:3:152","memberName":"set","nodeType":"MemberAccess","referencedDeclaration":55651,"src":"5659:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address,uint256) returns (bool)"}},"id":73178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5659:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73179,"nodeType":"ExpressionStatement","src":"5659:36:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73152,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73149,"src":"5534:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":73153,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5538:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5549:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"5538:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5559:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"5538:27:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":73156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5538:29:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5534:33:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73181,"initializationExpression":{"assignments":[73149],"declarations":[{"constant":false,"id":73149,"mutability":"mutable","name":"i","nameLocation":"5527:1:152","nodeType":"VariableDeclaration","scope":73181,"src":"5519:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73148,"name":"uint256","nodeType":"ElementaryTypeName","src":"5519:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73151,"initialValue":{"hexValue":"30","id":73150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5531:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5519:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5569:3:152","subExpression":{"id":73158,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73149,"src":"5569:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73160,"nodeType":"ExpressionStatement","src":"5569:3:152"},"nodeType":"ForStatement","src":"5514:192:152"},{"body":{"id":73214,"nodeType":"Block","src":"5773:126:152","statements":[{"assignments":[73196,73198],"declarations":[{"constant":false,"id":73196,"mutability":"mutable","name":"key","nameLocation":"5796:3:152","nodeType":"VariableDeclaration","scope":73214,"src":"5788:11:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73195,"name":"address","nodeType":"ElementaryTypeName","src":"5788:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":73198,"mutability":"mutable","name":"value","nameLocation":"5809:5:152","nodeType":"VariableDeclaration","scope":73214,"src":"5801:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73197,"name":"uint256","nodeType":"ElementaryTypeName","src":"5801:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73204,"initialValue":{"arguments":[{"id":73202,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73183,"src":"5839:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":73199,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5818:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73200,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5829:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"5818:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73201,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5836:2:152","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":55773,"src":"5818:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint256)"}},"id":73203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5818:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5787:54:152"},{"expression":{"arguments":[{"id":73210,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73196,"src":"5877:3:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73211,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73198,"src":"5882:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":73205,"name":"newStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73046,"src":"5855:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73208,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5866:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"5855:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5873:3:152","memberName":"set","nodeType":"MemberAccess","referencedDeclaration":55651,"src":"5855:21:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address,uint256) returns (bool)"}},"id":73212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5855:33:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73213,"nodeType":"ExpressionStatement","src":"5855:33:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73186,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73183,"src":"5736:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":73187,"name":"oldStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73036,"src":"5740:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5751:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"5740:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5758:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"5740:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":73190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5740:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5736:30:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73215,"initializationExpression":{"assignments":[73183],"declarations":[{"constant":false,"id":73183,"mutability":"mutable","name":"i","nameLocation":"5729:1:152","nodeType":"VariableDeclaration","scope":73215,"src":"5721:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73182,"name":"uint256","nodeType":"ElementaryTypeName","src":"5721:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73185,"initialValue":{"hexValue":"30","id":73184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5733:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5721:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5768:3:152","subExpression":{"id":73192,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73183,"src":"5768:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73194,"nodeType":"ExpressionStatement","src":"5768:3:152"},"nodeType":"ForStatement","src":"5716:183:152"}]},"documentation":{"id":73021,"nodeType":"StructuredDocumentation","src":"4275:47:152","text":"@custom:oz-upgrades-validate-as-initializer"},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":73024,"kind":"modifierInvocation","modifierName":{"id":73023,"name":"onlyOwner","nameLocations":["4358:9:152"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"4358:9:152"},"nodeType":"ModifierInvocation","src":"4358:9:152"},{"arguments":[{"hexValue":"32","id":73026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4382:1:152","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":73027,"kind":"modifierInvocation","modifierName":{"id":73025,"name":"reinitializer","nameLocations":["4368:13:152"],"nodeType":"IdentifierPath","referencedDeclaration":41564,"src":"4368:13:152"},"nodeType":"ModifierInvocation","src":"4368:16:152"}],"name":"reinitialize","nameLocation":"4336:12:152","parameters":{"id":73022,"nodeType":"ParameterList","parameters":[],"src":"4348:2:152"},"returnParameters":{"id":73028,"nodeType":"ParameterList","parameters":[],"src":"4385:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":73227,"nodeType":"FunctionDefinition","src":"5926:98:152","nodes":[],"body":{"id":73226,"nodeType":"Block","src":"5978:46:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73222,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"5995:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5995:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6006:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"5995:22:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73221,"id":73225,"nodeType":"Return","src":"5988:29:152"}]},"baseFunctions":[72102],"functionSelector":"4455a38f","implemented":true,"kind":"function","modifiers":[],"name":"eraDuration","nameLocation":"5935:11:152","parameters":{"id":73218,"nodeType":"ParameterList","parameters":[],"src":"5946:2:152"},"returnParameters":{"id":73221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73220,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73227,"src":"5970:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73219,"name":"uint48","nodeType":"ElementaryTypeName","src":"5970:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"5969:8:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":73237,"nodeType":"FunctionDefinition","src":"6030:118:152","nodes":[],"body":{"id":73236,"nodeType":"Block","src":"6092:56:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73232,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"6109:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6109:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6120:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"6109:32:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73231,"id":73235,"nodeType":"Return","src":"6102:39:152"}]},"baseFunctions":[72107],"functionSelector":"945cf2dd","implemented":true,"kind":"function","modifiers":[],"name":"minVaultEpochDuration","nameLocation":"6039:21:152","parameters":{"id":73228,"nodeType":"ParameterList","parameters":[],"src":"6060:2:152"},"returnParameters":{"id":73231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73230,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73237,"src":"6084:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73229,"name":"uint48","nodeType":"ElementaryTypeName","src":"6084:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6083:8:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":73247,"nodeType":"FunctionDefinition","src":"6154:116:152","nodes":[],"body":{"id":73246,"nodeType":"Block","src":"6216:54:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73242,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"6233:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6233:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6244:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"6233:30:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73241,"id":73245,"nodeType":"Return","src":"6226:37:152"}]},"baseFunctions":[72112],"functionSelector":"709d06ae","implemented":true,"kind":"function","modifiers":[],"name":"operatorGracePeriod","nameLocation":"6163:19:152","parameters":{"id":73238,"nodeType":"ParameterList","parameters":[],"src":"6182:2:152"},"returnParameters":{"id":73241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73240,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73247,"src":"6208:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73239,"name":"uint48","nodeType":"ElementaryTypeName","src":"6208:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6207:8:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73257,"nodeType":"FunctionDefinition","src":"6276:110:152","nodes":[],"body":{"id":73256,"nodeType":"Block","src":"6335:51:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73252,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"6352:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6352:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73254,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6363:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"6352:27:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73251,"id":73255,"nodeType":"Return","src":"6345:34:152"}]},"baseFunctions":[72117],"functionSelector":"79a8b245","implemented":true,"kind":"function","modifiers":[],"name":"vaultGracePeriod","nameLocation":"6285:16:152","parameters":{"id":73248,"nodeType":"ParameterList","parameters":[],"src":"6301:2:152"},"returnParameters":{"id":73251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73250,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73257,"src":"6327:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73249,"name":"uint48","nodeType":"ElementaryTypeName","src":"6327:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6326:8:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73267,"nodeType":"FunctionDefinition","src":"6392:108:152","nodes":[],"body":{"id":73266,"nodeType":"Block","src":"6450:50:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73262,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"6467:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6467:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73264,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6478:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"6467:26:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73261,"id":73265,"nodeType":"Return","src":"6460:33:152"}]},"baseFunctions":[72122],"functionSelector":"461e7a8e","implemented":true,"kind":"function","modifiers":[],"name":"minVetoDuration","nameLocation":"6401:15:152","parameters":{"id":73258,"nodeType":"ParameterList","parameters":[],"src":"6416:2:152"},"returnParameters":{"id":73261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73260,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73267,"src":"6442:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73259,"name":"uint48","nodeType":"ElementaryTypeName","src":"6442:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6441:8:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73277,"nodeType":"FunctionDefinition","src":"6506:122:152","nodes":[],"body":{"id":73276,"nodeType":"Block","src":"6571:57:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73272,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"6588:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6588:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6599:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"6588:33:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":73271,"id":73275,"nodeType":"Return","src":"6581:40:152"}]},"baseFunctions":[72127],"functionSelector":"373bba1f","implemented":true,"kind":"function","modifiers":[],"name":"minSlashExecutionDelay","nameLocation":"6515:22:152","parameters":{"id":73268,"nodeType":"ParameterList","parameters":[],"src":"6537:2:152"},"returnParameters":{"id":73271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73270,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73277,"src":"6563:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73269,"name":"uint48","nodeType":"ElementaryTypeName","src":"6563:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6562:8:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73287,"nodeType":"FunctionDefinition","src":"6634:129:152","nodes":[],"body":{"id":73286,"nodeType":"Block","src":"6703:60:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73282,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"6720:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6720:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6731:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"6720:36:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":73281,"id":73285,"nodeType":"Return","src":"6713:43:152"}]},"baseFunctions":[72132],"functionSelector":"9e032311","implemented":true,"kind":"function","modifiers":[],"name":"maxResolverSetEpochsDelay","nameLocation":"6643:25:152","parameters":{"id":73278,"nodeType":"ParameterList","parameters":[],"src":"6668:2:152"},"returnParameters":{"id":73281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73280,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73287,"src":"6694:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73279,"name":"uint256","nodeType":"ElementaryTypeName","src":"6694:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6693:9:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73297,"nodeType":"FunctionDefinition","src":"6769:124:152","nodes":[],"body":{"id":73296,"nodeType":"Block","src":"6835:58:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73292,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"6852:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6852:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6863:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"6852:34:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":73291,"id":73295,"nodeType":"Return","src":"6845:41:152"}]},"baseFunctions":[72137],"functionSelector":"c9b0b1e9","implemented":true,"kind":"function","modifiers":[],"name":"allowedVaultImplVersion","nameLocation":"6778:23:152","parameters":{"id":73288,"nodeType":"ParameterList","parameters":[],"src":"6801:2:152"},"returnParameters":{"id":73291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73290,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73297,"src":"6827:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":73289,"name":"uint64","nodeType":"ElementaryTypeName","src":"6827:6:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6826:8:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73307,"nodeType":"FunctionDefinition","src":"6899:116:152","nodes":[],"body":{"id":73306,"nodeType":"Block","src":"6961:54:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73302,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"6978:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6978:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6989:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"6978:30:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":73301,"id":73305,"nodeType":"Return","src":"6971:37:152"}]},"baseFunctions":[72142],"functionSelector":"d55a5bdf","implemented":true,"kind":"function","modifiers":[],"name":"vetoSlasherImplType","nameLocation":"6908:19:152","parameters":{"id":73298,"nodeType":"ParameterList","parameters":[],"src":"6927:2:152"},"returnParameters":{"id":73301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73300,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73307,"src":"6953:6:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":73299,"name":"uint64","nodeType":"ElementaryTypeName","src":"6953:6:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6952:8:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73317,"nodeType":"FunctionDefinition","src":"7021:99:152","nodes":[],"body":{"id":73316,"nodeType":"Block","src":"7075:45:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73312,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"7092:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7092:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73314,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7103:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"7092:21:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":73311,"id":73315,"nodeType":"Return","src":"7085:28:152"}]},"baseFunctions":[72147],"functionSelector":"d8dfeb45","implemented":true,"kind":"function","modifiers":[],"name":"collateral","nameLocation":"7030:10:152","parameters":{"id":73308,"nodeType":"ParameterList","parameters":[],"src":"7040:2:152"},"returnParameters":{"id":73311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73310,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73317,"src":"7066:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73309,"name":"address","nodeType":"ElementaryTypeName","src":"7066:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7065:9:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73327,"nodeType":"FunctionDefinition","src":"7126:99:152","nodes":[],"body":{"id":73326,"nodeType":"Block","src":"7180:45:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73322,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"7197:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7197:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7208:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"7197:21:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":73321,"id":73325,"nodeType":"Return","src":"7190:28:152"}]},"baseFunctions":[72152],"functionSelector":"ceebb69a","implemented":true,"kind":"function","modifiers":[],"name":"subnetwork","nameLocation":"7135:10:152","parameters":{"id":73318,"nodeType":"ParameterList","parameters":[],"src":"7145:2:152"},"returnParameters":{"id":73321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73327,"src":"7171:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":73319,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7171:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7170:9:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73337,"nodeType":"FunctionDefinition","src":"7231:101:152","nodes":[],"body":{"id":73336,"nodeType":"Block","src":"7286:46:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73332,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"7303:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7303:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7314:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"7303:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":73331,"id":73335,"nodeType":"Return","src":"7296:29:152"}]},"baseFunctions":[72157],"functionSelector":"c639e2d6","implemented":true,"kind":"function","modifiers":[],"name":"maxAdminFee","nameLocation":"7240:11:152","parameters":{"id":73328,"nodeType":"ParameterList","parameters":[],"src":"7251:2:152"},"returnParameters":{"id":73331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73337,"src":"7277:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73329,"name":"uint256","nodeType":"ElementaryTypeName","src":"7277:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7276:9:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73347,"nodeType":"FunctionDefinition","src":"7338:91:152","nodes":[],"body":{"id":73346,"nodeType":"Block","src":"7388:41:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73342,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"7405:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7405:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7416:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"7405:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":73341,"id":73345,"nodeType":"Return","src":"7398:24:152"}]},"baseFunctions":[72162],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"7347:6:152","parameters":{"id":73338,"nodeType":"ParameterList","parameters":[],"src":"7353:2:152"},"returnParameters":{"id":73341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73340,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73347,"src":"7379:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73339,"name":"address","nodeType":"ElementaryTypeName","src":"7379:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7378:9:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73358,"nodeType":"FunctionDefinition","src":"7435:129:152","nodes":[],"body":{"id":73357,"nodeType":"Block","src":"7520:44:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73353,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"7537:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7537:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73355,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7548:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"7537:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"functionReturnParameters":73352,"id":73356,"nodeType":"Return","src":"7530:27:152"}]},"baseFunctions":[72168],"functionSelector":"bcf33934","implemented":true,"kind":"function","modifiers":[],"name":"symbioticContracts","nameLocation":"7444:18:152","parameters":{"id":73348,"nodeType":"ParameterList","parameters":[],"src":"7462:2:152"},"returnParameters":{"id":73352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73358,"src":"7488:30:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_memory_ptr","typeString":"struct Gear.SymbioticContracts"},"typeName":{"id":73350,"nodeType":"UserDefinedTypeName","pathNode":{"id":73349,"name":"Gear.SymbioticContracts","nameLocations":["7488:4:152","7493:18:152"],"nodeType":"IdentifierPath","referencedDeclaration":80062,"src":"7488:23:152"},"referencedDeclaration":80062,"src":"7488:23:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage_ptr","typeString":"struct Gear.SymbioticContracts"}},"visibility":"internal"}],"src":"7487:32:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":73389,"nodeType":"FunctionDefinition","src":"7587:263:152","nodes":[],"body":{"id":73388,"nodeType":"Block","src":"7643:207:152","nodes":[],"statements":[{"assignments":[73365],"declarations":[{"constant":false,"id":73365,"mutability":"mutable","name":"$","nameLocation":"7669:1:152","nodeType":"VariableDeclaration","scope":73388,"src":"7653:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73364,"nodeType":"UserDefinedTypeName","pathNode":{"id":73363,"name":"Storage","nameLocations":["7653:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"7653:7:152"},"referencedDeclaration":72078,"src":"7653:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73368,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73366,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"7673:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7673:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7653:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73369,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7697:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7701:6:152","memberName":"sender","nodeType":"MemberAccess","src":"7697:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":73371,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73365,"src":"7711:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7713:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"7711:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73373,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7723:18:152","memberName":"roleSlashRequester","nodeType":"MemberAccess","referencedDeclaration":80057,"src":"7711:30:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7697:44:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73379,"nodeType":"IfStatement","src":"7693:101:152","trueBody":{"id":73378,"nodeType":"Block","src":"7743:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73375,"name":"NotSlashRequester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72001,"src":"7764:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7764:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73377,"nodeType":"RevertStatement","src":"7757:26:152"}]}},{"expression":{"id":73386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":73380,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73365,"src":"7803:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7805:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"7803:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73384,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7815:18:152","memberName":"roleSlashRequester","nodeType":"MemberAccess","referencedDeclaration":80057,"src":"7803:30:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":73385,"name":"newRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73360,"src":"7836:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7803:40:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73387,"nodeType":"ExpressionStatement","src":"7803:40:152"}]},"baseFunctions":[72173],"functionSelector":"6d1064eb","implemented":true,"kind":"function","modifiers":[],"name":"changeSlashRequester","nameLocation":"7596:20:152","parameters":{"id":73361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73360,"mutability":"mutable","name":"newRole","nameLocation":"7625:7:152","nodeType":"VariableDeclaration","scope":73389,"src":"7617:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73359,"name":"address","nodeType":"ElementaryTypeName","src":"7617:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7616:17:152"},"returnParameters":{"id":73362,"nodeType":"ParameterList","parameters":[],"src":"7643:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73420,"nodeType":"FunctionDefinition","src":"7856:259:152","nodes":[],"body":{"id":73419,"nodeType":"Block","src":"7911:204:152","nodes":[],"statements":[{"assignments":[73396],"declarations":[{"constant":false,"id":73396,"mutability":"mutable","name":"$","nameLocation":"7937:1:152","nodeType":"VariableDeclaration","scope":73419,"src":"7921:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73395,"nodeType":"UserDefinedTypeName","pathNode":{"id":73394,"name":"Storage","nameLocations":["7921:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"7921:7:152"},"referencedDeclaration":72078,"src":"7921:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73399,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73397,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"7941:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7941:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7921:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73400,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7965:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7969:6:152","memberName":"sender","nodeType":"MemberAccess","src":"7965:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":73402,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73396,"src":"7979:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7981:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"7979:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73404,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7991:17:152","memberName":"roleSlashExecutor","nodeType":"MemberAccess","referencedDeclaration":80059,"src":"7979:29:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7965:43:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73410,"nodeType":"IfStatement","src":"7961:99:152","trueBody":{"id":73409,"nodeType":"Block","src":"8010:50:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73406,"name":"NotSlashExecutor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72004,"src":"8031:16:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8031:18:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73408,"nodeType":"RevertStatement","src":"8024:25:152"}]}},{"expression":{"id":73417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":73411,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73396,"src":"8069:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73414,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8071:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"8069:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8081:17:152","memberName":"roleSlashExecutor","nodeType":"MemberAccess","referencedDeclaration":80059,"src":"8069:29:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":73416,"name":"newRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73391,"src":"8101:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8069:39:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73418,"nodeType":"ExpressionStatement","src":"8069:39:152"}]},"baseFunctions":[72178],"functionSelector":"86c241a1","implemented":true,"kind":"function","modifiers":[],"name":"changeSlashExecutor","nameLocation":"7865:19:152","parameters":{"id":73392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73391,"mutability":"mutable","name":"newRole","nameLocation":"7893:7:152","nodeType":"VariableDeclaration","scope":73420,"src":"7885:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73390,"name":"address","nodeType":"ElementaryTypeName","src":"7885:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7884:17:152"},"returnParameters":{"id":73393,"nodeType":"ParameterList","parameters":[],"src":"7911:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73474,"nodeType":"FunctionDefinition","src":"8171:405:152","nodes":[],"body":{"id":73473,"nodeType":"Block","src":"8208:368:152","nodes":[],"statements":[{"assignments":[73425],"declarations":[{"constant":false,"id":73425,"mutability":"mutable","name":"$","nameLocation":"8234:1:152","nodeType":"VariableDeclaration","scope":73473,"src":"8218:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73424,"nodeType":"UserDefinedTypeName","pathNode":{"id":73423,"name":"Storage","nameLocations":["8218:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"8218:7:152"},"referencedDeclaration":72078,"src":"8218:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73428,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73426,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"8238:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8238:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8218:30:152"},{"condition":{"id":73438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8263:61:152","subExpression":{"arguments":[{"expression":{"id":73435,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8313:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8317:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8313:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":73430,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73425,"src":"8274:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8276:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"8274:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8286:16:152","memberName":"operatorRegistry","nodeType":"MemberAccess","referencedDeclaration":80045,"src":"8274:28:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73429,"name":"IRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64083,"src":"8264:9:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRegistry_$64083_$","typeString":"type(contract IRegistry)"}},"id":73433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8264:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRegistry_$64083","typeString":"contract IRegistry"}},"id":73434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8304:8:152","memberName":"isEntity","nodeType":"MemberAccess","referencedDeclaration":64068,"src":"8264:48:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":73437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8264:60:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73443,"nodeType":"IfStatement","src":"8259:121:152","trueBody":{"id":73442,"nodeType":"Block","src":"8326:54:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73439,"name":"OperatorDoesNotExist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71950,"src":"8347:20:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8347:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73441,"nodeType":"RevertStatement","src":"8340:29:152"}]}},{"condition":{"id":73457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8393:77:152","subExpression":{"arguments":[{"expression":{"id":73450,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8444:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8448:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8444:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":73454,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8464:4:152","typeDescriptions":{"typeIdentifier":"t_contract$_Middleware_$75052","typeString":"contract Middleware"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Middleware_$75052","typeString":"contract Middleware"}],"id":73453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8456:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":73452,"name":"address","nodeType":"ElementaryTypeName","src":"8456:7:152","typeDescriptions":{}}},"id":73455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8456:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":73445,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73425,"src":"8408:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73446,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8410:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"8408:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73447,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8420:12:152","memberName":"networkOptIn","nodeType":"MemberAccess","referencedDeclaration":80051,"src":"8408:24:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73444,"name":"IOptInService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64871,"src":"8394:13:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOptInService_$64871_$","typeString":"type(contract IOptInService)"}},"id":73448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8394:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOptInService_$64871","typeString":"contract IOptInService"}},"id":73449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8434:9:152","memberName":"isOptedIn","nodeType":"MemberAccess","referencedDeclaration":64818,"src":"8394:49:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view external returns (bool)"}},"id":73456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8394:76:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73462,"nodeType":"IfStatement","src":"8389:137:152","trueBody":{"id":73461,"nodeType":"Block","src":"8472:54:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73458,"name":"OperatorDoesNotOptIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71953,"src":"8493:20:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8493:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73460,"nodeType":"RevertStatement","src":"8486:29:152"}]}},{"expression":{"arguments":[{"expression":{"id":73468,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8555:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8559:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8555:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":73470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8567:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"expression":{"id":73463,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73425,"src":"8536:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73466,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8538:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"8536:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8548:6:152","memberName":"append","nodeType":"MemberAccess","referencedDeclaration":81024,"src":"8536:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$_t_uint160_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address,uint160)"}},"id":73471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8536:33:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73472,"nodeType":"ExpressionStatement","src":"8536:33:152"}]},"baseFunctions":[72217],"functionSelector":"2acde098","implemented":true,"kind":"function","modifiers":[],"name":"registerOperator","nameLocation":"8180:16:152","parameters":{"id":73421,"nodeType":"ParameterList","parameters":[],"src":"8196:2:152"},"returnParameters":{"id":73422,"nodeType":"ParameterList","parameters":[],"src":"8208:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73486,"nodeType":"FunctionDefinition","src":"8582:93:152","nodes":[],"body":{"id":73485,"nodeType":"Block","src":"8618:57:152","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":73481,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8657:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8661:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8657:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73477,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"8628:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8628:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73479,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8639:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"8628:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73480,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8649:7:152","memberName":"disable","nodeType":"MemberAccess","referencedDeclaration":81118,"src":"8628:28:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address)"}},"id":73483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8628:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73484,"nodeType":"ExpressionStatement","src":"8628:40:152"}]},"baseFunctions":[72221],"functionSelector":"d99fcd66","implemented":true,"kind":"function","modifiers":[],"name":"disableOperator","nameLocation":"8591:15:152","parameters":{"id":73475,"nodeType":"ParameterList","parameters":[],"src":"8606:2:152"},"returnParameters":{"id":73476,"nodeType":"ParameterList","parameters":[],"src":"8618:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73498,"nodeType":"FunctionDefinition","src":"8681:91:152","nodes":[],"body":{"id":73497,"nodeType":"Block","src":"8716:56:152","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":73493,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8754:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8758:6:152","memberName":"sender","nodeType":"MemberAccess","src":"8754:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73489,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"8726:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8726:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73491,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8737:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"8726:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8747:6:152","memberName":"enable","nodeType":"MemberAccess","referencedDeclaration":81071,"src":"8726:27:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address)"}},"id":73495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8726:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73496,"nodeType":"ExpressionStatement","src":"8726:39:152"}]},"baseFunctions":[72225],"functionSelector":"3d15e74e","implemented":true,"kind":"function","modifiers":[],"name":"enableOperator","nameLocation":"8690:14:152","parameters":{"id":73487,"nodeType":"ParameterList","parameters":[],"src":"8704:2:152"},"returnParameters":{"id":73488,"nodeType":"ParameterList","parameters":[],"src":"8716:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73543,"nodeType":"FunctionDefinition","src":"8778:362:152","nodes":[],"body":{"id":73542,"nodeType":"Block","src":"8833:307:152","nodes":[],"statements":[{"assignments":[73505],"declarations":[{"constant":false,"id":73505,"mutability":"mutable","name":"$","nameLocation":"8859:1:152","nodeType":"VariableDeclaration","scope":73542,"src":"8843:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73504,"nodeType":"UserDefinedTypeName","pathNode":{"id":73503,"name":"Storage","nameLocations":["8843:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"8843:7:152"},"referencedDeclaration":72078,"src":"8843:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73508,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73506,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"8863:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8863:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8843:30:152"},{"assignments":[null,73510],"declarations":[null,{"constant":false,"id":73510,"mutability":"mutable","name":"disabledTime","nameLocation":"8894:12:152","nodeType":"VariableDeclaration","scope":73542,"src":"8887:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73509,"name":"uint48","nodeType":"ElementaryTypeName","src":"8887:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":73516,"initialValue":{"arguments":[{"id":73514,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73500,"src":"8931:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73511,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73505,"src":"8910:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8912:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"8910:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73513,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8922:8:152","memberName":"getTimes","nodeType":"MemberAccess","referencedDeclaration":81177,"src":"8910:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (uint48,uint48)"}},"id":73515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8910:30:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint48_$_t_uint48_$","typeString":"tuple(uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"8884:56:152"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":73528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73517,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73510,"src":"8955:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":73518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8971:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8955:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":73520,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"8976:4:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Time_$59094_$","typeString":"type(library Time)"}},"id":73521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8981:9:152","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":58842,"src":"8976:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":73522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8976:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73523,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73510,"src":"8995:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":73524,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73505,"src":"9010:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9012:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"9010:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"8995:36:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"8976:55:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8955:76:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73533,"nodeType":"IfStatement","src":"8951:144:152","trueBody":{"id":73532,"nodeType":"Block","src":"9033:62:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73529,"name":"OperatorGracePeriodNotPassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71938,"src":"9054:28:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9054:30:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73531,"nodeType":"RevertStatement","src":"9047:37:152"}]}},{"expression":{"arguments":[{"id":73539,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73500,"src":"9124:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73534,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73505,"src":"9105:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9107:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"9105:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73538,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9117:6:152","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":55678,"src":"9105:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) returns (bool)"}},"id":73540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9105:28:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73541,"nodeType":"ExpressionStatement","src":"9105:28:152"}]},"baseFunctions":[72231],"functionSelector":"96115bc2","implemented":true,"kind":"function","modifiers":[],"name":"unregisterOperator","nameLocation":"8787:18:152","parameters":{"id":73501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73500,"mutability":"mutable","name":"operator","nameLocation":"8814:8:152","nodeType":"VariableDeclaration","scope":73543,"src":"8806:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73499,"name":"address","nodeType":"ElementaryTypeName","src":"8806:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8805:18:152"},"returnParameters":{"id":73502,"nodeType":"ParameterList","parameters":[],"src":"8833:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73601,"nodeType":"FunctionDefinition","src":"9146:494:152","nodes":[],"body":{"id":73600,"nodeType":"Block","src":"9253:387:152","nodes":[],"statements":[{"assignments":[73556],"declarations":[{"constant":false,"id":73556,"mutability":"mutable","name":"$","nameLocation":"9279:1:152","nodeType":"VariableDeclaration","scope":73600,"src":"9263:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73555,"nodeType":"UserDefinedTypeName","pathNode":{"id":73554,"name":"Storage","nameLocations":["9263:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"9263:7:152"},"referencedDeclaration":72078,"src":"9263:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73559,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73557,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"9283:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9283:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9263:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73560,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9308:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9312:6:152","memberName":"sender","nodeType":"MemberAccess","src":"9308:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":73562,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73556,"src":"9322:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9324:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"9322:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9308:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73569,"nodeType":"IfStatement","src":"9304:71:152","trueBody":{"id":73568,"nodeType":"Block","src":"9332:43:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73565,"name":"NotRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71998,"src":"9353:9:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9353:11:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73567,"nodeType":"RevertStatement","src":"9346:18:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73570,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73545,"src":"9389:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":73571,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73556,"src":"9398:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73572,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9400:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"9398:12:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9389:21:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73578,"nodeType":"IfStatement","src":"9385:78:152","trueBody":{"id":73577,"nodeType":"Block","src":"9412:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73574,"name":"UnknownCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71935,"src":"9433:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9433:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73576,"nodeType":"RevertStatement","src":"9426:26:152"}]}},{"expression":{"arguments":[{"expression":{"id":73585,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73556,"src":"9544:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9546:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"9544:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73587,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73545,"src":"9554:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73588,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73547,"src":"9561:6:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":73589,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73549,"src":"9569:4:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"expression":{"expression":{"id":73580,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73556,"src":"9497:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73581,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9499:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"9497:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":73582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9509:15:152","memberName":"operatorRewards","nodeType":"MemberAccess","referencedDeclaration":80055,"src":"9497:27:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73579,"name":"IDefaultOperatorRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70549,"src":"9473:23:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDefaultOperatorRewards_$70549_$","typeString":"type(contract IDefaultOperatorRewards)"}},"id":73583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9473:52:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDefaultOperatorRewards_$70549","typeString":"contract IDefaultOperatorRewards"}},"id":73584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9526:17:152","memberName":"distributeRewards","nodeType":"MemberAccess","referencedDeclaration":70531,"src":"9473:70:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (address,address,uint256,bytes32) external"}},"id":73590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9473:101:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73591,"nodeType":"ExpressionStatement","src":"9473:101:152"},{"expression":{"arguments":[{"arguments":[{"id":73595,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73547,"src":"9619:6:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":73596,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73549,"src":"9627:4:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":73593,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9602:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":73594,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9606:12:152","memberName":"encodePacked","nodeType":"MemberAccess","src":"9602:16:152","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9602:30:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":73592,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9592:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":73598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9592:41:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":73553,"id":73599,"nodeType":"Return","src":"9585:48:152"}]},"baseFunctions":[72269],"functionSelector":"729e2f36","implemented":true,"kind":"function","modifiers":[],"name":"distributeOperatorRewards","nameLocation":"9155:25:152","parameters":{"id":73550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73545,"mutability":"mutable","name":"token","nameLocation":"9189:5:152","nodeType":"VariableDeclaration","scope":73601,"src":"9181:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73544,"name":"address","nodeType":"ElementaryTypeName","src":"9181:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":73547,"mutability":"mutable","name":"amount","nameLocation":"9204:6:152","nodeType":"VariableDeclaration","scope":73601,"src":"9196:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73546,"name":"uint256","nodeType":"ElementaryTypeName","src":"9196:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":73549,"mutability":"mutable","name":"root","nameLocation":"9220:4:152","nodeType":"VariableDeclaration","scope":73601,"src":"9212:12:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":73548,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9212:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9180:45:152"},"returnParameters":{"id":73553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73601,"src":"9244:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":73551,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9244:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9243:9:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73749,"nodeType":"FunctionDefinition","src":"9646:1224:152","nodes":[],"body":{"id":73748,"nodeType":"Block","src":"9793:1077:152","nodes":[],"statements":[{"assignments":[73613],"declarations":[{"constant":false,"id":73613,"mutability":"mutable","name":"$","nameLocation":"9819:1:152","nodeType":"VariableDeclaration","scope":73748,"src":"9803:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73612,"nodeType":"UserDefinedTypeName","pathNode":{"id":73611,"name":"Storage","nameLocations":["9803:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"9803:7:152"},"referencedDeclaration":72078,"src":"9803:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73616,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73614,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"9823:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9823:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9803:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73617,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9848:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":73618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9852:6:152","memberName":"sender","nodeType":"MemberAccess","src":"9848:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":73619,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73613,"src":"9862:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73620,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9864:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"9862:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9848:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73626,"nodeType":"IfStatement","src":"9844:71:152","trueBody":{"id":73625,"nodeType":"Block","src":"9872:43:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73622,"name":"NotRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71998,"src":"9893:9:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9893:11:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73624,"nodeType":"RevertStatement","src":"9886:18:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73627,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73604,"src":"9929:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73628,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9941:5:152","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":79923,"src":"9929:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":73629,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73613,"src":"9950:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73630,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9952:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"9950:12:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9929:33:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73636,"nodeType":"IfStatement","src":"9925:90:152","trueBody":{"id":73635,"nodeType":"Block","src":"9964:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73632,"name":"UnknownCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71935,"src":"9985:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9985:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73634,"nodeType":"RevertStatement","src":"9978:26:152"}]}},{"assignments":[73638],"declarations":[{"constant":false,"id":73638,"mutability":"mutable","name":"distributionBytes","nameLocation":"10038:17:152","nodeType":"VariableDeclaration","scope":73748,"src":"10025:30:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":73637,"name":"bytes","nodeType":"ElementaryTypeName","src":"10025:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":73639,"nodeType":"VariableDeclarationStatement","src":"10025:30:152"},{"body":{"id":73731,"nodeType":"Block","src":"10127:615:152","statements":[{"assignments":[73656],"declarations":[{"constant":false,"id":73656,"mutability":"mutable","name":"rewards","nameLocation":"10167:7:152","nodeType":"VariableDeclaration","scope":73731,"src":"10141:33:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79929_memory_ptr","typeString":"struct Gear.StakerRewards"},"typeName":{"id":73655,"nodeType":"UserDefinedTypeName","pathNode":{"id":73654,"name":"Gear.StakerRewards","nameLocations":["10141:4:152","10146:13:152"],"nodeType":"IdentifierPath","referencedDeclaration":79929,"src":"10141:18:152"},"referencedDeclaration":79929,"src":"10141:18:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79929_storage_ptr","typeString":"struct Gear.StakerRewards"}},"visibility":"internal"}],"id":73661,"initialValue":{"baseExpression":{"expression":{"id":73657,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73604,"src":"10177:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10189:12:152","memberName":"distribution","nodeType":"MemberAccess","referencedDeclaration":79919,"src":"10177:24:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StakerRewards_$79929_memory_ptr_$dyn_memory_ptr","typeString":"struct Gear.StakerRewards memory[] memory"}},"id":73660,"indexExpression":{"id":73659,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73641,"src":"10202:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10177:27:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79929_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"nodeType":"VariableDeclarationStatement","src":"10141:63:152"},{"condition":{"id":73668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10223:33:152","subExpression":{"arguments":[{"expression":{"id":73665,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73656,"src":"10242:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79929_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10250:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":79926,"src":"10242:13:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73662,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73613,"src":"10224:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10226:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"10224:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10233:8:152","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":55718,"src":"10224:17:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (bool)"}},"id":73667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10224:32:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73673,"nodeType":"IfStatement","src":"10219:99:152","trueBody":{"id":73672,"nodeType":"Block","src":"10258:60:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73669,"name":"NotRegisteredVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71986,"src":"10283:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10283:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73671,"nodeType":"RevertStatement","src":"10276:27:152"}]}},{"assignments":[73675],"declarations":[{"constant":false,"id":73675,"mutability":"mutable","name":"rewardsAddress","nameLocation":"10340:14:152","nodeType":"VariableDeclaration","scope":73731,"src":"10332:22:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73674,"name":"address","nodeType":"ElementaryTypeName","src":"10332:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":73685,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":73681,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73656,"src":"10388:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79929_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10396:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":79926,"src":"10388:13:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73678,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73613,"src":"10365:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10367:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"10365:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10374:13:152","memberName":"getPinnedData","nodeType":"MemberAccess","referencedDeclaration":81198,"src":"10365:22:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_uint160_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (uint160)"}},"id":73683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10365:37:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":73677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10357:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":73676,"name":"address","nodeType":"ElementaryTypeName","src":"10357:7:152","typeDescriptions":{}}},"id":73684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10357:46:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10332:71:152"},{"assignments":[73687],"declarations":[{"constant":false,"id":73687,"mutability":"mutable","name":"data","nameLocation":"10431:4:152","nodeType":"VariableDeclaration","scope":73731,"src":"10418:17:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":73686,"name":"bytes","nodeType":"ElementaryTypeName","src":"10418:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":73702,"initialValue":{"arguments":[{"id":73690,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73606,"src":"10449:9:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"expression":{"id":73691,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73613,"src":"10460:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10462:11:152","memberName":"maxAdminFee","nodeType":"MemberAccess","referencedDeclaration":72063,"src":"10460:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"","id":73695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10481:2:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":73694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10475:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":73693,"name":"bytes","nodeType":"ElementaryTypeName","src":"10475:5:152","typeDescriptions":{}}},"id":73696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10475:9:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"hexValue":"","id":73699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10492:2:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":73698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10486:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":73697,"name":"bytes","nodeType":"ElementaryTypeName","src":"10486:5:152","typeDescriptions":{}}},"id":73700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10486:9:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":73688,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10438:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":73689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10442:6:152","memberName":"encode","nodeType":"MemberAccess","src":"10438:10:152","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10438:58:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"10418:78:152"},{"expression":{"arguments":[{"expression":{"id":73707,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73613,"src":"10566:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10568:6:152","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":72067,"src":"10566:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":73709,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73604,"src":"10576:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73710,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10588:5:152","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":79923,"src":"10576:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":73711,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73656,"src":"10595:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79929_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73712,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10603:6:152","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":79928,"src":"10595:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":73713,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73687,"src":"10611:4:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":73704,"name":"rewardsAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73675,"src":"10532:14:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73703,"name":"IDefaultStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70743,"src":"10510:21:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDefaultStakerRewards_$70743_$","typeString":"type(contract IDefaultStakerRewards)"}},"id":73705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10510:37:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDefaultStakerRewards_$70743","typeString":"contract IDefaultStakerRewards"}},"id":73706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10548:17:152","memberName":"distributeRewards","nodeType":"MemberAccess","referencedDeclaration":70819,"src":"10510:55:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory) external"}},"id":73714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10510:106:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73715,"nodeType":"ExpressionStatement","src":"10510:106:152"},{"expression":{"id":73729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":73716,"name":"distributionBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"10631:17:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":73720,"name":"distributionBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"10664:17:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"expression":{"id":73723,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73656,"src":"10700:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79929_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73724,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10708:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":79926,"src":"10700:13:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":73725,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73656,"src":"10715:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewards_$79929_memory_ptr","typeString":"struct Gear.StakerRewards memory"}},"id":73726,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10723:6:152","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":79928,"src":"10715:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":73721,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10683:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":73722,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10687:12:152","memberName":"encodePacked","nodeType":"MemberAccess","src":"10683:16:152","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10683:47:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":73718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10651:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":73717,"name":"bytes","nodeType":"ElementaryTypeName","src":"10651:5:152","typeDescriptions":{}}},"id":73719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10657:6:152","memberName":"concat","nodeType":"MemberAccess","src":"10651:12:152","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10651:80:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"10631:100:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":73730,"nodeType":"ExpressionStatement","src":"10631:100:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73644,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73641,"src":"10085:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":73645,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73604,"src":"10089:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73646,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10101:12:152","memberName":"distribution","nodeType":"MemberAccess","referencedDeclaration":79919,"src":"10089:24:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StakerRewards_$79929_memory_ptr_$dyn_memory_ptr","typeString":"struct Gear.StakerRewards memory[] memory"}},"id":73647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10114:6:152","memberName":"length","nodeType":"MemberAccess","src":"10089:31:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10085:35:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73732,"initializationExpression":{"assignments":[73641],"declarations":[{"constant":false,"id":73641,"mutability":"mutable","name":"i","nameLocation":"10078:1:152","nodeType":"VariableDeclaration","scope":73732,"src":"10070:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73640,"name":"uint256","nodeType":"ElementaryTypeName","src":"10070:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73643,"initialValue":{"hexValue":"30","id":73642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10082:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10070:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10122:3:152","subExpression":{"id":73649,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73641,"src":"10124:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73651,"nodeType":"ExpressionStatement","src":"10122:3:152"},"nodeType":"ForStatement","src":"10065:677:152"},{"expression":{"arguments":[{"arguments":[{"id":73737,"name":"distributionBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"10782:17:152","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"expression":{"id":73740,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73604,"src":"10818:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10830:11:152","memberName":"totalAmount","nodeType":"MemberAccess","referencedDeclaration":79921,"src":"10818:23:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":73742,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73604,"src":"10843:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment memory"}},"id":73743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10855:5:152","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":79923,"src":"10843:17:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":73738,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10801:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":73739,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10805:12:152","memberName":"encodePacked","nodeType":"MemberAccess","src":"10801:16:152","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10801:60:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":73735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10769:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":73734,"name":"bytes","nodeType":"ElementaryTypeName","src":"10769:5:152","typeDescriptions":{}}},"id":73736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10775:6:152","memberName":"concat","nodeType":"MemberAccess","src":"10769:12:152","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":73745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10769:93:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":73733,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10759:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":73746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10759:104:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":73610,"id":73747,"nodeType":"Return","src":"10752:111:152"}]},"baseFunctions":[72280],"functionSelector":"7fbe95b5","implemented":true,"kind":"function","modifiers":[],"name":"distributeStakerRewards","nameLocation":"9655:23:152","parameters":{"id":73607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73604,"mutability":"mutable","name":"_commitment","nameLocation":"9715:11:152","nodeType":"VariableDeclaration","scope":73749,"src":"9679:47:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_memory_ptr","typeString":"struct Gear.StakerRewardsCommitment"},"typeName":{"id":73603,"nodeType":"UserDefinedTypeName","pathNode":{"id":73602,"name":"Gear.StakerRewardsCommitment","nameLocations":["9679:4:152","9684:23:152"],"nodeType":"IdentifierPath","referencedDeclaration":79924,"src":"9679:28:152"},"referencedDeclaration":79924,"src":"9679:28:152","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_storage_ptr","typeString":"struct Gear.StakerRewardsCommitment"}},"visibility":"internal"},{"constant":false,"id":73606,"mutability":"mutable","name":"timestamp","nameLocation":"9735:9:152","nodeType":"VariableDeclaration","scope":73749,"src":"9728:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73605,"name":"uint48","nodeType":"ElementaryTypeName","src":"9728:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"9678:67:152"},"returnParameters":{"id":73610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":73749,"src":"9780:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":73608,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9780:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9779:9:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73780,"nodeType":"FunctionDefinition","src":"10876:236:152","nodes":[],"body":{"id":73779,"nodeType":"Block","src":"10961:151:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":73760,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73751,"src":"10986:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73759,"name":"_validateVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74847,"src":"10971:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":73761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10971:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73762,"nodeType":"ExpressionStatement","src":"10971:22:152"},{"expression":{"arguments":[{"id":73764,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73751,"src":"11026:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":73765,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73753,"src":"11034:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":73763,"name":"_validateStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74894,"src":"11003:22:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":73766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11003:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73767,"nodeType":"ExpressionStatement","src":"11003:40:152"},{"expression":{"arguments":[{"id":73772,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73751,"src":"11079:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":73775,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73753,"src":"11095:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":73774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11087:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":73773,"name":"uint160","nodeType":"ElementaryTypeName","src":"11087:7:152","typeDescriptions":{}}},"id":73776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11087:17:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint160","typeString":"uint160"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73768,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"11054:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11054:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11065:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11054:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73771,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11072:6:152","memberName":"append","nodeType":"MemberAccess","referencedDeclaration":81024,"src":"11054:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$_t_uint160_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address,uint160)"}},"id":73777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11054:51:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73778,"nodeType":"ExpressionStatement","src":"11054:51:152"}]},"baseFunctions":[72239],"functionSelector":"05c4fdf9","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":73756,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73751,"src":"10953:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73757,"kind":"modifierInvocation","modifierName":{"id":73755,"name":"vaultOwner","nameLocations":["10942:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":75031,"src":"10942:10:152"},"nodeType":"ModifierInvocation","src":"10942:18:152"}],"name":"registerVault","nameLocation":"10885:13:152","parameters":{"id":73754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73751,"mutability":"mutable","name":"_vault","nameLocation":"10907:6:152","nodeType":"VariableDeclaration","scope":73780,"src":"10899:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73750,"name":"address","nodeType":"ElementaryTypeName","src":"10899:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":73753,"mutability":"mutable","name":"_rewards","nameLocation":"10923:8:152","nodeType":"VariableDeclaration","scope":73780,"src":"10915:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73752,"name":"address","nodeType":"ElementaryTypeName","src":"10915:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10898:34:152"},"returnParameters":{"id":73758,"nodeType":"ParameterList","parameters":[],"src":"10961:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73796,"nodeType":"FunctionDefinition","src":"11118:113:152","nodes":[],"body":{"id":73795,"nodeType":"Block","src":"11182:49:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":73792,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73782,"src":"11218:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73788,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"11192:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11192:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73790,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11203:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11192:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11210:7:152","memberName":"disable","nodeType":"MemberAccess","referencedDeclaration":81118,"src":"11192:25:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address)"}},"id":73793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11192:32:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73794,"nodeType":"ExpressionStatement","src":"11192:32:152"}]},"baseFunctions":[72251],"functionSelector":"3ccce789","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":73785,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73782,"src":"11175:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73786,"kind":"modifierInvocation","modifierName":{"id":73784,"name":"vaultOwner","nameLocations":["11164:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":75031,"src":"11164:10:152"},"nodeType":"ModifierInvocation","src":"11164:17:152"}],"name":"disableVault","nameLocation":"11127:12:152","parameters":{"id":73783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73782,"mutability":"mutable","name":"vault","nameLocation":"11148:5:152","nodeType":"VariableDeclaration","scope":73796,"src":"11140:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73781,"name":"address","nodeType":"ElementaryTypeName","src":"11140:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11139:15:152"},"returnParameters":{"id":73787,"nodeType":"ParameterList","parameters":[],"src":"11182:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73812,"nodeType":"FunctionDefinition","src":"11237:111:152","nodes":[],"body":{"id":73811,"nodeType":"Block","src":"11300:48:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":73808,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73798,"src":"11335:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":73804,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"11310:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11310:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73806,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11321:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11310:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11328:6:152","memberName":"enable","nodeType":"MemberAccess","referencedDeclaration":81071,"src":"11310:24:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$__$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address)"}},"id":73809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11310:31:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73810,"nodeType":"ExpressionStatement","src":"11310:31:152"}]},"baseFunctions":[72257],"functionSelector":"936f4330","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":73801,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73798,"src":"11293:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73802,"kind":"modifierInvocation","modifierName":{"id":73800,"name":"vaultOwner","nameLocations":["11282:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":75031,"src":"11282:10:152"},"nodeType":"ModifierInvocation","src":"11282:17:152"}],"name":"enableVault","nameLocation":"11246:11:152","parameters":{"id":73799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73798,"mutability":"mutable","name":"vault","nameLocation":"11266:5:152","nodeType":"VariableDeclaration","scope":73812,"src":"11258:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73797,"name":"address","nodeType":"ElementaryTypeName","src":"11258:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11257:15:152"},"returnParameters":{"id":73803,"nodeType":"ParameterList","parameters":[],"src":"11300:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":73860,"nodeType":"FunctionDefinition","src":"11354:355:152","nodes":[],"body":{"id":73859,"nodeType":"Block","src":"11421:288:152","nodes":[],"statements":[{"assignments":[73822],"declarations":[{"constant":false,"id":73822,"mutability":"mutable","name":"$","nameLocation":"11447:1:152","nodeType":"VariableDeclaration","scope":73859,"src":"11431:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":73821,"nodeType":"UserDefinedTypeName","pathNode":{"id":73820,"name":"Storage","nameLocations":["11431:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"11431:7:152"},"referencedDeclaration":72078,"src":"11431:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":73825,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":73823,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"11451:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":73824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11451:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"11431:30:152"},{"assignments":[null,73827],"declarations":[null,{"constant":false,"id":73827,"mutability":"mutable","name":"disabledTime","nameLocation":"11481:12:152","nodeType":"VariableDeclaration","scope":73859,"src":"11474:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73826,"name":"uint48","nodeType":"ElementaryTypeName","src":"11474:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":73833,"initialValue":{"arguments":[{"id":73831,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73814,"src":"11515:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73828,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73822,"src":"11497:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11499:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11497:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73830,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11506:8:152","memberName":"getTimes","nodeType":"MemberAccess","referencedDeclaration":81177,"src":"11497:17:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (uint48,uint48)"}},"id":73832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11497:24:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint48_$_t_uint48_$","typeString":"tuple(uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"11471:50:152"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":73845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73834,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73827,"src":"11536:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":73835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11552:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11536:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":73837,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"11557:4:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Time_$59094_$","typeString":"type(library Time)"}},"id":73838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11562:9:152","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":58842,"src":"11557:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":73839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11557:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":73843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73840,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73827,"src":"11576:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":73841,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73822,"src":"11591:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73842,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11593:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"11591:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"11576:33:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"11557:52:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11536:73:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73850,"nodeType":"IfStatement","src":"11532:138:152","trueBody":{"id":73849,"nodeType":"Block","src":"11611:59:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":73846,"name":"VaultGracePeriodNotPassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71941,"src":"11632:25:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11632:27:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":73848,"nodeType":"RevertStatement","src":"11625:34:152"}]}},{"expression":{"arguments":[{"id":73856,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73814,"src":"11696:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":73851,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73822,"src":"11680:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":73854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11682:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"11680:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":73855,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11689:6:152","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":55678,"src":"11680:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) returns (bool)"}},"id":73857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11680:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73858,"nodeType":"ExpressionStatement","src":"11680:22:152"}]},"baseFunctions":[72245],"functionSelector":"2633b70f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":73817,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73814,"src":"11414:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73818,"kind":"modifierInvocation","modifierName":{"id":73816,"name":"vaultOwner","nameLocations":["11403:10:152"],"nodeType":"IdentifierPath","referencedDeclaration":75031,"src":"11403:10:152"},"nodeType":"ModifierInvocation","src":"11403:17:152"}],"name":"unregisterVault","nameLocation":"11363:15:152","parameters":{"id":73815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73814,"mutability":"mutable","name":"vault","nameLocation":"11387:5:152","nodeType":"VariableDeclaration","scope":73860,"src":"11379:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":73813,"name":"address","nodeType":"ElementaryTypeName","src":"11379:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11378:15:152"},"returnParameters":{"id":73819,"nodeType":"ParameterList","parameters":[],"src":"11421:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74055,"nodeType":"FunctionDefinition","src":"11715:1648:152","nodes":[],"body":{"id":74054,"nodeType":"Block","src":"11814:1549:152","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73871,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73864,"src":"11832:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":73872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11848:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11832:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d61782076616c696461746f7273206d7573742062652067726561746572207468616e207a65726f","id":73874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11851:42:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_1ca278eaecfcf123a0ff55dc43f07f4936917259685ee8ab8952762f80124716","typeString":"literal_string \"Max validators must be greater than zero\""},"value":"Max validators must be greater than zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1ca278eaecfcf123a0ff55dc43f07f4936917259685ee8ab8952762f80124716","typeString":"literal_string \"Max validators must be greater than zero\""}],"id":73870,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11824:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":73875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11824:70:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73876,"nodeType":"ExpressionStatement","src":"11824:70:152"},{"assignments":[73881,73884],"declarations":[{"constant":false,"id":73881,"mutability":"mutable","name":"activeOperators","nameLocation":"11923:15:152","nodeType":"VariableDeclaration","scope":74054,"src":"11906:32:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":73879,"name":"address","nodeType":"ElementaryTypeName","src":"11906:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73880,"nodeType":"ArrayTypeName","src":"11906:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":73884,"mutability":"mutable","name":"stakes","nameLocation":"11957:6:152","nodeType":"VariableDeclaration","scope":74054,"src":"11940:23:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":73882,"name":"uint256","nodeType":"ElementaryTypeName","src":"11940:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73883,"nodeType":"ArrayTypeName","src":"11940:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":73888,"initialValue":{"arguments":[{"id":73886,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73862,"src":"11993:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":73885,"name":"getActiveOperatorsStakeAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74198,"src":"11967:25:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint48) view returns (address[] memory,uint256[] memory)"}},"id":73887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11967:29:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"11905:91:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":73889,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"12011:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12027:6:152","memberName":"length","nodeType":"MemberAccess","src":"12011:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":73891,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73864,"src":"12037:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12011:39:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73896,"nodeType":"IfStatement","src":"12007:92:152","trueBody":{"id":73895,"nodeType":"Block","src":"12052:47:152","statements":[{"expression":{"id":73893,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"12073:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":73869,"id":73894,"nodeType":"Return","src":"12066:22:152"}]}},{"assignments":[73898],"declarations":[{"constant":false,"id":73898,"mutability":"mutable","name":"n","nameLocation":"12151:1:152","nodeType":"VariableDeclaration","scope":74054,"src":"12143:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73897,"name":"uint256","nodeType":"ElementaryTypeName","src":"12143:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73901,"initialValue":{"expression":{"id":73899,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"12155:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12171:6:152","memberName":"length","nodeType":"MemberAccess","src":"12155:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12143:34:152"},{"body":{"id":73979,"nodeType":"Block","src":"12219:336:152","statements":[{"body":{"id":73977,"nodeType":"Block","src":"12273:272:152","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":73926,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73884,"src":"12295:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73928,"indexExpression":{"id":73927,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12302:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12295:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"baseExpression":{"id":73929,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73884,"src":"12307:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73933,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73930,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12314:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12318:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12314:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12307:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12295:25:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73976,"nodeType":"IfStatement","src":"12291:240:152","trueBody":{"id":73975,"nodeType":"Block","src":"12322:209:152","statements":[{"expression":{"id":73953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":73935,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73884,"src":"12345:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73937,"indexExpression":{"id":73936,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12352:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12345:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":73938,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73884,"src":"12356:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73942,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73939,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12363:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12367:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12363:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12356:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":73943,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12344:26:152","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":73944,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73884,"src":"12374:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73948,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73945,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12381:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12385:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12381:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12374:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":73949,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73884,"src":"12389:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73951,"indexExpression":{"id":73950,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12396:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12389:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":73952,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12373:26:152","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"12344:55:152","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73954,"nodeType":"ExpressionStatement","src":"12344:55:152"},{"expression":{"id":73973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":73955,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"12422:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73957,"indexExpression":{"id":73956,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12438:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12422:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":73958,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"12442:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73962,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73959,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12458:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12462:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12458:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12442:22:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73963,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12421:44:152","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":73964,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"12469:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73968,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73965,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12485:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":73966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12489:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12485:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12469:22:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":73969,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"12493:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73971,"indexExpression":{"id":73970,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12509:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12493:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":73972,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12468:44:152","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"src":"12421:91:152","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73974,"nodeType":"ExpressionStatement","src":"12421:91:152"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73916,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12253:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73917,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73898,"src":"12257:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":73918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12261:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12257:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":73920,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73903,"src":"12265:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12257:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12253:13:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73978,"initializationExpression":{"assignments":[73913],"declarations":[{"constant":false,"id":73913,"mutability":"mutable","name":"j","nameLocation":"12246:1:152","nodeType":"VariableDeclaration","scope":73978,"src":"12238:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73912,"name":"uint256","nodeType":"ElementaryTypeName","src":"12238:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73915,"initialValue":{"hexValue":"30","id":73914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12250:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12238:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12268:3:152","subExpression":{"id":73923,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73913,"src":"12268:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73925,"nodeType":"ExpressionStatement","src":"12268:3:152"},"nodeType":"ForStatement","src":"12233:312:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73906,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73903,"src":"12207:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":73907,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73898,"src":"12211:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12207:5:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":73980,"initializationExpression":{"assignments":[73903],"declarations":[{"constant":false,"id":73903,"mutability":"mutable","name":"i","nameLocation":"12200:1:152","nodeType":"VariableDeclaration","scope":73980,"src":"12192:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73902,"name":"uint256","nodeType":"ElementaryTypeName","src":"12192:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73905,"initialValue":{"hexValue":"30","id":73904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12204:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12192:13:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":73910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12214:3:152","subExpression":{"id":73909,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73903,"src":"12214:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":73911,"nodeType":"ExpressionStatement","src":"12214:3:152"},"nodeType":"ForStatement","src":"12187:368:152"},{"assignments":[73982],"declarations":[{"constant":false,"id":73982,"mutability":"mutable","name":"sameStakeCount","nameLocation":"12630:14:152","nodeType":"VariableDeclaration","scope":74054,"src":"12622:22:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73981,"name":"uint256","nodeType":"ElementaryTypeName","src":"12622:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73984,"initialValue":{"hexValue":"31","id":73983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12647:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"12622:26:152"},{"assignments":[73986],"declarations":[{"constant":false,"id":73986,"mutability":"mutable","name":"lastStake","nameLocation":"12666:9:152","nodeType":"VariableDeclaration","scope":74054,"src":"12658:17:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73985,"name":"uint256","nodeType":"ElementaryTypeName","src":"12658:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73992,"initialValue":{"baseExpression":{"id":73987,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73884,"src":"12678:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":73991,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":73990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73988,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73864,"src":"12685:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":73989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12701:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12685:17:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12678:25:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12658:45:152"},{"body":{"id":74016,"nodeType":"Block","src":"12778:123:152","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":74004,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73884,"src":"12796:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":74006,"indexExpression":{"id":74005,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73994,"src":"12803:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12796:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":74007,"name":"lastStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73986,"src":"12809:9:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12796:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74011,"nodeType":"IfStatement","src":"12792:66:152","trueBody":{"id":74010,"nodeType":"Block","src":"12820:38:152","statements":[{"id":74009,"nodeType":"Break","src":"12838:5:152"}]}},{"expression":{"id":74014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74012,"name":"sameStakeCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73982,"src":"12871:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":74013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12889:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12871:19:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74015,"nodeType":"ExpressionStatement","src":"12871:19:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":73997,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73994,"src":"12745:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":73998,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"12749:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":73999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12765:6:152","memberName":"length","nodeType":"MemberAccess","src":"12749:22:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12745:26:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74017,"initializationExpression":{"assignments":[73994],"declarations":[{"constant":false,"id":73994,"mutability":"mutable","name":"i","nameLocation":"12726:1:152","nodeType":"VariableDeclaration","scope":74017,"src":"12718:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73993,"name":"uint256","nodeType":"ElementaryTypeName","src":"12718:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":73996,"initialValue":{"id":73995,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73864,"src":"12730:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12718:25:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12773:3:152","subExpression":{"id":74001,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73994,"src":"12773:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74003,"nodeType":"ExpressionStatement","src":"12773:3:152"},"nodeType":"ForStatement","src":"12713:188:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74018,"name":"sameStakeCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73982,"src":"12915:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":74019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12932:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12915:18:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74050,"nodeType":"IfStatement","src":"12911:316:152","trueBody":{"id":74049,"nodeType":"Block","src":"12935:292:152","statements":[{"assignments":[74022],"declarations":[{"constant":false,"id":74022,"mutability":"mutable","name":"randomIndex","nameLocation":"13046:11:152","nodeType":"VariableDeclaration","scope":74049,"src":"13038:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74021,"name":"uint256","nodeType":"ElementaryTypeName","src":"13038:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74034,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":74028,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73862,"src":"13095:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":74026,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13078:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74027,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13082:12:152","memberName":"encodePacked","nodeType":"MemberAccess","src":"13078:16:152","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":74029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13078:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74025,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"13068:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":74030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13068:31:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":74024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13060:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":74023,"name":"uint256","nodeType":"ElementaryTypeName","src":"13060:7:152","typeDescriptions":{}}},"id":74031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13060:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":74032,"name":"sameStakeCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73982,"src":"13103:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13060:57:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13038:79:152"},{"expression":{"id":74047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":74035,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"13131:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":74039,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74036,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73864,"src":"13147:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":74037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13163:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13147:17:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13131:34:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":74040,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"13168:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":74046,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74041,"name":"maxValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73864,"src":"13184:13:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":74042,"name":"randomIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74022,"src":"13200:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13184:27:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":74044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13214:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13184:31:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13168:48:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13131:85:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74048,"nodeType":"ExpressionStatement","src":"13131:85:152"}]}},{"AST":{"nativeSrc":"13262:62:152","nodeType":"YulBlock","src":"13262:62:152","statements":[{"expression":{"arguments":[{"name":"activeOperators","nativeSrc":"13283:15:152","nodeType":"YulIdentifier","src":"13283:15:152"},{"name":"maxValidators","nativeSrc":"13300:13:152","nodeType":"YulIdentifier","src":"13300:13:152"}],"functionName":{"name":"mstore","nativeSrc":"13276:6:152","nodeType":"YulIdentifier","src":"13276:6:152"},"nativeSrc":"13276:38:152","nodeType":"YulFunctionCall","src":"13276:38:152"},"nativeSrc":"13276:38:152","nodeType":"YulExpressionStatement","src":"13276:38:152"}]},"evmVersion":"prague","externalReferences":[{"declaration":73881,"isOffset":false,"isSlot":false,"src":"13283:15:152","valueSize":1},{"declaration":73864,"isOffset":false,"isSlot":false,"src":"13300:13:152","valueSize":1}],"flags":["memory-safe"],"id":74051,"nodeType":"InlineAssembly","src":"13237:87:152"},{"expression":{"id":74052,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73881,"src":"13341:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":73869,"id":74053,"nodeType":"Return","src":"13334:22:152"}]},"baseFunctions":[72189],"functionSelector":"6e5c7932","implemented":true,"kind":"function","modifiers":[],"name":"makeElectionAt","nameLocation":"11724:14:152","parameters":{"id":73865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73862,"mutability":"mutable","name":"ts","nameLocation":"11746:2:152","nodeType":"VariableDeclaration","scope":74055,"src":"11739:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":73861,"name":"uint48","nodeType":"ElementaryTypeName","src":"11739:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":73864,"mutability":"mutable","name":"maxValidators","nameLocation":"11758:13:152","nodeType":"VariableDeclaration","scope":74055,"src":"11750:21:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":73863,"name":"uint256","nodeType":"ElementaryTypeName","src":"11750:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11738:34:152"},"returnParameters":{"id":73869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":73868,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74055,"src":"11796:16:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":73866,"name":"address","nodeType":"ElementaryTypeName","src":"11796:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":73867,"nodeType":"ArrayTypeName","src":"11796:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"11795:18:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":74096,"nodeType":"FunctionDefinition","src":"13369:372:152","nodes":[],"body":{"id":74095,"nodeType":"Block","src":"13483:258:152","nodes":[],"statements":[{"assignments":[74068,74070],"declarations":[{"constant":false,"id":74068,"mutability":"mutable","name":"enabledTime","nameLocation":"13501:11:152","nodeType":"VariableDeclaration","scope":74095,"src":"13494:18:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74067,"name":"uint48","nodeType":"ElementaryTypeName","src":"13494:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74070,"mutability":"mutable","name":"disabledTime","nameLocation":"13521:12:152","nodeType":"VariableDeclaration","scope":74095,"src":"13514:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74069,"name":"uint48","nodeType":"ElementaryTypeName","src":"13514:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74077,"initialValue":{"arguments":[{"id":74075,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74057,"src":"13567:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74071,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"13537:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13537:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13548:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"13537:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13558:8:152","memberName":"getTimes","nodeType":"MemberAccess","referencedDeclaration":81177,"src":"13537:29:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (uint48,uint48)"}},"id":74076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13537:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint48_$_t_uint48_$","typeString":"tuple(uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"13493:83:152"},{"condition":{"id":74083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13590:44:152","subExpression":{"arguments":[{"id":74079,"name":"enabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74068,"src":"13604:11:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74080,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74070,"src":"13617:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74081,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74059,"src":"13631:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74078,"name":"_wasActiveAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74483,"src":"13591:12:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$_t_uint48_$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48,uint48,uint48) pure returns (bool)"}},"id":74082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13591:43:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74087,"nodeType":"IfStatement","src":"13586:83:152","trueBody":{"id":74086,"nodeType":"Block","src":"13636:33:152","statements":[{"expression":{"hexValue":"30","id":74084,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13657:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":74066,"id":74085,"nodeType":"Return","src":"13650:8:152"}]}},{"expression":{"id":74093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74088,"name":"stake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74065,"src":"13679:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":74090,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74057,"src":"13721:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74091,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74059,"src":"13731:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74089,"name":"_collectOperatorStakeFromVaultsAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74454,"src":"13687:33:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint48_$returns$_t_uint256_$","typeString":"function (address,uint48) view returns (uint256)"}},"id":74092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13687:47:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13679:55:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74094,"nodeType":"ExpressionStatement","src":"13679:55:152"}]},"baseFunctions":[72199],"functionSelector":"d99ddfc7","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":74062,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74059,"src":"13455:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"id":74063,"kind":"modifierInvocation","modifierName":{"id":74061,"name":"validTimestamp","nameLocations":["13440:14:152"],"nodeType":"IdentifierPath","referencedDeclaration":74904,"src":"13440:14:152"},"nodeType":"ModifierInvocation","src":"13440:18:152"}],"name":"getOperatorStakeAt","nameLocation":"13378:18:152","parameters":{"id":74060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74057,"mutability":"mutable","name":"operator","nameLocation":"13405:8:152","nodeType":"VariableDeclaration","scope":74096,"src":"13397:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74056,"name":"address","nodeType":"ElementaryTypeName","src":"13397:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74059,"mutability":"mutable","name":"ts","nameLocation":"13422:2:152","nodeType":"VariableDeclaration","scope":74096,"src":"13415:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74058,"name":"uint48","nodeType":"ElementaryTypeName","src":"13415:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"13396:29:152"},"returnParameters":{"id":74066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74065,"mutability":"mutable","name":"stake","nameLocation":"13476:5:152","nodeType":"VariableDeclaration","scope":74096,"src":"13468:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74064,"name":"uint256","nodeType":"ElementaryTypeName","src":"13468:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13467:15:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":74198,"nodeType":"FunctionDefinition","src":"13784:940:152","nodes":[],"body":{"id":74197,"nodeType":"Block","src":"13965:759:152","nodes":[],"statements":[{"assignments":[74112],"declarations":[{"constant":false,"id":74112,"mutability":"mutable","name":"$","nameLocation":"13991:1:152","nodeType":"VariableDeclaration","scope":74197,"src":"13975:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74111,"nodeType":"UserDefinedTypeName","pathNode":{"id":74110,"name":"Storage","nameLocations":["13975:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"13975:7:152"},"referencedDeclaration":72078,"src":"13975:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74115,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74113,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"13995:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13995:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"13975:30:152"},{"expression":{"id":74125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74116,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74105,"src":"14015:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":74120,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74112,"src":"14047:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14049:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"14047:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14059:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"14047:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":74123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14047:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":74119,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"14033:13:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":74117,"name":"address","nodeType":"ElementaryTypeName","src":"14037:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74118,"nodeType":"ArrayTypeName","src":"14037:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":74124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14033:35:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"14015:53:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":74126,"nodeType":"ExpressionStatement","src":"14015:53:152"},{"expression":{"id":74136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74127,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74108,"src":"14078:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":74131,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74112,"src":"14101:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14103:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"14101:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14113:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"14101:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":74134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14101:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":74130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"14087:13:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":74128,"name":"uint256","nodeType":"ElementaryTypeName","src":"14091:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74129,"nodeType":"ArrayTypeName","src":"14091:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":74135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14087:35:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"14078:44:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":74137,"nodeType":"ExpressionStatement","src":"14078:44:152"},{"assignments":[74139],"declarations":[{"constant":false,"id":74139,"mutability":"mutable","name":"operatorIdx","nameLocation":"14141:11:152","nodeType":"VariableDeclaration","scope":74197,"src":"14133:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74138,"name":"uint256","nodeType":"ElementaryTypeName","src":"14133:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74141,"initialValue":{"hexValue":"30","id":74140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14155:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14133:23:152"},{"body":{"id":74194,"nodeType":"Block","src":"14214:369:152","statements":[{"assignments":[74155,74157,74159],"declarations":[{"constant":false,"id":74155,"mutability":"mutable","name":"operator","nameLocation":"14237:8:152","nodeType":"VariableDeclaration","scope":74194,"src":"14229:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74154,"name":"address","nodeType":"ElementaryTypeName","src":"14229:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74157,"mutability":"mutable","name":"enabled","nameLocation":"14254:7:152","nodeType":"VariableDeclaration","scope":74194,"src":"14247:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74156,"name":"uint48","nodeType":"ElementaryTypeName","src":"14247:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74159,"mutability":"mutable","name":"disabled","nameLocation":"14270:8:152","nodeType":"VariableDeclaration","scope":74194,"src":"14263:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74158,"name":"uint48","nodeType":"ElementaryTypeName","src":"14263:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74165,"initialValue":{"arguments":[{"id":74163,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74143,"src":"14306:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":74160,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74112,"src":"14282:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14284:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"14282:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14294:11:152","memberName":"atWithTimes","nodeType":"MemberAccess","referencedDeclaration":81153,"src":"14282:23:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint48,uint48)"}},"id":74164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14282:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint48_$_t_uint48_$","typeString":"tuple(address,uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"14228:80:152"},{"condition":{"id":74171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14327:36:152","subExpression":{"arguments":[{"id":74167,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74157,"src":"14341:7:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74168,"name":"disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74159,"src":"14350:8:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74169,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74098,"src":"14360:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74166,"name":"_wasActiveAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74483,"src":"14328:12:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$_t_uint48_$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48,uint48,uint48) pure returns (bool)"}},"id":74170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14328:35:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74174,"nodeType":"IfStatement","src":"14323:83:152","trueBody":{"id":74173,"nodeType":"Block","src":"14365:41:152","statements":[{"id":74172,"nodeType":"Continue","src":"14383:8:152"}]}},{"expression":{"id":74179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":74175,"name":"activeOperators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74105,"src":"14420:15:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":74177,"indexExpression":{"id":74176,"name":"operatorIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74139,"src":"14436:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14420:28:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":74178,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74155,"src":"14451:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14420:39:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74180,"nodeType":"ExpressionStatement","src":"14420:39:152"},{"expression":{"id":74188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":74181,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74108,"src":"14473:6:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":74183,"indexExpression":{"id":74182,"name":"operatorIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74139,"src":"14480:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14473:19:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":74185,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74155,"src":"14529:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74186,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74098,"src":"14539:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74184,"name":"_collectOperatorStakeFromVaultsAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74454,"src":"14495:33:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint48_$returns$_t_uint256_$","typeString":"function (address,uint48) view returns (uint256)"}},"id":74187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14495:47:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14473:69:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74189,"nodeType":"ExpressionStatement","src":"14473:69:152"},{"expression":{"id":74192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74190,"name":"operatorIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74139,"src":"14556:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":74191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14571:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14556:16:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74193,"nodeType":"ExpressionStatement","src":"14556:16:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74145,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74143,"src":"14183:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":74146,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74112,"src":"14187:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14189:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"14187:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74148,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14199:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"14187:18:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":74149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14187:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14183:24:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74195,"initializationExpression":{"assignments":[74143],"declarations":[{"constant":false,"id":74143,"mutability":"mutable","name":"i","nameLocation":"14180:1:152","nodeType":"VariableDeclaration","scope":74195,"src":"14172:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74142,"name":"uint256","nodeType":"ElementaryTypeName","src":"14172:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74144,"nodeType":"VariableDeclarationStatement","src":"14172:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14209:3:152","subExpression":{"id":74151,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74143,"src":"14211:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74153,"nodeType":"ExpressionStatement","src":"14209:3:152"},"nodeType":"ForStatement","src":"14167:416:152"},{"AST":{"nativeSrc":"14618:100:152","nodeType":"YulBlock","src":"14618:100:152","statements":[{"expression":{"arguments":[{"name":"activeOperators","nativeSrc":"14639:15:152","nodeType":"YulIdentifier","src":"14639:15:152"},{"name":"operatorIdx","nativeSrc":"14656:11:152","nodeType":"YulIdentifier","src":"14656:11:152"}],"functionName":{"name":"mstore","nativeSrc":"14632:6:152","nodeType":"YulIdentifier","src":"14632:6:152"},"nativeSrc":"14632:36:152","nodeType":"YulFunctionCall","src":"14632:36:152"},"nativeSrc":"14632:36:152","nodeType":"YulExpressionStatement","src":"14632:36:152"},{"expression":{"arguments":[{"name":"stakes","nativeSrc":"14688:6:152","nodeType":"YulIdentifier","src":"14688:6:152"},{"name":"operatorIdx","nativeSrc":"14696:11:152","nodeType":"YulIdentifier","src":"14696:11:152"}],"functionName":{"name":"mstore","nativeSrc":"14681:6:152","nodeType":"YulIdentifier","src":"14681:6:152"},"nativeSrc":"14681:27:152","nodeType":"YulFunctionCall","src":"14681:27:152"},"nativeSrc":"14681:27:152","nodeType":"YulExpressionStatement","src":"14681:27:152"}]},"evmVersion":"prague","externalReferences":[{"declaration":74105,"isOffset":false,"isSlot":false,"src":"14639:15:152","valueSize":1},{"declaration":74139,"isOffset":false,"isSlot":false,"src":"14656:11:152","valueSize":1},{"declaration":74139,"isOffset":false,"isSlot":false,"src":"14696:11:152","valueSize":1},{"declaration":74108,"isOffset":false,"isSlot":false,"src":"14688:6:152","valueSize":1}],"flags":["memory-safe"],"id":74196,"nodeType":"InlineAssembly","src":"14593:125:152"}]},"functionSelector":"b5e5ad12","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":74101,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74098,"src":"13881:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"id":74102,"kind":"modifierInvocation","modifierName":{"id":74100,"name":"validTimestamp","nameLocations":["13866:14:152"],"nodeType":"IdentifierPath","referencedDeclaration":74904,"src":"13866:14:152"},"nodeType":"ModifierInvocation","src":"13866:18:152"}],"name":"getActiveOperatorsStakeAt","nameLocation":"13793:25:152","parameters":{"id":74099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74098,"mutability":"mutable","name":"ts","nameLocation":"13826:2:152","nodeType":"VariableDeclaration","scope":74198,"src":"13819:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74097,"name":"uint48","nodeType":"ElementaryTypeName","src":"13819:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"13818:11:152"},"returnParameters":{"id":74109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74105,"mutability":"mutable","name":"activeOperators","nameLocation":"13919:15:152","nodeType":"VariableDeclaration","scope":74198,"src":"13902:32:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":74103,"name":"address","nodeType":"ElementaryTypeName","src":"13902:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74104,"nodeType":"ArrayTypeName","src":"13902:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":74108,"mutability":"mutable","name":"stakes","nameLocation":"13953:6:152","nodeType":"VariableDeclaration","scope":74198,"src":"13936:23:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":74106,"name":"uint256","nodeType":"ElementaryTypeName","src":"13936:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74107,"nodeType":"ArrayTypeName","src":"13936:9:152","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"13901:59:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":74314,"nodeType":"FunctionDefinition","src":"14730:952:152","nodes":[],"body":{"id":74313,"nodeType":"Block","src":"14788:894:152","nodes":[],"statements":[{"assignments":[74207],"declarations":[{"constant":false,"id":74207,"mutability":"mutable","name":"$","nameLocation":"14814:1:152","nodeType":"VariableDeclaration","scope":74313,"src":"14798:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74206,"nodeType":"UserDefinedTypeName","pathNode":{"id":74205,"name":"Storage","nameLocations":["14798:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"14798:7:152"},"referencedDeclaration":72078,"src":"14798:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74210,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74208,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"14818:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14818:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"14798:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74211,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14843:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":74212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14847:6:152","memberName":"sender","nodeType":"MemberAccess","src":"14843:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":74213,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74207,"src":"14857:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74214,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14859:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"14857:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14869:18:152","memberName":"roleSlashRequester","nodeType":"MemberAccess","referencedDeclaration":80057,"src":"14857:30:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14843:44:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74221,"nodeType":"IfStatement","src":"14839:101:152","trueBody":{"id":74220,"nodeType":"Block","src":"14889:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74217,"name":"NotSlashRequester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72001,"src":"14910:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14910:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74219,"nodeType":"RevertStatement","src":"14903:26:152"}]}},{"body":{"id":74311,"nodeType":"Block","src":"14988:688:152","statements":[{"assignments":[74234],"declarations":[{"constant":false,"id":74234,"mutability":"mutable","name":"slashData","nameLocation":"15021:9:152","nodeType":"VariableDeclaration","scope":74311,"src":"15002:28:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData"},"typeName":{"id":74233,"nodeType":"UserDefinedTypeName","pathNode":{"id":74232,"name":"SlashData","nameLocations":["15002:9:152"],"nodeType":"IdentifierPath","referencedDeclaration":72092,"src":"15002:9:152"},"referencedDeclaration":72092,"src":"15002:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_storage_ptr","typeString":"struct IMiddleware.SlashData"}},"visibility":"internal"}],"id":74238,"initialValue":{"baseExpression":{"id":74235,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74202,"src":"15033:4:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashData_$72092_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata[] calldata"}},"id":74237,"indexExpression":{"id":74236,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74223,"src":"15038:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15033:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"nodeType":"VariableDeclarationStatement","src":"15002:38:152"},{"condition":{"id":74245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"15058:41:152","subExpression":{"arguments":[{"expression":{"id":74242,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74234,"src":"15080:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15090:8:152","memberName":"operator","nodeType":"MemberAccess","referencedDeclaration":72085,"src":"15080:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":74239,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74207,"src":"15059:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15061:9:152","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":72074,"src":"15059:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74241,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15071:8:152","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":55718,"src":"15059:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (bool)"}},"id":74244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15059:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74250,"nodeType":"IfStatement","src":"15054:110:152","trueBody":{"id":74249,"nodeType":"Block","src":"15101:63:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74246,"name":"NotRegisteredOperator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71989,"src":"15126:21:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15126:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74248,"nodeType":"RevertStatement","src":"15119:30:152"}]}},{"body":{"id":74309,"nodeType":"Block","src":"15228:438:152","statements":[{"assignments":[74264],"declarations":[{"constant":false,"id":74264,"mutability":"mutable","name":"vaultData","nameLocation":"15270:9:152","nodeType":"VariableDeclaration","scope":74309,"src":"15246:33:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData"},"typeName":{"id":74263,"nodeType":"UserDefinedTypeName","pathNode":{"id":74262,"name":"VaultSlashData","nameLocations":["15246:14:152"],"nodeType":"IdentifierPath","referencedDeclaration":72083,"src":"15246:14:152"},"referencedDeclaration":72083,"src":"15246:14:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_storage_ptr","typeString":"struct IMiddleware.VaultSlashData"}},"visibility":"internal"}],"id":74269,"initialValue":{"baseExpression":{"expression":{"id":74265,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74234,"src":"15282:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15292:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72091,"src":"15282:16:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_VaultSlashData_$72083_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata[] calldata"}},"id":74268,"indexExpression":{"id":74267,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74252,"src":"15299:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15282:19:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata"}},"nodeType":"VariableDeclarationStatement","src":"15246:55:152"},{"condition":{"id":74276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"15324:35:152","subExpression":{"arguments":[{"expression":{"id":74273,"name":"vaultData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74264,"src":"15343:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata"}},"id":74274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15353:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":72080,"src":"15343:15:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":74270,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74207,"src":"15325:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15327:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"15325:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15334:8:152","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":55718,"src":"15325:17:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (bool)"}},"id":74275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15325:34:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74281,"nodeType":"IfStatement","src":"15320:109:152","trueBody":{"id":74280,"nodeType":"Block","src":"15361:68:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74277,"name":"NotRegisteredVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71986,"src":"15390:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15390:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74279,"nodeType":"RevertStatement","src":"15383:27:152"}]}},{"assignments":[74283],"declarations":[{"constant":false,"id":74283,"mutability":"mutable","name":"slasher","nameLocation":"15455:7:152","nodeType":"VariableDeclaration","scope":74309,"src":"15447:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74282,"name":"address","nodeType":"ElementaryTypeName","src":"15447:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":74290,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":74285,"name":"vaultData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74264,"src":"15472:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata"}},"id":74286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15482:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":72080,"src":"15472:15:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74284,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"15465:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15465:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15489:7:152","memberName":"slasher","nodeType":"MemberAccess","referencedDeclaration":65679,"src":"15465:31:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15465:33:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"15447:51:152"},{"expression":{"arguments":[{"expression":{"id":74295,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74207,"src":"15572:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74296,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15574:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"15572:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":74297,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74234,"src":"15586:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15596:8:152","memberName":"operator","nodeType":"MemberAccess","referencedDeclaration":72085,"src":"15586:18:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":74299,"name":"vaultData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74264,"src":"15606:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSlashData_$72083_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata"}},"id":74300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15616:6:152","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":72082,"src":"15606:16:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":74301,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74234,"src":"15624:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15634:2:152","memberName":"ts","nodeType":"MemberAccess","referencedDeclaration":72087,"src":"15624:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"arguments":[{"hexValue":"30","id":74305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15648:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74304,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15638:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74303,"name":"bytes","nodeType":"ElementaryTypeName","src":"15642:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15638:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":74292,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74283,"src":"15529:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74291,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"15516:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15516:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15559:12:152","memberName":"requestSlash","nodeType":"MemberAccess","referencedDeclaration":65240,"src":"15516:55:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint48_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes32,address,uint256,uint48,bytes memory) external returns (uint256)"}},"id":74307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15516:135:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74308,"nodeType":"ExpressionStatement","src":"15516:135:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74254,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74252,"src":"15194:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":74255,"name":"slashData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74234,"src":"15198:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata"}},"id":74256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15208:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72091,"src":"15198:16:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_VaultSlashData_$72083_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.VaultSlashData calldata[] calldata"}},"id":74257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15215:6:152","memberName":"length","nodeType":"MemberAccess","src":"15198:23:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15194:27:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74310,"initializationExpression":{"assignments":[74252],"declarations":[{"constant":false,"id":74252,"mutability":"mutable","name":"j","nameLocation":"15191:1:152","nodeType":"VariableDeclaration","scope":74310,"src":"15183:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74251,"name":"uint256","nodeType":"ElementaryTypeName","src":"15183:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74253,"nodeType":"VariableDeclarationStatement","src":"15183:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15223:3:152","subExpression":{"id":74259,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74252,"src":"15225:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74261,"nodeType":"ExpressionStatement","src":"15223:3:152"},"nodeType":"ForStatement","src":"15178:488:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74225,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74223,"src":"14966:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74226,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74202,"src":"14970:4:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashData_$72092_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashData calldata[] calldata"}},"id":74227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14975:6:152","memberName":"length","nodeType":"MemberAccess","src":"14970:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14966:15:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74312,"initializationExpression":{"assignments":[74223],"declarations":[{"constant":false,"id":74223,"mutability":"mutable","name":"i","nameLocation":"14963:1:152","nodeType":"VariableDeclaration","scope":74312,"src":"14955:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74222,"name":"uint256","nodeType":"ElementaryTypeName","src":"14955:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74224,"nodeType":"VariableDeclarationStatement","src":"14955:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14983:3:152","subExpression":{"id":74229,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74223,"src":"14985:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74231,"nodeType":"ExpressionStatement","src":"14983:3:152"},"nodeType":"ForStatement","src":"14950:726:152"}]},"baseFunctions":[72206],"functionSelector":"0a71094c","implemented":true,"kind":"function","modifiers":[],"name":"requestSlash","nameLocation":"14739:12:152","parameters":{"id":74203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74202,"mutability":"mutable","name":"data","nameLocation":"14773:4:152","nodeType":"VariableDeclaration","scope":74314,"src":"14752:25:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashData_$72092_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashData[]"},"typeName":{"baseType":{"id":74200,"nodeType":"UserDefinedTypeName","pathNode":{"id":74199,"name":"SlashData","nameLocations":["14752:9:152"],"nodeType":"IdentifierPath","referencedDeclaration":72092,"src":"14752:9:152"},"referencedDeclaration":72092,"src":"14752:9:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashData_$72092_storage_ptr","typeString":"struct IMiddleware.SlashData"}},"id":74201,"nodeType":"ArrayTypeName","src":"14752:11:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashData_$72092_storage_$dyn_storage_ptr","typeString":"struct IMiddleware.SlashData[]"}},"visibility":"internal"}],"src":"14751:27:152"},"returnParameters":{"id":74204,"nodeType":"ParameterList","parameters":[],"src":"14788:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74383,"nodeType":"FunctionDefinition","src":"15688:528:152","nodes":[],"body":{"id":74382,"nodeType":"Block","src":"15755:461:152","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74321,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15769:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":74322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15773:6:152","memberName":"sender","nodeType":"MemberAccess","src":"15769:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74323,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"15783:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15783:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74325,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15794:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"15783:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15804:17:152","memberName":"roleSlashExecutor","nodeType":"MemberAccess","referencedDeclaration":80059,"src":"15783:38:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15769:52:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74332,"nodeType":"IfStatement","src":"15765:108:152","trueBody":{"id":74331,"nodeType":"Block","src":"15823:50:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74328,"name":"NotSlashExecutor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72004,"src":"15844:16:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15844:18:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74330,"nodeType":"RevertStatement","src":"15837:25:152"}]}},{"body":{"id":74380,"nodeType":"Block","src":"15924:286:152","statements":[{"assignments":[74345],"declarations":[{"constant":false,"id":74345,"mutability":"mutable","name":"slash","nameLocation":"15963:5:152","nodeType":"VariableDeclaration","scope":74380,"src":"15938:30:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier"},"typeName":{"id":74344,"nodeType":"UserDefinedTypeName","pathNode":{"id":74343,"name":"SlashIdentifier","nameLocations":["15938:15:152"],"nodeType":"IdentifierPath","referencedDeclaration":72097,"src":"15938:15:152"},"referencedDeclaration":72097,"src":"15938:15:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_storage_ptr","typeString":"struct IMiddleware.SlashIdentifier"}},"visibility":"internal"}],"id":74349,"initialValue":{"baseExpression":{"id":74346,"name":"slashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74318,"src":"15971:7:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashIdentifier_$72097_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata[] calldata"}},"id":74348,"indexExpression":{"id":74347,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74334,"src":"15979:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15971:10:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata"}},"nodeType":"VariableDeclarationStatement","src":"15938:43:152"},{"condition":{"id":74357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16000:40:152","subExpression":{"arguments":[{"expression":{"id":74354,"name":"slash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74345,"src":"16028:5:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata"}},"id":74355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16034:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":72094,"src":"16028:11:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74350,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"16001:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16001:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16012:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"16001:17:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74353,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16019:8:152","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":55718,"src":"16001:26:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (bool)"}},"id":74356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16001:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74362,"nodeType":"IfStatement","src":"15996:106:152","trueBody":{"id":74361,"nodeType":"Block","src":"16042:60:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74358,"name":"NotRegisteredVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71986,"src":"16067:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16067:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74360,"nodeType":"RevertStatement","src":"16060:27:152"}]}},{"expression":{"arguments":[{"expression":{"id":74372,"name":"slash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74345,"src":"16173:5:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata"}},"id":74373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16179:5:152","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":72096,"src":"16173:11:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":74376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16196:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74375,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"16186:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74374,"name":"bytes","nodeType":"ElementaryTypeName","src":"16190:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16186:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":74365,"name":"slash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74345,"src":"16136:5:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata"}},"id":74366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16142:5:152","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":72094,"src":"16136:11:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74364,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"16129:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16129:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16149:7:152","memberName":"slasher","nodeType":"MemberAccess","referencedDeclaration":65679,"src":"16129:27:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16129:29:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74363,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"16116:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16116:43:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16160:12:152","memberName":"executeSlash","nodeType":"MemberAccess","referencedDeclaration":65250,"src":"16116:56:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,bytes memory) external returns (uint256)"}},"id":74378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16116:83:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74379,"nodeType":"ExpressionStatement","src":"16116:83:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74336,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74334,"src":"15899:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74337,"name":"slashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74318,"src":"15903:7:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashIdentifier_$72097_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier calldata[] calldata"}},"id":74338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15911:6:152","memberName":"length","nodeType":"MemberAccess","src":"15903:14:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15899:18:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74381,"initializationExpression":{"assignments":[74334],"declarations":[{"constant":false,"id":74334,"mutability":"mutable","name":"i","nameLocation":"15896:1:152","nodeType":"VariableDeclaration","scope":74381,"src":"15888:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74333,"name":"uint256","nodeType":"ElementaryTypeName","src":"15888:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74335,"nodeType":"VariableDeclarationStatement","src":"15888:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15919:3:152","subExpression":{"id":74340,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74334,"src":"15921:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74342,"nodeType":"ExpressionStatement","src":"15919:3:152"},"nodeType":"ForStatement","src":"15883:327:152"}]},"baseFunctions":[72213],"functionSelector":"af962995","implemented":true,"kind":"function","modifiers":[],"name":"executeSlash","nameLocation":"15697:12:152","parameters":{"id":74319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74318,"mutability":"mutable","name":"slashes","nameLocation":"15737:7:152","nodeType":"VariableDeclaration","scope":74383,"src":"15710:34:152","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashIdentifier_$72097_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IMiddleware.SlashIdentifier[]"},"typeName":{"baseType":{"id":74316,"nodeType":"UserDefinedTypeName","pathNode":{"id":74315,"name":"SlashIdentifier","nameLocations":["15710:15:152"],"nodeType":"IdentifierPath","referencedDeclaration":72097,"src":"15710:15:152"},"referencedDeclaration":72097,"src":"15710:15:152","typeDescriptions":{"typeIdentifier":"t_struct$_SlashIdentifier_$72097_storage_ptr","typeString":"struct IMiddleware.SlashIdentifier"}},"id":74317,"nodeType":"ArrayTypeName","src":"15710:17:152","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SlashIdentifier_$72097_storage_$dyn_storage_ptr","typeString":"struct IMiddleware.SlashIdentifier[]"}},"visibility":"internal"}],"src":"15709:36:152"},"returnParameters":{"id":74320,"nodeType":"ParameterList","parameters":[],"src":"15755:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74454,"nodeType":"FunctionDefinition","src":"16222:556:152","nodes":[],"body":{"id":74453,"nodeType":"Block","src":"16331:447:152","nodes":[],"statements":[{"assignments":[74394],"declarations":[{"constant":false,"id":74394,"mutability":"mutable","name":"$","nameLocation":"16357:1:152","nodeType":"VariableDeclaration","scope":74453,"src":"16341:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74393,"nodeType":"UserDefinedTypeName","pathNode":{"id":74392,"name":"Storage","nameLocations":["16341:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"16341:7:152"},"referencedDeclaration":72078,"src":"16341:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74397,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74395,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"16361:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16361:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16341:30:152"},{"body":{"id":74451,"nodeType":"Block","src":"16425:347:152","statements":[{"assignments":[74411,74413,74415],"declarations":[{"constant":false,"id":74411,"mutability":"mutable","name":"vault","nameLocation":"16448:5:152","nodeType":"VariableDeclaration","scope":74451,"src":"16440:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74410,"name":"address","nodeType":"ElementaryTypeName","src":"16440:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74413,"mutability":"mutable","name":"vaultEnabledTime","nameLocation":"16462:16:152","nodeType":"VariableDeclaration","scope":74451,"src":"16455:23:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74412,"name":"uint48","nodeType":"ElementaryTypeName","src":"16455:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74415,"mutability":"mutable","name":"vaultDisabledTime","nameLocation":"16487:17:152","nodeType":"VariableDeclaration","scope":74451,"src":"16480:24:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74414,"name":"uint48","nodeType":"ElementaryTypeName","src":"16480:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74421,"initialValue":{"arguments":[{"id":74419,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74399,"src":"16529:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":74416,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74394,"src":"16508:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74417,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16510:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"16508:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16517:11:152","memberName":"atWithTimes","nodeType":"MemberAccess","referencedDeclaration":81153,"src":"16508:20:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint48_$_t_uint48_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint48,uint48)"}},"id":74420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16508:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint48_$_t_uint48_$","typeString":"tuple(address,uint48,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"16439:92:152"},{"condition":{"id":74427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16550:54:152","subExpression":{"arguments":[{"id":74423,"name":"vaultEnabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74413,"src":"16564:16:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74424,"name":"vaultDisabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74415,"src":"16582:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":74425,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74387,"src":"16601:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74422,"name":"_wasActiveAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74483,"src":"16551:12:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$_t_uint48_$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48,uint48,uint48) pure returns (bool)"}},"id":74426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16551:53:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74430,"nodeType":"IfStatement","src":"16546:101:152","trueBody":{"id":74429,"nodeType":"Block","src":"16606:41:152","statements":[{"id":74428,"nodeType":"Continue","src":"16624:8:152"}]}},{"expression":{"id":74449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74431,"name":"stake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74390,"src":"16661:5:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"expression":{"id":74440,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74394,"src":"16720:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16722:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"16720:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74442,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74385,"src":"16734:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74443,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74387,"src":"16744:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"arguments":[{"hexValue":"30","id":74446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16758:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74445,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"16748:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74444,"name":"bytes","nodeType":"ElementaryTypeName","src":"16752:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16748:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74434,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74411,"src":"16692:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74433,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"16685:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16685:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16699:9:152","memberName":"delegator","nodeType":"MemberAccess","referencedDeclaration":65667,"src":"16685:23:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16685:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74432,"name":"IBaseDelegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64257,"src":"16670:14:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBaseDelegator_$64257_$","typeString":"type(contract IBaseDelegator)"}},"id":74438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16670:41:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"id":74439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16712:7:152","memberName":"stakeAt","nodeType":"MemberAccess","referencedDeclaration":64218,"src":"16670:49:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_uint48_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes32,address,uint48,bytes memory) view external returns (uint256)"}},"id":74448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16670:91:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16661:100:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74450,"nodeType":"ExpressionStatement","src":"16661:100:152"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74401,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74399,"src":"16397:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":74402,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74394,"src":"16401:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16403:6:152","memberName":"vaults","nodeType":"MemberAccess","referencedDeclaration":72077,"src":"16401:8:152","typeDescriptions":{"typeIdentifier":"t_struct$_AddressToUintMap_$55618_storage","typeString":"struct EnumerableMap.AddressToUintMap storage ref"}},"id":74404,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16410:6:152","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":55733,"src":"16401:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressToUintMap_$55618_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$55618_storage_ptr_$","typeString":"function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"}},"id":74405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16401:17:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16397:21:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74452,"initializationExpression":{"assignments":[74399],"declarations":[{"constant":false,"id":74399,"mutability":"mutable","name":"i","nameLocation":"16394:1:152","nodeType":"VariableDeclaration","scope":74452,"src":"16386:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74398,"name":"uint256","nodeType":"ElementaryTypeName","src":"16386:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74400,"nodeType":"VariableDeclarationStatement","src":"16386:9:152"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":74408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16420:3:152","subExpression":{"id":74407,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74399,"src":"16422:1:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":74409,"nodeType":"ExpressionStatement","src":"16420:3:152"},"nodeType":"ForStatement","src":"16381:391:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_collectOperatorStakeFromVaultsAt","nameLocation":"16231:33:152","parameters":{"id":74388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74385,"mutability":"mutable","name":"operator","nameLocation":"16273:8:152","nodeType":"VariableDeclaration","scope":74454,"src":"16265:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74384,"name":"address","nodeType":"ElementaryTypeName","src":"16265:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74387,"mutability":"mutable","name":"ts","nameLocation":"16290:2:152","nodeType":"VariableDeclaration","scope":74454,"src":"16283:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74386,"name":"uint48","nodeType":"ElementaryTypeName","src":"16283:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"16264:29:152"},"returnParameters":{"id":74391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74390,"mutability":"mutable","name":"stake","nameLocation":"16324:5:152","nodeType":"VariableDeclaration","scope":74454,"src":"16316:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74389,"name":"uint256","nodeType":"ElementaryTypeName","src":"16316:7:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16315:15:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":74483,"nodeType":"FunctionDefinition","src":"16784:208:152","nodes":[],"body":{"id":74482,"nodeType":"Block","src":"16886:106:152","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":74480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":74471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74465,"name":"enabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74456,"src":"16903:11:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":74466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16918:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16903:16:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74468,"name":"enabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74456,"src":"16923:11:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":74469,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74460,"src":"16938:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"16923:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16903:37:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":74478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74472,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74458,"src":"16945:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":74473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16961:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16945:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74475,"name":"disabledTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74458,"src":"16966:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":74476,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74460,"src":"16982:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"16966:18:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16945:39:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":74479,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16944:41:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16903:82:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":74464,"id":74481,"nodeType":"Return","src":"16896:89:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_wasActiveAt","nameLocation":"16793:12:152","parameters":{"id":74461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74456,"mutability":"mutable","name":"enabledTime","nameLocation":"16813:11:152","nodeType":"VariableDeclaration","scope":74483,"src":"16806:18:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74455,"name":"uint48","nodeType":"ElementaryTypeName","src":"16806:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74458,"mutability":"mutable","name":"disabledTime","nameLocation":"16833:12:152","nodeType":"VariableDeclaration","scope":74483,"src":"16826:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74457,"name":"uint48","nodeType":"ElementaryTypeName","src":"16826:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":74460,"mutability":"mutable","name":"ts","nameLocation":"16854:2:152","nodeType":"VariableDeclaration","scope":74483,"src":"16847:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74459,"name":"uint48","nodeType":"ElementaryTypeName","src":"16847:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"16805:52:152"},"returnParameters":{"id":74464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74463,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74483,"src":"16880:4:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":74462,"name":"bool","nodeType":"ElementaryTypeName","src":"16880:4:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16879:6:152"},"scope":75052,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":74500,"nodeType":"FunctionDefinition","src":"17037:154:152","nodes":[],"body":{"id":74499,"nodeType":"Block","src":"17093:98:152","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74488,"name":"hook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74485,"src":"17107:4:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17123:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74490,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17115:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74489,"name":"address","nodeType":"ElementaryTypeName","src":"17115:7:152","typeDescriptions":{}}},"id":74492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17115:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17107:18:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74498,"nodeType":"IfStatement","src":"17103:82:152","trueBody":{"id":74497,"nodeType":"Block","src":"17127:58:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74494,"name":"UnsupportedDelegatorHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71956,"src":"17148:24:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17148:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74496,"nodeType":"RevertStatement","src":"17141:33:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_delegatorHookCheck","nameLocation":"17046:19:152","parameters":{"id":74486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74485,"mutability":"mutable","name":"hook","nameLocation":"17074:4:152","nodeType":"VariableDeclaration","scope":74500,"src":"17066:12:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74484,"name":"address","nodeType":"ElementaryTypeName","src":"17066:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17065:14:152"},"returnParameters":{"id":74487,"nodeType":"ParameterList","parameters":[],"src":"17093:0:152"},"scope":75052,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":74580,"nodeType":"FunctionDefinition","src":"17197:2173:152","nodes":[],"body":{"id":74579,"nodeType":"Block","src":"17255:2115:152","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74507,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"17273:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17275:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"17273:13:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":74509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17289:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17273:17:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"457261206475726174696f6e2063616e6e6f74206265207a65726f","id":74511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17292:29:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_9cb40eb337a8be46fe49b815745764a5c878d5f788a862958774564de9a6bdfb","typeString":"literal_string \"Era duration cannot be zero\""},"value":"Era duration cannot be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9cb40eb337a8be46fe49b815745764a5c878d5f788a862958774564de9a6bdfb","typeString":"literal_string \"Era duration cannot be zero\""}],"id":74506,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17265:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17265:57:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74513,"nodeType":"ExpressionStatement","src":"17265:57:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74515,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"17657:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17659:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"17657:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":74517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17684:1:152","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":74518,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"17688:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17690:11:152","memberName":"eraDuration","nodeType":"MemberAccess","referencedDeclaration":72043,"src":"17688:13:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"17684:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"17657:44:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d696e207661756c74732065706f6368206475726174696f6e206d75737420626520626967676572207468616e20322065726173","id":74522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17703:54:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_08d55bbfea360f7a0f51895beb619c7bea0ad070b37461a0b57fa718fbacc261","typeString":"literal_string \"Min vaults epoch duration must be bigger than 2 eras\""},"value":"Min vaults epoch duration must be bigger than 2 eras"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_08d55bbfea360f7a0f51895beb619c7bea0ad070b37461a0b57fa718fbacc261","typeString":"literal_string \"Min vaults epoch duration must be bigger than 2 eras\""}],"id":74514,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17649:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17649:109:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74524,"nodeType":"ExpressionStatement","src":"17649:109:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74526,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"17961:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17963:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"17961:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":74528,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"17986:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74529,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17988:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"17986:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"17961:48:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f70657261746f7220677261636520706572696f64206d75737420626520626967676572207468616e206d696e207661756c74732065706f6368206475726174696f6e","id":74531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18023:69:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_700fc0b24fd5539cc3c3176fece13ecd1ea0bf8b6a28ed1e2c6943912916cbc5","typeString":"literal_string \"Operator grace period must be bigger than min vaults epoch duration\""},"value":"Operator grace period must be bigger than min vaults epoch duration"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_700fc0b24fd5539cc3c3176fece13ecd1ea0bf8b6a28ed1e2c6943912916cbc5","typeString":"literal_string \"Operator grace period must be bigger than min vaults epoch duration\""}],"id":74525,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17940:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17940:162:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74533,"nodeType":"ExpressionStatement","src":"17940:162:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74535,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"18302:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18304:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"18302:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":74537,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"18324:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74538,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18326:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"18324:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"18302:45:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c7420677261636520706572696f64206d75737420626520626967676572207468616e206d696e207661756c74732065706f6368206475726174696f6e","id":74540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18361:66:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_2dd612bbaa621bf9dcf26798ef0b7419874868081ba1a27d638987f23019844a","typeString":"literal_string \"Vault grace period must be bigger than min vaults epoch duration\""},"value":"Vault grace period must be bigger than min vaults epoch duration"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2dd612bbaa621bf9dcf26798ef0b7419874868081ba1a27d638987f23019844a","typeString":"literal_string \"Vault grace period must be bigger than min vaults epoch duration\""}],"id":74534,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18281:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18281:156:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74542,"nodeType":"ExpressionStatement","src":"18281:156:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74544,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"18517:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74545,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18519:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"18517:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":74546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18537:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18517:21:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5665746f206475726174696f6e2063616e6e6f74206265207a65726f","id":74548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18540:30:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_466330493aafe40ad9b15938da24a0095ac1cc805fc368da2dc496ba6af4d822","typeString":"literal_string \"Veto duration cannot be zero\""},"value":"Veto duration cannot be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_466330493aafe40ad9b15938da24a0095ac1cc805fc368da2dc496ba6af4d822","typeString":"literal_string \"Veto duration cannot be zero\""}],"id":74543,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18509:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18509:62:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74550,"nodeType":"ExpressionStatement","src":"18509:62:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74552,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"18781:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18783:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"18781:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":74554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18808:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18781:28:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d696e20736c61736820657865637574696f6e2064656c61792063616e6e6f74206265207a65726f","id":74556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18811:42:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_2129939bf81227e27348301792d04b2554d3359286879c859fd621f958cd3c48","typeString":"literal_string \"Min slash execution delay cannot be zero\""},"value":"Min slash execution delay cannot be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2129939bf81227e27348301792d04b2554d3359286879c859fd621f958cd3c48","typeString":"literal_string \"Min slash execution delay cannot be zero\""}],"id":74551,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18773:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18773:81:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74558,"nodeType":"ExpressionStatement","src":"18773:81:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74560,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"18885:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18887:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"18885:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":74562,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"18905:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18907:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"18905:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"18885:44:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":74565,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"18933:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74566,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18935:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"18933:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"18885:71:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5665746f206475726174696f6e20616e6420736c61736820657865637574696f6e2064656c6179206d757374206265206c657373207468616e206f7220657175616c20746f206d696e207661756c74732065706f6368206475726174696f6e","id":74568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18970:97:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_c4436f7b10417f1b918c24bd40e94030f7b387a5e411c7abad1cd0b9c9989d18","typeString":"literal_string \"Veto duration and slash execution delay must be less than or equal to min vaults epoch duration\""},"value":"Veto duration and slash execution delay must be less than or equal to min vaults epoch duration"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c4436f7b10417f1b918c24bd40e94030f7b387a5e411c7abad1cd0b9c9989d18","typeString":"literal_string \"Veto duration and slash execution delay must be less than or equal to min vaults epoch duration\""}],"id":74559,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18864:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18864:213:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74570,"nodeType":"ExpressionStatement","src":"18864:213:152"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74572,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74503,"src":"19282:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74573,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19284:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"19282:27:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"33","id":74574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19313:1:152","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19282:32:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265736f6c766572207365742065706f6368732064656c6179206d757374206265206174206c656173742033","id":74576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19316:46:152","typeDescriptions":{"typeIdentifier":"t_stringliteral_2bb1120b8d1dfac6f403f8b5650c7b4c6cc5a65cfa6676f98f5e056374cedc62","typeString":"literal_string \"Resolver set epochs delay must be at least 3\""},"value":"Resolver set epochs delay must be at least 3"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2bb1120b8d1dfac6f403f8b5650c7b4c6cc5a65cfa6676f98f5e056374cedc62","typeString":"literal_string \"Resolver set epochs delay must be at least 3\""}],"id":74571,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19274:7:152","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19274:89:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74578,"nodeType":"ExpressionStatement","src":"19274:89:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateStorage","nameLocation":"17206:16:152","parameters":{"id":74504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74503,"mutability":"mutable","name":"$","nameLocation":"17239:1:152","nodeType":"VariableDeclaration","scope":74580,"src":"17223:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74502,"nodeType":"UserDefinedTypeName","pathNode":{"id":74501,"name":"Storage","nameLocations":["17223:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"17223:7:152"},"referencedDeclaration":72078,"src":"17223:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"src":"17222:19:152"},"returnParameters":{"id":74505,"nodeType":"ParameterList","parameters":[],"src":"17255:0:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":74847,"nodeType":"FunctionDefinition","src":"19418:2572:152","nodes":[],"body":{"id":74846,"nodeType":"Block","src":"19466:2524:152","nodes":[],"statements":[{"assignments":[74587],"declarations":[{"constant":false,"id":74587,"mutability":"mutable","name":"$","nameLocation":"19492:1:152","nodeType":"VariableDeclaration","scope":74846,"src":"19476:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74586,"nodeType":"UserDefinedTypeName","pathNode":{"id":74585,"name":"Storage","nameLocations":["19476:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"19476:7:152"},"referencedDeclaration":72078,"src":"19476:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74590,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74588,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"19496:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19496:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"19476:30:152"},{"condition":{"id":74599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19521:54:152","subExpression":{"arguments":[{"id":74597,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"19568:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":74592,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"19532:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74593,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19534:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"19532:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19544:13:152","memberName":"vaultRegistry","nodeType":"MemberAccess","referencedDeclaration":80043,"src":"19532:25:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74591,"name":"IRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64083,"src":"19522:9:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRegistry_$64083_$","typeString":"type(contract IRegistry)"}},"id":74595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19522:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRegistry_$64083","typeString":"contract IRegistry"}},"id":74596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19559:8:152","memberName":"isEntity","nodeType":"MemberAccess","referencedDeclaration":64068,"src":"19522:45:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":74598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19522:53:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74604,"nodeType":"IfStatement","src":"19517:109:152","trueBody":{"id":74603,"nodeType":"Block","src":"19577:49:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74600,"name":"NonFactoryVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71929,"src":"19598:15:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19598:17:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74602,"nodeType":"RevertStatement","src":"19591:24:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":74612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74606,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"19658:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74605,"name":"IMigratableEntity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63959,"src":"19640:17:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMigratableEntity_$63959_$","typeString":"type(contract IMigratableEntity)"}},"id":74607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19640:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMigratableEntity_$63959","typeString":"contract IMigratableEntity"}},"id":74608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19666:7:152","memberName":"version","nodeType":"MemberAccess","referencedDeclaration":63940,"src":"19640:33:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint64_$","typeString":"function () view external returns (uint64)"}},"id":74609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19640:35:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":74610,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"19679:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74611,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19681:23:152","memberName":"allowedVaultImplVersion","nodeType":"MemberAccess","referencedDeclaration":72057,"src":"19679:25:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"19640:64:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74617,"nodeType":"IfStatement","src":"19636:128:152","trueBody":{"id":74616,"nodeType":"Block","src":"19706:58:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74613,"name":"IncompatibleVaultVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71980,"src":"19727:24:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19727:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74615,"nodeType":"RevertStatement","src":"19720:33:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74619,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"19785:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74618,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"19778:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19778:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19793:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":65655,"src":"19778:25:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19778:27:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":74623,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"19809:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74624,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19811:10:152","memberName":"collateral","nodeType":"MemberAccess","referencedDeclaration":72065,"src":"19809:12:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19778:43:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74630,"nodeType":"IfStatement","src":"19774:100:152","trueBody":{"id":74629,"nodeType":"Block","src":"19823:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74626,"name":"UnknownCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71935,"src":"19844:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19844:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74628,"nodeType":"RevertStatement","src":"19837:26:152"}]}},{"assignments":[74632],"declarations":[{"constant":false,"id":74632,"mutability":"mutable","name":"vaultEpochDuration","nameLocation":"19919:18:152","nodeType":"VariableDeclaration","scope":74846,"src":"19912:25:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74631,"name":"uint48","nodeType":"ElementaryTypeName","src":"19912:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74638,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74634,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"19947:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74633,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"19940:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19940:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19955:13:152","memberName":"epochDuration","nodeType":"MemberAccess","referencedDeclaration":65697,"src":"19940:28:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint48_$","typeString":"function () view external returns (uint48)"}},"id":74637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19940:30:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"19912:58:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74639,"name":"vaultEpochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74632,"src":"19984:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74640,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"20005:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74641,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20007:21:152","memberName":"minVaultEpochDuration","nodeType":"MemberAccess","referencedDeclaration":72045,"src":"20005:23:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"19984:44:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74647,"nodeType":"IfStatement","src":"19980:107:152","trueBody":{"id":74646,"nodeType":"Block","src":"20030:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74643,"name":"VaultWrongEpochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71932,"src":"20051:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20051:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74645,"nodeType":"RevertStatement","src":"20044:32:152"}]}},{"condition":{"id":74653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20134:40:152","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74649,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"20142:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74648,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"20135:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20135:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20150:22:152","memberName":"isDelegatorInitialized","nodeType":"MemberAccess","referencedDeclaration":65673,"src":"20135:37:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":74652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20135:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74658,"nodeType":"IfStatement","src":"20130:103:152","trueBody":{"id":74657,"nodeType":"Block","src":"20176:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74654,"name":"DelegatorNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71962,"src":"20197:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20197:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74656,"nodeType":"RevertStatement","src":"20190:32:152"}]}},{"assignments":[74661],"declarations":[{"constant":false,"id":74661,"mutability":"mutable","name":"delegator","nameLocation":"20258:9:152","nodeType":"VariableDeclaration","scope":74846,"src":"20243:24:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"},"typeName":{"id":74660,"nodeType":"UserDefinedTypeName","pathNode":{"id":74659,"name":"IBaseDelegator","nameLocations":["20243:14:152"],"nodeType":"IdentifierPath","referencedDeclaration":64257,"src":"20243:14:152"},"referencedDeclaration":64257,"src":"20243:14:152","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"visibility":"internal"}],"id":74669,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74664,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"20292:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74663,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"20285:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20285:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20300:9:152","memberName":"delegator","nodeType":"MemberAccess","referencedDeclaration":65667,"src":"20285:24:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20285:26:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74662,"name":"IBaseDelegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64257,"src":"20270:14:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBaseDelegator_$64257_$","typeString":"type(contract IBaseDelegator)"}},"id":74668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20270:42:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"nodeType":"VariableDeclarationStatement","src":"20243:69:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":74672,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"20352:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20354:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"20352:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":74670,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"20326:9:152","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"id":74671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20336:15:152","memberName":"maxNetworkLimit","nodeType":"MemberAccess","referencedDeclaration":64204,"src":"20326:25:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) view external returns (uint256)"}},"id":74674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20326:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":74677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20374:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":74676,"name":"uint256","nodeType":"ElementaryTypeName","src":"20374:7:152","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":74675,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"20369:4:152","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":74678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20369:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":74679,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20383:3:152","memberName":"max","nodeType":"MemberAccess","src":"20369:17:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20326:60:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74693,"nodeType":"IfStatement","src":"20322:158:152","trueBody":{"id":74692,"nodeType":"Block","src":"20388:92:152","statements":[{"expression":{"arguments":[{"id":74684,"name":"NETWORK_IDENTIFIER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72858,"src":"20431:18:152","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"arguments":[{"id":74687,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20456:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":74686,"name":"uint256","nodeType":"ElementaryTypeName","src":"20456:7:152","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":74685,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"20451:4:152","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":74688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20451:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":74689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20465:3:152","memberName":"max","nodeType":"MemberAccess","src":"20451:17:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":74681,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"20402:9:152","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"id":74683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20412:18:152","memberName":"setMaxNetworkLimit","nodeType":"MemberAccess","referencedDeclaration":64236,"src":"20402:28:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint96_$_t_uint256_$returns$__$","typeString":"function (uint96,uint256) external"}},"id":74690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20402:67:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74691,"nodeType":"ExpressionStatement","src":"20402:67:152"}]}},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74696,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"20524:9:152","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}],"id":74695,"name":"IBaseDelegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64257,"src":"20509:14:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBaseDelegator_$64257_$","typeString":"type(contract IBaseDelegator)"}},"id":74697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20509:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBaseDelegator_$64257","typeString":"contract IBaseDelegator"}},"id":74698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20535:4:152","memberName":"hook","nodeType":"MemberAccess","referencedDeclaration":64196,"src":"20509:30:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20509:32:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74694,"name":"_delegatorHookCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74500,"src":"20489:19:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":74700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20489:53:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74701,"nodeType":"ExpressionStatement","src":"20489:53:152"},{"condition":{"id":74707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20588:38:152","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74703,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"20596:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74702,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"20589:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20589:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20604:20:152","memberName":"isSlasherInitialized","nodeType":"MemberAccess","referencedDeclaration":65685,"src":"20589:35:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":74706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20589:37:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74712,"nodeType":"IfStatement","src":"20584:99:152","trueBody":{"id":74711,"nodeType":"Block","src":"20628:55:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74708,"name":"SlasherNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71965,"src":"20649:21:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20649:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74710,"nodeType":"RevertStatement","src":"20642:30:152"}]}},{"assignments":[74714],"declarations":[{"constant":false,"id":74714,"mutability":"mutable","name":"slasher","nameLocation":"20701:7:152","nodeType":"VariableDeclaration","scope":74846,"src":"20693:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74713,"name":"address","nodeType":"ElementaryTypeName","src":"20693:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":74720,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74716,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"20718:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74715,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"20711:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20711:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20726:7:152","memberName":"slasher","nodeType":"MemberAccess","referencedDeclaration":65679,"src":"20711:22:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20711:24:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"20693:42:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":74728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74722,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74714,"src":"20757:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74721,"name":"IEntity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63851,"src":"20749:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEntity_$63851_$","typeString":"type(contract IEntity)"}},"id":74723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20749:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEntity_$63851","typeString":"contract IEntity"}},"id":74724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20766:4:152","memberName":"TYPE","nodeType":"MemberAccess","referencedDeclaration":63844,"src":"20749:21:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint64_$","typeString":"function () view external returns (uint64)"}},"id":74725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20749:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":74726,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"20776:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20778:19:152","memberName":"vetoSlasherImplType","nodeType":"MemberAccess","referencedDeclaration":72059,"src":"20776:21:152","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"20749:48:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74733,"nodeType":"IfStatement","src":"20745:111:152","trueBody":{"id":74732,"nodeType":"Block","src":"20799:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74729,"name":"IncompatibleSlasherType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71968,"src":"20820:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20820:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74731,"nodeType":"RevertStatement","src":"20813:32:152"}]}},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74735,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74714,"src":"20883:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74734,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"20870:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20870:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20892:12:152","memberName":"isBurnerHook","nodeType":"MemberAccess","referencedDeclaration":64937,"src":"20870:34:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":74738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20870:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74743,"nodeType":"IfStatement","src":"20866:98:152","trueBody":{"id":74742,"nodeType":"Block","src":"20908:56:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74739,"name":"BurnerHookNotSupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71971,"src":"20929:22:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20929:24:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74741,"nodeType":"RevertStatement","src":"20922:31:152"}]}},{"assignments":[74745],"declarations":[{"constant":false,"id":74745,"mutability":"mutable","name":"vetoDuration","nameLocation":"20981:12:152","nodeType":"VariableDeclaration","scope":74846,"src":"20974:19:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74744,"name":"uint48","nodeType":"ElementaryTypeName","src":"20974:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74751,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74747,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74714,"src":"21009:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74746,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"20996:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20996:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21018:12:152","memberName":"vetoDuration","nodeType":"MemberAccess","referencedDeclaration":65172,"src":"20996:34:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint48_$","typeString":"function () view external returns (uint48)"}},"id":74750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20996:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"20974:58:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74752,"name":"vetoDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74745,"src":"21046:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74753,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"21061:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21063:15:152","memberName":"minVetoDuration","nodeType":"MemberAccess","referencedDeclaration":72051,"src":"21061:17:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"21046:32:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74760,"nodeType":"IfStatement","src":"21042:92:152","trueBody":{"id":74759,"nodeType":"Block","src":"21080:54:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74756,"name":"VetoDurationTooShort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71974,"src":"21101:20:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21101:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74758,"nodeType":"RevertStatement","src":"21094:29:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74761,"name":"vetoDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74745,"src":"21148:12:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":74762,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"21163:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74763,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21165:22:152","memberName":"minSlashExecutionDelay","nodeType":"MemberAccess","referencedDeclaration":72053,"src":"21163:24:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"21148:39:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":74765,"name":"vaultEpochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74632,"src":"21190:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"21148:60:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74771,"nodeType":"IfStatement","src":"21144:119:152","trueBody":{"id":74770,"nodeType":"Block","src":"21210:53:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74767,"name":"VetoDurationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71977,"src":"21231:19:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21231:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74769,"nodeType":"RevertStatement","src":"21224:28:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74773,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74714,"src":"21290:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74772,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"21277:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21277:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21299:22:152","memberName":"resolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":65202,"src":"21277:44:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":74776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21277:46:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":74777,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"21326:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21328:25:152","memberName":"maxResolverSetEpochsDelay","nodeType":"MemberAccess","referencedDeclaration":72055,"src":"21326:27:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21277:76:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74784,"nodeType":"IfStatement","src":"21273:139:152","trueBody":{"id":74783,"nodeType":"Block","src":"21355:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74780,"name":"ResolverSetDelayTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71995,"src":"21376:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21376:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74782,"nodeType":"RevertStatement","src":"21369:32:152"}]}},{"assignments":[74786],"declarations":[{"constant":false,"id":74786,"mutability":"mutable","name":"resolver","nameLocation":"21430:8:152","nodeType":"VariableDeclaration","scope":74846,"src":"21422:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74785,"name":"address","nodeType":"ElementaryTypeName","src":"21422:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":74798,"initialValue":{"arguments":[{"expression":{"id":74791,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"21472:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21474:10:152","memberName":"subnetwork","nodeType":"MemberAccess","referencedDeclaration":72061,"src":"21472:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":74795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21496:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"21486:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74793,"name":"bytes","nodeType":"ElementaryTypeName","src":"21490:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21486:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":74788,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74714,"src":"21454:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74787,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"21441:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21441:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21463:8:152","memberName":"resolver","nodeType":"MemberAccess","referencedDeclaration":65224,"src":"21441:30:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (bytes32,bytes memory) view external returns (address)"}},"id":74797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21441:58:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"21422:77:152"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74799,"name":"resolver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74786,"src":"21513:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21533:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21525:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74800,"name":"address","nodeType":"ElementaryTypeName","src":"21525:7:152","typeDescriptions":{}}},"id":74803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21525:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21513:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74820,"name":"resolver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74786,"src":"21665:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":74821,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"21677:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74822,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21679:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"21677:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74823,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21689:12:152","memberName":"vetoResolver","nodeType":"MemberAccess","referencedDeclaration":80061,"src":"21677:24:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21665:36:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74829,"nodeType":"IfStatement","src":"21661:147:152","trueBody":{"id":74828,"nodeType":"Block","src":"21703:105:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74825,"name":"ResolverMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71992,"src":"21779:16:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21779:18:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74827,"nodeType":"RevertStatement","src":"21772:25:152"}]}},"id":74830,"nodeType":"IfStatement","src":"21509:299:152","trueBody":{"id":74819,"nodeType":"Block","src":"21537:118:152","statements":[{"expression":{"arguments":[{"id":74809,"name":"NETWORK_IDENTIFIER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72858,"src":"21585:18:152","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"expression":{"id":74810,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74587,"src":"21605:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21607:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"21605:11:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21617:12:152","memberName":"vetoResolver","nodeType":"MemberAccess","referencedDeclaration":80061,"src":"21605:24:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":74815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21641:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74814,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"21631:9:152","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":74813,"name":"bytes","nodeType":"ElementaryTypeName","src":"21635:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":74816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21631:12:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":74806,"name":"slasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74714,"src":"21564:7:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74805,"name":"IVetoSlasher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65269,"src":"21551:12:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVetoSlasher_$65269_$","typeString":"type(contract IVetoSlasher)"}},"id":74807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21551:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVetoSlasher_$65269","typeString":"contract IVetoSlasher"}},"id":74808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21573:11:152","memberName":"setResolver","nodeType":"MemberAccess","referencedDeclaration":65268,"src":"21551:33:152","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint96_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (uint96,address,bytes memory) external"}},"id":74817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21551:93:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74818,"nodeType":"ExpressionStatement","src":"21551:93:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74832,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74582,"src":"21901:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74831,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65607,"src":"21894:6:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$65607_$","typeString":"type(contract IVault)"}},"id":74833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21894:14:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$65607","typeString":"contract IVault"}},"id":74834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21909:6:152","memberName":"burner","nodeType":"MemberAccess","referencedDeclaration":65661,"src":"21894:21:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21894:23:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21929:1:152","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74837,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21921:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74836,"name":"address","nodeType":"ElementaryTypeName","src":"21921:7:152","typeDescriptions":{}}},"id":74839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21921:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21894:37:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74845,"nodeType":"IfStatement","src":"21890:94:152","trueBody":{"id":74844,"nodeType":"Block","src":"21933:51:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74841,"name":"UnsupportedBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71959,"src":"21954:17:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21954:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74843,"nodeType":"RevertStatement","src":"21947:26:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateVault","nameLocation":"19427:14:152","parameters":{"id":74583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74582,"mutability":"mutable","name":"_vault","nameLocation":"19450:6:152","nodeType":"VariableDeclaration","scope":74847,"src":"19442:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74581,"name":"address","nodeType":"ElementaryTypeName","src":"19442:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19441:16:152"},"returnParameters":{"id":74584,"nodeType":"ParameterList","parameters":[],"src":"19466:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":74894,"nodeType":"FunctionDefinition","src":"21996:482:152","nodes":[],"body":{"id":74893,"nodeType":"Block","src":"22075:403:152","nodes":[],"statements":[{"condition":{"id":74863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"22089:72:152","subExpression":{"arguments":[{"id":74861,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74851,"src":"22152:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74855,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"22100:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22100:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74857,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22111:9:152","memberName":"symbiotic","nodeType":"MemberAccess","referencedDeclaration":72071,"src":"22100:20:152","typeDescriptions":{"typeIdentifier":"t_struct$_SymbioticContracts_$80062_storage","typeString":"struct Gear.SymbioticContracts storage ref"}},"id":74858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22121:20:152","memberName":"stakerRewardsFactory","nodeType":"MemberAccess","referencedDeclaration":80053,"src":"22100:41:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74854,"name":"IRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64083,"src":"22090:9:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRegistry_$64083_$","typeString":"type(contract IRegistry)"}},"id":74859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22090:52:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRegistry_$64083","typeString":"contract IRegistry"}},"id":74860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22143:8:152","memberName":"isEntity","nodeType":"MemberAccess","referencedDeclaration":64068,"src":"22090:61:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":74862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22090:71:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74868,"nodeType":"IfStatement","src":"22085:135:152","trueBody":{"id":74867,"nodeType":"Block","src":"22163:57:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74864,"name":"NonFactoryStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72007,"src":"22184:23:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22184:25:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74866,"nodeType":"RevertStatement","src":"22177:32:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74870,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74851,"src":"22256:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74869,"name":"IDefaultStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70743,"src":"22234:21:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDefaultStakerRewards_$70743_$","typeString":"type(contract IDefaultStakerRewards)"}},"id":74871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22234:31:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDefaultStakerRewards_$70743","typeString":"contract IDefaultStakerRewards"}},"id":74872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22266:5:152","memberName":"VAULT","nodeType":"MemberAccess","referencedDeclaration":70678,"src":"22234:37:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22234:39:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":74874,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74849,"src":"22277:6:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22234:49:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74880,"nodeType":"IfStatement","src":"22230:114:152","trueBody":{"id":74879,"nodeType":"Block","src":"22285:59:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74876,"name":"InvalidStakerRewardsVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72010,"src":"22306:25:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22306:27:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74878,"nodeType":"RevertStatement","src":"22299:34:152"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":74887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":74882,"name":"_rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74851,"src":"22380:8:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74881,"name":"IDefaultStakerRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70743,"src":"22358:21:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDefaultStakerRewards_$70743_$","typeString":"type(contract IDefaultStakerRewards)"}},"id":74883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22358:31:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDefaultStakerRewards_$70743","typeString":"contract IDefaultStakerRewards"}},"id":74884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22390:7:152","memberName":"version","nodeType":"MemberAccess","referencedDeclaration":70795,"src":"22358:39:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint64_$","typeString":"function () view external returns (uint64)"}},"id":74885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22358:41:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"32","id":74886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22403:1:152","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22358:46:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74892,"nodeType":"IfStatement","src":"22354:118:152","trueBody":{"id":74891,"nodeType":"Block","src":"22406:66:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74888,"name":"IncompatibleStakerRewardsVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71983,"src":"22427:32:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22427:34:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74890,"nodeType":"RevertStatement","src":"22420:41:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateStakerRewards","nameLocation":"22005:22:152","parameters":{"id":74852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74849,"mutability":"mutable","name":"_vault","nameLocation":"22036:6:152","nodeType":"VariableDeclaration","scope":74894,"src":"22028:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74848,"name":"address","nodeType":"ElementaryTypeName","src":"22028:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74851,"mutability":"mutable","name":"_rewards","nameLocation":"22052:8:152","nodeType":"VariableDeclaration","scope":74894,"src":"22044:16:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74850,"name":"address","nodeType":"ElementaryTypeName","src":"22044:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"22027:34:152"},"returnParameters":{"id":74853,"nodeType":"ParameterList","parameters":[],"src":"22075:0:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":74904,"nodeType":"ModifierDefinition","src":"22615:82:152","nodes":[],"body":{"id":74903,"nodeType":"Block","src":"22650:47:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":74899,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74896,"src":"22676:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":74898,"name":"_validTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74951,"src":"22660:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$__$","typeString":"function (uint48) view"}},"id":74900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22660:19:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74901,"nodeType":"ExpressionStatement","src":"22660:19:152"},{"id":74902,"nodeType":"PlaceholderStatement","src":"22689:1:152"}]},"name":"validTimestamp","nameLocation":"22624:14:152","parameters":{"id":74897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74896,"mutability":"mutable","name":"ts","nameLocation":"22646:2:152","nodeType":"VariableDeclaration","scope":74904,"src":"22639:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74895,"name":"uint48","nodeType":"ElementaryTypeName","src":"22639:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"22638:11:152"},"virtual":false,"visibility":"internal"},{"id":74951,"nodeType":"FunctionDefinition","src":"22703:408:152","nodes":[],"body":{"id":74950,"nodeType":"Block","src":"22753:358:152","nodes":[],"statements":[{"assignments":[74911],"declarations":[{"constant":false,"id":74911,"mutability":"mutable","name":"$","nameLocation":"22779:1:152","nodeType":"VariableDeclaration","scope":74950,"src":"22763:17:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74910,"nodeType":"UserDefinedTypeName","pathNode":{"id":74909,"name":"Storage","nameLocations":["22763:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"22763:7:152"},"referencedDeclaration":72078,"src":"22763:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"id":74914,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74912,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74964,"src":"22783:8:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72078_storage_ptr_$","typeString":"function () view returns (struct IMiddleware.Storage storage pointer)"}},"id":74913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22783:10:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"22763:30:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74915,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74906,"src":"22807:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":74916,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"22813:4:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Time_$59094_$","typeString":"type(library Time)"}},"id":74917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22818:9:152","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":58842,"src":"22813:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":74918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22813:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"22807:22:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74924,"nodeType":"IfStatement","src":"22803:80:152","trueBody":{"id":74923,"nodeType":"Block","src":"22831:52:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74920,"name":"IncorrectTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71947,"src":"22852:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22852:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74922,"nodeType":"RevertStatement","src":"22845:27:152"}]}},{"assignments":[74926],"declarations":[{"constant":false,"id":74926,"mutability":"mutable","name":"gracePeriod","nameLocation":"22900:11:152","nodeType":"VariableDeclaration","scope":74950,"src":"22893:18:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74925,"name":"uint48","nodeType":"ElementaryTypeName","src":"22893:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":74937,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":74927,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74911,"src":"22914:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22916:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"22914:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":74929,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74911,"src":"22938:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74930,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22940:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"22938:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"22914:42:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":74934,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74911,"src":"22983:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74935,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22985:16:152","memberName":"vaultGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72049,"src":"22983:18:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":74936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"22914:87:152","trueExpression":{"expression":{"id":74932,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74911,"src":"22959:1:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage storage pointer"}},"id":74933,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22961:19:152","memberName":"operatorGracePeriod","nodeType":"MemberAccess","referencedDeclaration":72047,"src":"22959:21:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"22893:108:152"},{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":74940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74938,"name":"ts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74906,"src":"23015:2:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":74939,"name":"gracePeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74926,"src":"23020:11:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"23015:16:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":74941,"name":"Time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59094,"src":"23035:4:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Time_$59094_$","typeString":"type(library Time)"}},"id":74942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23040:9:152","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":58842,"src":"23035:14:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":74943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23035:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"23015:36:152","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74949,"nodeType":"IfStatement","src":"23011:94:152","trueBody":{"id":74948,"nodeType":"Block","src":"23053:52:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":74945,"name":"IncorrectTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71947,"src":"23074:18:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":74946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23074:20:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74947,"nodeType":"RevertStatement","src":"23067:27:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validTimestamp","nameLocation":"22712:15:152","parameters":{"id":74907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74906,"mutability":"mutable","name":"ts","nameLocation":"22735:2:152","nodeType":"VariableDeclaration","scope":74951,"src":"22728:9:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":74905,"name":"uint48","nodeType":"ElementaryTypeName","src":"22728:6:152","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"22727:11:152"},"returnParameters":{"id":74908,"nodeType":"ParameterList","parameters":[],"src":"22753:0:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":74964,"nodeType":"FunctionDefinition","src":"23117:201:152","nodes":[],"body":{"id":74963,"nodeType":"Block","src":"23187:131:152","nodes":[],"statements":[{"assignments":[74958],"declarations":[{"constant":false,"id":74958,"mutability":"mutable","name":"slot","nameLocation":"23205:4:152","nodeType":"VariableDeclaration","scope":74963,"src":"23197:12:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74957,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23197:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":74961,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":74959,"name":"_getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74976,"src":"23212:15:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":74960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23212:17:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"23197:32:152"},{"AST":{"nativeSrc":"23265:47:152","nodeType":"YulBlock","src":"23265:47:152","statements":[{"nativeSrc":"23279:23:152","nodeType":"YulAssignment","src":"23279:23:152","value":{"name":"slot","nativeSrc":"23298:4:152","nodeType":"YulIdentifier","src":"23298:4:152"},"variableNames":[{"name":"middleware.slot","nativeSrc":"23279:15:152","nodeType":"YulIdentifier","src":"23279:15:152"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":74955,"isOffset":false,"isSlot":true,"src":"23279:15:152","suffix":"slot","valueSize":1},{"declaration":74958,"isOffset":false,"isSlot":false,"src":"23298:4:152","valueSize":1}],"flags":["memory-safe"],"id":74962,"nodeType":"InlineAssembly","src":"23240:72:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_storage","nameLocation":"23126:8:152","parameters":{"id":74952,"nodeType":"ParameterList","parameters":[],"src":"23134:2:152"},"returnParameters":{"id":74956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74955,"mutability":"mutable","name":"middleware","nameLocation":"23175:10:152","nodeType":"VariableDeclaration","scope":74964,"src":"23159:26:152","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"},"typeName":{"id":74954,"nodeType":"UserDefinedTypeName","pathNode":{"id":74953,"name":"Storage","nameLocations":["23159:7:152"],"nodeType":"IdentifierPath","referencedDeclaration":72078,"src":"23159:7:152"},"referencedDeclaration":72078,"src":"23159:7:152","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72078_storage_ptr","typeString":"struct IMiddleware.Storage"}},"visibility":"internal"}],"src":"23158:28:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":74976,"nodeType":"FunctionDefinition","src":"23324:128:152","nodes":[],"body":{"id":74975,"nodeType":"Block","src":"23382:70:152","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":74971,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72852,"src":"23426:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":74969,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"23399:11:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":74970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23411:14:152","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":47773,"src":"23399:26:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$47728_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":74972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23399:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$47728_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":74973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23440:5:152","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47727,"src":"23399:46:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":74968,"id":74974,"nodeType":"Return","src":"23392:53:152"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorageSlot","nameLocation":"23333:15:152","parameters":{"id":74965,"nodeType":"ParameterList","parameters":[],"src":"23348:2:152"},"returnParameters":{"id":74968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74967,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74976,"src":"23373:7:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74966,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23373:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"23372:9:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":75021,"nodeType":"FunctionDefinition","src":"23458:252:152","nodes":[],"body":{"id":75020,"nodeType":"Block","src":"23526:184:152","nodes":[],"statements":[{"assignments":[74984],"declarations":[{"constant":false,"id":74984,"mutability":"mutable","name":"slot","nameLocation":"23544:4:152","nodeType":"VariableDeclaration","scope":75020,"src":"23536:12:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74983,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23536:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75010,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":74998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":74993,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74978,"src":"23596:9:152","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":74992,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23590:5:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":74991,"name":"bytes","nodeType":"ElementaryTypeName","src":"23590:5:152","typeDescriptions":{}}},"id":74994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23590:16:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74990,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23580:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":74995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23580:27:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":74989,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23572:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":74988,"name":"uint256","nodeType":"ElementaryTypeName","src":"23572:7:152","typeDescriptions":{}}},"id":74996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23572:36:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":74997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23611:1:152","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23572:40:152","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":74986,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"23561:3:152","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23565:6:152","memberName":"encode","nodeType":"MemberAccess","src":"23561:10:152","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":74999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23561:52:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74985,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23551:9:152","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23551:63:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":75008,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23617:23:152","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":75005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23634:4:152","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":75004,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23626:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":75003,"name":"uint256","nodeType":"ElementaryTypeName","src":"23626:7:152","typeDescriptions":{}}},"id":75006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23626:13:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75002,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23618:7:152","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75001,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23618:7:152","typeDescriptions":{}}},"id":75007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23618:22:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23551:89:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"23536:104:152"},{"expression":{"id":75018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":75014,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72852,"src":"23677:12:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75011,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"23650:11:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":75013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23662:14:152","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":47773,"src":"23650:26:152","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$47728_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":75015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23650:40:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$47728_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":75016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23691:5:152","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47727,"src":"23650:46:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75017,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74984,"src":"23699:4:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23650:53:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75019,"nodeType":"ExpressionStatement","src":"23650:53:152"}]},"implemented":true,"kind":"function","modifiers":[{"id":74981,"kind":"modifierInvocation","modifierName":{"id":74980,"name":"onlyOwner","nameLocations":["23516:9:152"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"23516:9:152"},"nodeType":"ModifierInvocation","src":"23516:9:152"}],"name":"_setStorageSlot","nameLocation":"23467:15:152","parameters":{"id":74979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74978,"mutability":"mutable","name":"namespace","nameLocation":"23497:9:152","nodeType":"VariableDeclaration","scope":75021,"src":"23483:23:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":74977,"name":"string","nodeType":"ElementaryTypeName","src":"23483:6:152","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"23482:25:152"},"returnParameters":{"id":74982,"nodeType":"ParameterList","parameters":[],"src":"23526:0:152"},"scope":75052,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75031,"nodeType":"ModifierDefinition","src":"23716:81:152","nodes":[],"body":{"id":75030,"nodeType":"Block","src":"23751:46:152","nodes":[],"statements":[{"expression":{"arguments":[{"id":75026,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75023,"src":"23773:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75025,"name":"_vaultOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75051,"src":"23761:11:152","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":75027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23761:18:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75028,"nodeType":"ExpressionStatement","src":"23761:18:152"},{"id":75029,"nodeType":"PlaceholderStatement","src":"23789:1:152"}]},"name":"vaultOwner","nameLocation":"23725:10:152","parameters":{"id":75024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75023,"mutability":"mutable","name":"vault","nameLocation":"23744:5:152","nodeType":"VariableDeclaration","scope":75031,"src":"23736:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75022,"name":"address","nodeType":"ElementaryTypeName","src":"23736:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23735:15:152"},"virtual":false,"visibility":"internal"},{"id":75051,"nodeType":"FunctionDefinition","src":"23803:181:152","nodes":[],"body":{"id":75050,"nodeType":"Block","src":"23853:131:152","nodes":[],"statements":[{"condition":{"id":75044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"23867:62:152","subExpression":{"arguments":[{"id":75040,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72855,"src":"23898:18:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75041,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"23918:3:152","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23922:6:152","memberName":"sender","nodeType":"MemberAccess","src":"23918:10:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":75037,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75033,"src":"23883:5:152","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75036,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43466,"src":"23868:14:152","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$43466_$","typeString":"type(contract IAccessControl)"}},"id":75038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23868:21:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControl_$43466","typeString":"contract IAccessControl"}},"id":75039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23890:7:152","memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":43433,"src":"23868:29:152","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view external returns (bool)"}},"id":75043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23868:61:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75049,"nodeType":"IfStatement","src":"23863:115:152","trueBody":{"id":75048,"nodeType":"Block","src":"23931:47:152","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":75045,"name":"NotVaultOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71944,"src":"23952:13:152","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":75046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23952:15:152","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":75047,"nodeType":"RevertStatement","src":"23945:22:152"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_vaultOwner","nameLocation":"23812:11:152","parameters":{"id":75034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75033,"mutability":"mutable","name":"vault","nameLocation":"23832:5:152","nodeType":"VariableDeclaration","scope":75051,"src":"23824:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75032,"name":"address","nodeType":"ElementaryTypeName","src":"23824:7:152","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23823:15:152"},"returnParameters":{"id":75035,"nodeType":"ParameterList","parameters":[],"src":"23853:0:152"},"scope":75052,"stateMutability":"view","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":72825,"name":"IMiddleware","nameLocations":["2190:11:152"],"nodeType":"IdentifierPath","referencedDeclaration":72281,"src":"2190:11:152"},"id":72826,"nodeType":"InheritanceSpecifier","src":"2190:11:152"},{"baseName":{"id":72827,"name":"OwnableUpgradeable","nameLocations":["2203:18:152"],"nodeType":"IdentifierPath","referencedDeclaration":41409,"src":"2203:18:152"},"id":72828,"nodeType":"InheritanceSpecifier","src":"2203:18:152"},{"baseName":{"id":72829,"name":"ReentrancyGuardTransientUpgradeable","nameLocations":["2223:35:152"],"nodeType":"IdentifierPath","referencedDeclaration":42870,"src":"2223:35:152"},"id":72830,"nodeType":"InheritanceSpecifier","src":"2223:35:152"}],"canonicalName":"Middleware","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[75052,42870,41409,42571,41677,72281],"name":"Middleware","nameLocation":"2176:10:152","scope":75053,"usedErrors":[41245,41250,41426,41429,42802,52631,54542,71929,71932,71935,71938,71941,71944,71947,71950,71953,71956,71959,71962,71965,71968,71971,71974,71977,71980,71983,71986,71989,71992,71995,71998,72001,72004,72007,72010,80929,80931,80933],"usedEvents":[41256,41434]}],"license":"UNLICENSED"},"id":152} \ No newline at end of file diff --git a/ethexe/ethereum/Mirror.json b/ethexe/ethereum/Mirror.json index 1cff22eef2e..1c6309f7bd5 100644 --- a/ethexe/ethereum/Mirror.json +++ b/ethexe/ethereum/Mirror.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_router","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"exited","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"inheritor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_initializer","type":"address","internalType":"address"},{"name":"_abiInterface","type":"address","internalType":"address"},{"name":"_isSmall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initializer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"performStateTransition","inputs":[{"name":"_transition","type":"tuple","internalType":"struct Gear.StateTransition","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"exited","type":"bool","internalType":"bool"},{"name":"inheritor","type":"address","internalType":"address"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueToReceiveNegativeSign","type":"bool","internalType":"bool"},{"name":"valueClaims","type":"tuple[]","internalType":"struct Gear.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct Gear.Message[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct Gear.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]},{"name":"call","type":"bool","internalType":"bool"}]}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_callReply","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"transferLockedValueToInheritor","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageCallFailed","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"callReply","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"OwnedBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyCallFailed","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60a03461008557601f611c4938819003918201601f19168301916001600160401b038311848410176100895780849260209460405283398101031261008557516001600160a01b038116810361008557608052604051611bab908161009e823960805181818160c8015281816104f20152818161112c015281816114a3015261160e0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6101006040526004361015610019575b61001761135f565b005b5f5f3560e01c8063084f443a1461088857806336a52a181461085b57806342129d00146106b85780635ce6c32714610695578063701da98e14610678578063704ed5421461047f5780637a8e0cdd146103f157806391d5a64c1461039e5780639ce110d714610375578063affed0e014610357578063e43f3433146102da578063e4bbb5a8146100fa5763f887ea40146100b3575061000f565b346100f757806003193601126100f7576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b50346100f75760603660031901126100f7576004356001600160a01b038116908190036102d6576024356001600160a01b03811691908290036102d257604435908115158092036102ce5761014d6114a1565b600354906001600160a01b03821661027e5760ff8260a01c16610239577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54926001600160a01b0384166101e8576001600160a81b03199092161760a09190911b60ff60a01b16176003556001600160a01b031916177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5580f35b60405162461bcd60e51b8152602060048201526024808201527f61626920696e7465726661636520636f756c64206f6e6c7920626520736574206044820152636f6e636560e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f6973536d616c6c20636f756c64206f6e6c7920626520736574206f6e636500006044820152606490fd5b60405162461bcd60e51b815260206004820152602260248201527f696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e604482015261636560f01b6064820152608490fd5b8380fd5b8280fd5b5080fd5b50346100f757806003193601126100f75760025460ff81161561031a5761031790476001600160801b03169060081c6001600160a01b03166116b4565b80f35b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81b9bdd08195e1a5d1959605a1b6044820152606490fd5b50346100f757806003193601126100f7576020600154604051908152f35b50346100f757806003193601126100f7576003546040516001600160a01b039091168152602090f35b50346100f75760203660031901126100f7576103b861154e565b6103c0611593565b60405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203392a280f35b5060403660031901126100f7576024356001600160401b0381116102d65761043e7fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f91369060040161121c565b61044992919261154e565b610451611593565b6001600160801b03341690610465826115f6565b610479604051928392339660043585611331565b0390a280f35b50346100f75760203660031901126100f7576004356001600160801b0381168091036102d6576104ad61154e565b806104e1575b60207f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666791604051908152a180f35b60405163088f50cf60e41b815282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa908115610628578391610633575b50606460209260405194859384926323b872dd60e01b8452336004850152602484015287604484015260018060a01b03165af19081156106285783916105ed575b506104b35760405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662057566172612066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b90506020813d602011610620575b81610608602093836112a6565b810103126102d2575180151581036102d2575f610573565b3d91506105fb565b6040513d85823e3d90fd5b90506020813d602011610670575b8161064e602093836112a6565b810103126102d25751906001600160a01b03821682036102d257906064610532565b3d9150610641565b50346100f757806003193601126100f75760209054604051908152f35b50346100f757806003193601126100f757602060ff600254166040519015158152f35b5060403660031901126100f7576004356001600160401b0381116102d6576106e490369060040161121c565b916024358015158091036102d6576106fa61154e565b60015415801590610847575b156107c5576001600160801b0334169161071f836115f6565b600154905f1982146107b15750937f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c549161079886600160209801600155604051888101913060601b835260348201526034815261077d6054826112a6565b51902095604051938785526080898601526080850191611311565b93604083015260608201528033930390a2604051908152f35b634e487b7160e01b81526011600452602490fd5b60405162461bcd60e51b815260206004820152604e60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201527f6d657373616765207965743b20616e642063616c6c6572206973206e6f74207460648201526d34329034b734ba34b0b634bd32b960911b608482015260a490fd5b506003546001600160a01b03163314610706565b50346100f757806003193601126100f75760025460405160089190911c6001600160a01b03168152602090f35b506020366003190112610d85576004356001600160401b038111610d855780360391610100600319840112610d85576108bf6114a1565b6108cb82600401611271565b306001600160a01b03909116036111d75760848201926001600160801b036108f285611285565b161515806111c5575b611114575b6022190160e483013581811215610d8557830192600484013560a0526001600160401b0360a05111610d855760a05160051b928336036024860113610d855760a051840460201460a051151715610d715761095c849694611725565b6080525f60e081905261010219368790030194905b60a051811015610d9d576024600582901b8801013586811215610d85576004908801019060208201601f19833603019060e08212610d85576040519160c083018381106001600160401b03821117610d89576040528135835260408501906109d88261125d565b602085019081526060870160c05260c051356001600160401b038111610d855760209088010136601f82011215610d8557610a1a903690602081359101611518565b906040860191825260808801926040610a3285611249565b6060890190815291607f190112610d855760405192604084018481106001600160401b03821117610d895760405260a08a01358085529760c08b01948535926001600160e01b031984168403610d85576020820193845281608084015260e08d013591821515808403610d8557610b25958560549560a060359801525198519351975192519063ffffffff60e01b905116906020604051998a968288019c8d526001600160601b03199060601b1660408801528051918291018888015e8501936001600160801b03199060801b16868501526064840152608483015260f81b6088820152030160158101845201826112a6565b51902060e0516080510152602060e05101968760e05111610d715760019760e05285155f14610b625750505050610b5c9150611791565b01610971565b60e0610b7391959293949501611299565b15610cd9575f9081906001600160f81b0319610b8e8561177c565b831a60f81b16156060908314610c6f5750610baf610bb69160c0519061174a565b3691611518565b610bbf86611271565b6001600160801b03610bd087611285565b16602083519301916207a120f1610be56112e2565b5015610bf5575b50505050610b5c565b610c3c604092610c37610c287f5136ea80de584762b9532903198dfdd1125167a8685e943b1bc5d16b777151c396611271565b610c3183611285565b906116b4565b611285565b906001600160e01b031990610c509061177c565b16936001600160801b038351921682526020820152a25f808080610bec565b90610cd490610cb7610c8360c0518361174a565b9190610c8e8961177c565b92604051968795634a646c7f60e01b602088015235602487015260448601526084850191611311565b9063ffffffff60e01b16606483015203601f1981018352826112a6565b610bb6565b90610d20610d2892610d17610d0e7fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c697611271565b610c3187611285565b60c0519061174a565b929093611285565b906001600160e01b031990610d3c9061177c565b16946001600160801b03610d5d604051958695606087526060870191611311565b9216602084015260408301520390a2610b5c565b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b5086608051209360c484013590811215610d85578301916004830135936001600160401b038511610d85576060850236036024850113610d85576060955f5b86811015610f2d576004606082028701016060601f198236030112610d855760405190606082018281106001600160401b03821117610d8957604052602081013591828152604082019a610e2f8c61125d565b9283602084015260600192610e4384611249565b6040819401526040519260208401918683526001600160601b03199060601b1660408501526001600160801b03199060801b16605484015260448352610e8a6064846112a6565b60405192828493516020819201602086015e83019060208201905f8252519283915e016020015f815203601f1981018252610ec590826112a6565b99610ecf90611271565b610ed882611285565b610ee1916116b4565b610eea90611285565b604080519283526001600160801b039190911660208301527fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578391a1600101610ddc565b50865160208801206044830193610f4385611299565b156110a057506020946001610f5a60648601611271565b610f6261154e565b600280546001600160a81b031916600892831b60ff1960a886901b011617909217918290555f9591610fa991476001600160801b031691901c6001600160a01b03166116b4565b84546024820135958680920361106f575b5050610fd1610fcb82600401611271565b96611299565b91610ff360a4610fec610fe660648601611271565b93611285565b9301611299565b9260405196898801986001600160601b03199060601b1689526034880152151560f81b60548701526001600160601b03199060601b1660558601526001600160801b03199060801b166069850152151560f81b6079840152607a830152609a820152609a815261106460ba826112a6565b519020604051908152f35b557f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c08093087604051878152a18488610fba565b92946001600160a01b036110b660648801611271565b166110c357602095610fa9565b60405162461bcd60e51b8152602060048201526024808201527f696e68657269746f72206d757374206265207a65726f206966206e6f742065786044820152631a5d195960e21b6064820152608490fd5b5f8080806001600160801b0361112989611285565b167f00000000000000000000000000000000000000000000000000000000000000005af16111556112e2565b506109005760405162461bcd60e51b815260206004820152603a60248201527f6661696c656420746f207472616e736665722076616c756520746f20726f757460448201527f657220647572696e67207374617465207472616e736974696f6e0000000000006064820152608490fd5b506111d260a48401611299565b6108fb565b60405162461bcd60e51b815260206004820152601d60248201527f6163746f724964206d757374206265207468697320636f6e74726163740000006044820152606490fd5b9181601f84011215610d85578235916001600160401b038311610d855760208381860195010111610d8557565b35906001600160801b0382168203610d8557565b35906001600160a01b0382168203610d8557565b356001600160a01b0381168103610d855790565b356001600160801b0381168103610d855790565b358015158103610d855790565b90601f801991011681019081106001600160401b03821117610d8957604052565b6001600160401b038111610d8957601f01601f191660200190565b3d1561130c573d906112f3826112c7565b9161130160405193846112a6565b82523d5f602084013e565b606090565b908060209392818452848401375f828201840152601f01601f1916010190565b92604092611358916001600160801b03939796978652606060208701526060860191611311565b9416910152565b34151580611499575b6114645760ff60035460a01c16610d855760243610610d855761138961154e565b60015415801590611450575b156107c5576001600160801b0334166113ad816115f6565b6001545f198114610d71576001810160015560405160208101913060601b83526034820152603481526113e16054826112a6565b519020907f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c5460405183815260806020820152602060808201368152365f838301375f823683010152601f19601f3601160101926040820152600435151560608201528033930390a25f5260205ff35b506003546001600160a01b03163314611395565b7f134041dec9803c024e94a2479679395a15b6ae0034c4d424ab47712aa182620660206040516001600160801b0334168152a1565b503615611368565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036114d357565b60405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f742074686520726f7574657200000000000000006044820152606490fd5b929192611524826112c7565b9161153260405193846112a6565b829481845281830111610d85578281602093845f960137010152565b60ff6002541661155a57565b60405162461bcd60e51b81526020600482015260116024820152701c1c9bd9dc985b481a5cc8195e1a5d1959607a1b6044820152606490fd5b6001541561159d57565b60405162461bcd60e51b815260206004820152602b60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201526a1b595cdcd859d9481e595d60aa1b6064820152608490fd5b6001600160801b0316806116075750565b5f808080937f00000000000000000000000000000000000000000000000000000000000000005af16116376112e2565b501561163f57565b60405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662045746865722066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b906001600160801b031690816116c8575050565b5f80809381935af16116d86112e2565b50156116e057565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207472616e7366657220457468657200000000000000006044820152606490fd5b6040519190601f01601f191682016001600160401b03811183821017610d8557604052565b903590601e1981360301821215610d8557018035906001600160401b038211610d8557602001918136038313610d8557565b356001600160e01b031981168103610d855790565b61179a816118c7565b156117a25750565b6117ae60c08201611299565b61181b575b7f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117736118166117e360208401611271565b6117f0604085018561174a565b6117ff60608795939501611285565b9060405194859460018060a01b0316973585611331565b0390a2565b602081015f8061182a83611271565b81611838604087018761174a565b9190826040519384928337810182815203926207a120f16118576112e2565b501561186357506117b3565b61188d7f76c87872723521658a1c429bc5e355c5ad7b30719dae90158fe2b591f9ea56f891611271565b61189960608401611285565b60408051943585526001600160801b0390911660208501526001600160a01b03909116929081908101611816565b6118d4604082018261174a565b90916001600160a01b03806118eb60208401611271565b16149081611b8d575b5080611b84575b15611b7e5781358060f81c90600182101580611b73575b15611b6b5760f31c611fe016600181018310611b6b576001840135927f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c08093084141580611b41575b80611b17575b80611aed575b80611ac3575b80611a99575b80611a6f575b80611a45575b80611a1b575b15611a12578190035f19019182600161199a82611725565b938701018337602185013594604181013591600181036119c15750505090919250a1600190565b600281036119d257505050a2600190565b600381979593969497145f146119ee57505090919293a3600190565b600414611a01575b505050505050600190565b6061013594a45f80808080806119f6565b50505050505f90565b507fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783841415611982565b507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c684141561197c565b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f8011773841415611976565b507f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667841415611970565b507f134041dec9803c024e94a2479679395a15b6ae0034c4d424ab47712aa182620684141561196a565b507f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c4978841415611964565b507fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f84141561195e565b507f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c54841415611958565b505050505f90565b506004821115611912565b50505f90565b508015156118fb565b6001600160801b0391506060611ba39101611285565b16155f6118f456","sourceMap":"576:17620:153:-:0;;;;;;;;;;;;;-1:-1:-1;;576:17620:153;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;1938:16;;576:17620;;;;;;;;1938:16;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;576:17620:153;;;;;;-1:-1:-1;576:17620:153;;;;;-1:-1:-1;576:17620:153","linkReferences":{}},"deployedBytecode":{"object":"0x6101006040526004361015610019575b61001761135f565b005b5f5f3560e01c8063084f443a1461088857806336a52a181461085b57806342129d00146106b85780635ce6c32714610695578063701da98e14610678578063704ed5421461047f5780637a8e0cdd146103f157806391d5a64c1461039e5780639ce110d714610375578063affed0e014610357578063e43f3433146102da578063e4bbb5a8146100fa5763f887ea40146100b3575061000f565b346100f757806003193601126100f7576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b50346100f75760603660031901126100f7576004356001600160a01b038116908190036102d6576024356001600160a01b03811691908290036102d257604435908115158092036102ce5761014d6114a1565b600354906001600160a01b03821661027e5760ff8260a01c16610239577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54926001600160a01b0384166101e8576001600160a81b03199092161760a09190911b60ff60a01b16176003556001600160a01b031916177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5580f35b60405162461bcd60e51b8152602060048201526024808201527f61626920696e7465726661636520636f756c64206f6e6c7920626520736574206044820152636f6e636560e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f6973536d616c6c20636f756c64206f6e6c7920626520736574206f6e636500006044820152606490fd5b60405162461bcd60e51b815260206004820152602260248201527f696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e604482015261636560f01b6064820152608490fd5b8380fd5b8280fd5b5080fd5b50346100f757806003193601126100f75760025460ff81161561031a5761031790476001600160801b03169060081c6001600160a01b03166116b4565b80f35b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81b9bdd08195e1a5d1959605a1b6044820152606490fd5b50346100f757806003193601126100f7576020600154604051908152f35b50346100f757806003193601126100f7576003546040516001600160a01b039091168152602090f35b50346100f75760203660031901126100f7576103b861154e565b6103c0611593565b60405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203392a280f35b5060403660031901126100f7576024356001600160401b0381116102d65761043e7fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f91369060040161121c565b61044992919261154e565b610451611593565b6001600160801b03341690610465826115f6565b610479604051928392339660043585611331565b0390a280f35b50346100f75760203660031901126100f7576004356001600160801b0381168091036102d6576104ad61154e565b806104e1575b60207f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666791604051908152a180f35b60405163088f50cf60e41b815282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa908115610628578391610633575b50606460209260405194859384926323b872dd60e01b8452336004850152602484015287604484015260018060a01b03165af19081156106285783916105ed575b506104b35760405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662057566172612066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b90506020813d602011610620575b81610608602093836112a6565b810103126102d2575180151581036102d2575f610573565b3d91506105fb565b6040513d85823e3d90fd5b90506020813d602011610670575b8161064e602093836112a6565b810103126102d25751906001600160a01b03821682036102d257906064610532565b3d9150610641565b50346100f757806003193601126100f75760209054604051908152f35b50346100f757806003193601126100f757602060ff600254166040519015158152f35b5060403660031901126100f7576004356001600160401b0381116102d6576106e490369060040161121c565b916024358015158091036102d6576106fa61154e565b60015415801590610847575b156107c5576001600160801b0334169161071f836115f6565b600154905f1982146107b15750937f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c549161079886600160209801600155604051888101913060601b835260348201526034815261077d6054826112a6565b51902095604051938785526080898601526080850191611311565b93604083015260608201528033930390a2604051908152f35b634e487b7160e01b81526011600452602490fd5b60405162461bcd60e51b815260206004820152604e60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201527f6d657373616765207965743b20616e642063616c6c6572206973206e6f74207460648201526d34329034b734ba34b0b634bd32b960911b608482015260a490fd5b506003546001600160a01b03163314610706565b50346100f757806003193601126100f75760025460405160089190911c6001600160a01b03168152602090f35b506020366003190112610d85576004356001600160401b038111610d855780360391610100600319840112610d85576108bf6114a1565b6108cb82600401611271565b306001600160a01b03909116036111d75760848201926001600160801b036108f285611285565b161515806111c5575b611114575b6022190160e483013581811215610d8557830192600484013560a0526001600160401b0360a05111610d855760a05160051b928336036024860113610d855760a051840460201460a051151715610d715761095c849694611725565b6080525f60e081905261010219368790030194905b60a051811015610d9d576024600582901b8801013586811215610d85576004908801019060208201601f19833603019060e08212610d85576040519160c083018381106001600160401b03821117610d89576040528135835260408501906109d88261125d565b602085019081526060870160c05260c051356001600160401b038111610d855760209088010136601f82011215610d8557610a1a903690602081359101611518565b906040860191825260808801926040610a3285611249565b6060890190815291607f190112610d855760405192604084018481106001600160401b03821117610d895760405260a08a01358085529760c08b01948535926001600160e01b031984168403610d85576020820193845281608084015260e08d013591821515808403610d8557610b25958560549560a060359801525198519351975192519063ffffffff60e01b905116906020604051998a968288019c8d526001600160601b03199060601b1660408801528051918291018888015e8501936001600160801b03199060801b16868501526064840152608483015260f81b6088820152030160158101845201826112a6565b51902060e0516080510152602060e05101968760e05111610d715760019760e05285155f14610b625750505050610b5c9150611791565b01610971565b60e0610b7391959293949501611299565b15610cd9575f9081906001600160f81b0319610b8e8561177c565b831a60f81b16156060908314610c6f5750610baf610bb69160c0519061174a565b3691611518565b610bbf86611271565b6001600160801b03610bd087611285565b16602083519301916207a120f1610be56112e2565b5015610bf5575b50505050610b5c565b610c3c604092610c37610c287f5136ea80de584762b9532903198dfdd1125167a8685e943b1bc5d16b777151c396611271565b610c3183611285565b906116b4565b611285565b906001600160e01b031990610c509061177c565b16936001600160801b038351921682526020820152a25f808080610bec565b90610cd490610cb7610c8360c0518361174a565b9190610c8e8961177c565b92604051968795634a646c7f60e01b602088015235602487015260448601526084850191611311565b9063ffffffff60e01b16606483015203601f1981018352826112a6565b610bb6565b90610d20610d2892610d17610d0e7fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c697611271565b610c3187611285565b60c0519061174a565b929093611285565b906001600160e01b031990610d3c9061177c565b16946001600160801b03610d5d604051958695606087526060870191611311565b9216602084015260408301520390a2610b5c565b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b5086608051209360c484013590811215610d85578301916004830135936001600160401b038511610d85576060850236036024850113610d85576060955f5b86811015610f2d576004606082028701016060601f198236030112610d855760405190606082018281106001600160401b03821117610d8957604052602081013591828152604082019a610e2f8c61125d565b9283602084015260600192610e4384611249565b6040819401526040519260208401918683526001600160601b03199060601b1660408501526001600160801b03199060801b16605484015260448352610e8a6064846112a6565b60405192828493516020819201602086015e83019060208201905f8252519283915e016020015f815203601f1981018252610ec590826112a6565b99610ecf90611271565b610ed882611285565b610ee1916116b4565b610eea90611285565b604080519283526001600160801b039190911660208301527fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578391a1600101610ddc565b50865160208801206044830193610f4385611299565b156110a057506020946001610f5a60648601611271565b610f6261154e565b600280546001600160a81b031916600892831b60ff1960a886901b011617909217918290555f9591610fa991476001600160801b031691901c6001600160a01b03166116b4565b84546024820135958680920361106f575b5050610fd1610fcb82600401611271565b96611299565b91610ff360a4610fec610fe660648601611271565b93611285565b9301611299565b9260405196898801986001600160601b03199060601b1689526034880152151560f81b60548701526001600160601b03199060601b1660558601526001600160801b03199060801b166069850152151560f81b6079840152607a830152609a820152609a815261106460ba826112a6565b519020604051908152f35b557f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c08093087604051878152a18488610fba565b92946001600160a01b036110b660648801611271565b166110c357602095610fa9565b60405162461bcd60e51b8152602060048201526024808201527f696e68657269746f72206d757374206265207a65726f206966206e6f742065786044820152631a5d195960e21b6064820152608490fd5b5f8080806001600160801b0361112989611285565b167f00000000000000000000000000000000000000000000000000000000000000005af16111556112e2565b506109005760405162461bcd60e51b815260206004820152603a60248201527f6661696c656420746f207472616e736665722076616c756520746f20726f757460448201527f657220647572696e67207374617465207472616e736974696f6e0000000000006064820152608490fd5b506111d260a48401611299565b6108fb565b60405162461bcd60e51b815260206004820152601d60248201527f6163746f724964206d757374206265207468697320636f6e74726163740000006044820152606490fd5b9181601f84011215610d85578235916001600160401b038311610d855760208381860195010111610d8557565b35906001600160801b0382168203610d8557565b35906001600160a01b0382168203610d8557565b356001600160a01b0381168103610d855790565b356001600160801b0381168103610d855790565b358015158103610d855790565b90601f801991011681019081106001600160401b03821117610d8957604052565b6001600160401b038111610d8957601f01601f191660200190565b3d1561130c573d906112f3826112c7565b9161130160405193846112a6565b82523d5f602084013e565b606090565b908060209392818452848401375f828201840152601f01601f1916010190565b92604092611358916001600160801b03939796978652606060208701526060860191611311565b9416910152565b34151580611499575b6114645760ff60035460a01c16610d855760243610610d855761138961154e565b60015415801590611450575b156107c5576001600160801b0334166113ad816115f6565b6001545f198114610d71576001810160015560405160208101913060601b83526034820152603481526113e16054826112a6565b519020907f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c5460405183815260806020820152602060808201368152365f838301375f823683010152601f19601f3601160101926040820152600435151560608201528033930390a25f5260205ff35b506003546001600160a01b03163314611395565b7f134041dec9803c024e94a2479679395a15b6ae0034c4d424ab47712aa182620660206040516001600160801b0334168152a1565b503615611368565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036114d357565b60405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f742074686520726f7574657200000000000000006044820152606490fd5b929192611524826112c7565b9161153260405193846112a6565b829481845281830111610d85578281602093845f960137010152565b60ff6002541661155a57565b60405162461bcd60e51b81526020600482015260116024820152701c1c9bd9dc985b481a5cc8195e1a5d1959607a1b6044820152606490fd5b6001541561159d57565b60405162461bcd60e51b815260206004820152602b60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201526a1b595cdcd859d9481e595d60aa1b6064820152608490fd5b6001600160801b0316806116075750565b5f808080937f00000000000000000000000000000000000000000000000000000000000000005af16116376112e2565b501561163f57565b60405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662045746865722066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b906001600160801b031690816116c8575050565b5f80809381935af16116d86112e2565b50156116e057565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207472616e7366657220457468657200000000000000006044820152606490fd5b6040519190601f01601f191682016001600160401b03811183821017610d8557604052565b903590601e1981360301821215610d8557018035906001600160401b038211610d8557602001918136038313610d8557565b356001600160e01b031981168103610d855790565b61179a816118c7565b156117a25750565b6117ae60c08201611299565b61181b575b7f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117736118166117e360208401611271565b6117f0604085018561174a565b6117ff60608795939501611285565b9060405194859460018060a01b0316973585611331565b0390a2565b602081015f8061182a83611271565b81611838604087018761174a565b9190826040519384928337810182815203926207a120f16118576112e2565b501561186357506117b3565b61188d7f76c87872723521658a1c429bc5e355c5ad7b30719dae90158fe2b591f9ea56f891611271565b61189960608401611285565b60408051943585526001600160801b0390911660208501526001600160a01b03909116929081908101611816565b6118d4604082018261174a565b90916001600160a01b03806118eb60208401611271565b16149081611b8d575b5080611b84575b15611b7e5781358060f81c90600182101580611b73575b15611b6b5760f31c611fe016600181018310611b6b576001840135927f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c08093084141580611b41575b80611b17575b80611aed575b80611ac3575b80611a99575b80611a6f575b80611a45575b80611a1b575b15611a12578190035f19019182600161199a82611725565b938701018337602185013594604181013591600181036119c15750505090919250a1600190565b600281036119d257505050a2600190565b600381979593969497145f146119ee57505090919293a3600190565b600414611a01575b505050505050600190565b6061013594a45f80808080806119f6565b50505050505f90565b507fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783841415611982565b507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c684141561197c565b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f8011773841415611976565b507f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667841415611970565b507f134041dec9803c024e94a2479679395a15b6ae0034c4d424ab47712aa182620684141561196a565b507f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c4978841415611964565b507fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f84141561195e565b507f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c54841415611958565b505050505f90565b506004821115611912565b50505f90565b508015156118fb565b6001600160801b0391506060611ba39101611285565b16155f6118f456","sourceMap":"576:17620:153:-:0;;;;;;;;;-1:-1:-1;576:17620:153;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1026:31;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;3421:63;;:::i;:::-;5831:11;576:17620;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;811:66:51;576:17620:153;;-1:-1:-1;;;;;576:17620:153;;811:66:51;;-1:-1:-1;;;;;;811:66:51;;;;;;;;;-1:-1:-1;;;811:66:51;;5831:11:153;811:66:51;-1:-1:-1;;;;;;811:66:51;;;;576:17620:153;;811:66:51;576:17620:153;;-1:-1:-1;;;811:66:51;;576:17620:153;;811:66:51;;;576:17620:153;811:66:51;;;576:17620:153;811:66:51;576:17620:153;;;811:66:51;-1:-1:-1;;;811:66:51;;;;;;;576:17620:153;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3293:6;576:17620;;;;;;;5633:16;;5426:21;-1:-1:-1;;;;;576:17620:153;;;;-1:-1:-1;;;;;576:17620:153;5633:16;:::i;:::-;576:17620;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;1328:20;576:17620;;;;;;;;;;;;;;;;;;;;1671:26;576:17620;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;-1:-1:-1;;576:17620:153;;;;2901:67;;:::i;:::-;2080:83;;:::i;:::-;576:17620;;;;;;5117:46;576:17620;5152:10;5117:46;;576:17620;;;-1:-1:-1;576:17620:153;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;4875:64;576:17620;;;;;;:::i;:::-;2901:67;;;;;:::i;:::-;2080:83;;:::i;:::-;-1:-1:-1;;;;;4814:9:153;576:17620;4852:6;;;;:::i;:::-;4875:64;576:17620;;4910:10;;;;576:17620;;;4875:64;;:::i;:::-;;;;576:17620;;;;;;;;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;2901:67;;:::i;:::-;3880:10;3876:209;;576:17620;;5284:39;576:17620;;;;;;5284:39;576:17620;;3876:209;576:17620;;-1:-1:-1;;;16930:33:153;;576:17620;;3928:6;-1:-1:-1;;;;;576:17620:153;;;;;;;16930:33;;;;;;;;;;;3876:209;576:17620;3921:54;576:17620;;;;;;;;;;;;3921:54;;3949:10;576:17620;3921:54;;576:17620;;;;;;;;;;;;;;;;3921:54;;;;;;;;;;;3876:209;576:17620;3876:209;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;3921:54;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;3921:54;;;576:17620;3921:54;;576:17620;3921:54;;;;;;576:17620;3921:54;;;:::i;:::-;;;576:17620;;;;;;;;;;;;3921:54;;;;;;-1:-1:-1;3921:54:153;;;576:17620;;;;;;;;;16930:33;;;576:17620;16930:33;;576:17620;16930:33;;;;;;576:17620;16930:33;;;:::i;:::-;;;576:17620;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;16930:33;3921:54;16930:33;;;;;-1:-1:-1;16930:33:153;;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1423:18;576:17620;;;;;;;;;;;-1:-1:-1;576:17620:153;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;2901:67;;:::i;:::-;2656:5;576:17620;2656:9;;;:38;;;576:17620;;;;-1:-1:-1;;;;;8288:9:153;576:17620;8326:6;;;;:::i;:::-;2656:5;576:17620;;-1:-1:-1;;576:17620:153;;;;;;8424:70;576:17620;;;2656:5;576:17620;;;2656:5;576:17620;;;8367:40;;;8392:4;;576:17620;;;;;;;;;8367:40;;;;;;:::i;:::-;576:17620;8357:51;;576:17620;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8453:10;;8424:70;;;;576:17620;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;2656:38;-1:-1:-1;2683:11:153;576:17620;-1:-1:-1;;;;;576:17620:153;2669:10;:25;2656:38;;576:17620;;;;;;;;;;;;;1576:24;576:17620;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;-1:-1:-1;576:17620:153;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;3421:63;;:::i;:::-;6564:19;576:17620;;;6564:19;:::i;:::-;6595:4;-1:-1:-1;;;;;576:17620:153;;;6564:36;576:17620;;6744:26;;;;-1:-1:-1;;;;;6744:26:153;;;:::i;:::-;576:17620;6744:31;;:73;;;576:17620;6740:264;;576:17620;-1:-1:-1;;576:17620:153;7102:20;;;576:17620;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9018:34;;;;;:::i;:::-;;;576:17620;9063:18;;;;-1:-1:-1;;576:17620:153;;;;;;;9121:3;9112:7;;;;;;;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;6744:26;576:17620;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;576:17620:153;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;576:17620:153;;;;;;;;;;;;;6744:26;576:17620;;;;;;;;;;;;;;;;8762:273:161;576:17620:153;;;;;;;;;;;;8861:15:161;;576:17620:153;;;;;;;;;;;;;;;8762:273:161;;;;;;576:17620:153;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;6744:26;576:17620;;;;;;;;;;6744:26;576:17620;;;;;;;;;8762:273:161;;;;;;;;;;:::i;:::-;576:17620:153;8739:306:161;;3266:83:22;;;;;;576:17620:153;;;;;;;;;;;;9429:12;;;9492:28;;9488:162;9492:28;;;9562:7;;;;;;;;:::i;:::-;576:17620;9097:13;;9488:162;576:17620;14395:13;576:17620;;;;;;;14395:13;:::i;:::-;576:17620;;;;;;;-1:-1:-1;;;;;;14446:26:153;;;:::i;:::-;:29;;576:17620;;;14446:34;576:17620;14530:433;;;;;14578:16;;576:17620;14578:16;;;;;:::i;:::-;576:17620;;;:::i;:::-;14995:20;;;:::i;:::-;-1:-1:-1;;;;;15042:14:153;;;:::i;:::-;576:17620;;14995:71;;;;;15026:7;14995:71;;;:::i;:::-;;15085:8;15081:309;;14530:433;14391:1205;;;;9488:162;;15081:309;15306:14;576:17620;15128:20;15150:14;15128:20;15290:85;15128:20;;:::i;:::-;15150:14;;;:::i;:::-;;;:::i;:::-;15306;:::i;:::-;576:17620;-1:-1:-1;;;;;;576:17620:153;15348:26;;;:::i;:::-;576:17620;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;15290:85;15081:309;;;;;;14530:433;14886:16;14795:153;14886:16;576:17620;14886:16;;;;;:::i;:::-;14904:26;;;;;:::i;:::-;576:17620;;;14839:32;;;;;;576:17620;14795:153;;;576:17620;14795:153;;;576:17620;;;;;6744:26;576:17620;;;;:::i;:::-;;;;;;;;;;14795:153;576:17620;;14795:153;;;;;;:::i;:::-;14530:433;;14391:1205;15435:20;15498:16;15516:14;15435:20;15457:14;15435:20;15492:93;15435:20;;:::i;:::-;15457:14;;;:::i;:::-;15498:16;;;;:::i;:::-;15516:14;;;;:::i;:::-;576:17620;-1:-1:-1;;;;;;576:17620:153;15558:26;;;:::i;:::-;576:17620;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;15492:93;;;9488:162;;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;;;9112:7;;;531:131:25;;;7217:23:153;;;;576:17620;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;15844:13;576:17620;15879:3;15859:18;;;;;;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;16899:65:161;576:17620:153;16899:65:161;;576:17620:153;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;6744:26;576:17620;;;;;;;16899:65:161;;;;;;:::i;:::-;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16064:17;;;;:::i;:::-;16083:11;;;:::i;:::-;;;;:::i;:::-;16145;;;:::i;:::-;576:17620;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;16115:42;;;576:17620;;15844:13;;15859:18;-1:-1:-1;576:17620:153;;;;;16185:27;576:17620;7298:18;;;;;;:::i;:::-;;;;7346:21;576:17620;7346:21;576:17620;7346:21;16899:65:161;7346:21:153;;;:::i;:::-;2901:67;;:::i;:::-;16386:13;576:17620;;-1:-1:-1;;;;;;576:17620:153;;;;;-1:-1:-1;;576:17620:153;;;;;;;;;;;;;;-1:-1:-1;;576:17620:153;5633:16;;5426:21;-1:-1:-1;;;;;576:17620:153;;;;-1:-1:-1;;;;;576:17620:153;5633:16;:::i;:::-;576:17620;;7572:24;;;576:17620;7559:37;;;;;7555:110;;7294:200;576:17620;;7851:18;7780:19;576:17620;;;7780:19;:::i;:::-;7851:18;;:::i;:::-;7883:21;7958:38;;7918:26;7883:21;16899:65:161;7883:21:153;;;:::i;:::-;7918:26;;:::i;:::-;7958:38;;;:::i;:::-;576:17620;;;9610:279:161;;;;576:17620:153;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;6744:26;576:17620;;;;;;;;;;;;;;;;;;;;;;;9610:279:161;;;;;;:::i;:::-;576:17620:153;9587:312:161;;576:17620:153;;;;;;7555:110;576:17620;16758:23;576:17620;;;;;;16758:23;7555:110;;;;7294:200;576:17620;;-1:-1:-1;;;;;7407:21:153;16899:65:161;7407:21:153;;;:::i;:::-;576:17620;;;;7294:200;;;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;-1:-1:-1;;;16899:65:161;576:17620:153;;;6744:26;;576:17620;6740:264;576:17620;6870:26;;;-1:-1:-1;;;;;6870:26:153;;;:::i;:::-;576:17620;6851:6;:50;;;;:::i;:::-;;6740:264;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;6744:26;;576:17620;6744:73;6779:38;;;;;;:::i;:::-;6744:73;;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;576:17620:153;;;;;;:::o;:::-;;;-1:-1:-1;;;;;576:17620:153;;;;;;:::o;:::-;;-1:-1:-1;;;;;576:17620:153;;;;;;;:::o;:::-;;-1:-1:-1;;;;;576:17620:153;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;:::o;:::-;-1:-1:-1;;;;;576:17620:153;;;;;;-1:-1:-1;;576:17620:153;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;576:17620:153;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;576:17620:153;;;;;;;;-1:-1:-1;;576:17620:153;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;17257:937::-;17299:9;:13;;:37;;;17257:937;17295:176;;576:17620;17630:7;576:17620;;;;;;17882:4;17863:8;:23;576:17620;;2901:67;;:::i;:::-;2656:5;576:17620;2656:9;;;:38;;;17257:937;576:17620;;;-1:-1:-1;;;;;17299:9:153;576:17620;8326:6;;;:::i;:::-;2656:5;576:17620;-1:-1:-1;;576:17620:153;;;;2656:5;576:17620;;2656:5;576:17620;;;8367:40;;;8392:4;;576:17620;;;;;;;;;8367:40;;;;;;:::i;:::-;576:17620;8357:51;;576:17620;8424:70;576:17620;;;;;;8367:40;576:17620;;;;;;;17863:8;576:17620;;17863:8;17311:1;576:17620;;;;17311:1;17863:8;;576:17620;;;;;;;17863:8;576:17620;;;;;;;;;17926:80;;18059:14;;576:17620;;;;8453:10;;8424:70;;;;17311:1;18085:103;8367:40;17311:1;18085:103;2656:38;-1:-1:-1;17630:7:153;576:17620;-1:-1:-1;;;;;576:17620:153;2669:10;:25;2656:38;;17295:176;17406:33;576:17620;;;-1:-1:-1;;;;;17299:9:153;576:17620;;;17406:33;17454:7::o;17299:37::-;17316:8;;:20;17299:37;;3490:111;3559:6;-1:-1:-1;;;;;576:17620:153;3545:10;:20;576:17620;;3490:111::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;576:17620:153;;;;;;:::o;2974:93::-;576:17620;3032:6;576:17620;;;;2974:93::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;2169:129;2234:5;576:17620;2234:9;576:17620;;2169:129::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;4213:253;-1:-1:-1;;;;;576:17620:153;4277:10;4273:187;;4213:253;:::o;4273:187::-;4286:1;4321:6;;;;;:29;;;;:::i;:::-;;576:17620;;;4213:253::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;17016:235;;-1:-1:-1;;;;;576:17620:153;17098:10;;17094:151;;17016:235;;:::o;17094:151::-;17107:1;17142:34;;;;;;;;;:::i;:::-;;576:17620;;;17016:235::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;863:809:22;1052:614;;;863:809;1052:614;;-1:-1:-1;;1052:614:22;;;-1:-1:-1;;;;;1052:614:22;;;;;;;;;;863:809::o;576:17620:153:-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;;;;;576:17620:153;;;;;;;:::o;9821:657::-;9907:36;;;:::i;:::-;9906:37;9902:570;;9821:657;:::o;9902:570::-;9963:13;;;;;:::i;:::-;9959:407;;9902:570;10385:76;;10406:20;;;;;:::i;:::-;10428:16;;;;;;:::i;:::-;10446:14;;;;;;;;:::i;:::-;576:17620;10428:16;576:17620;;;;;;;;;;;;10385:76;;:::i;:::-;;;;9821:657::o;9959:407::-;10014:20;;;-1:-1:-1;10014:20:153;;;;:::i;:::-;10054:16;;;;;;;:::i;:::-;576:17620;;;10054:16;576:17620;;;;;;;;;;;10014:57;;10045:7;10014:57;;;:::i;:::-;;10094:8;10090:262;;9959:407;;;10090:262;10267:20;10236:68;10267:20;;:::i;:::-;10289:14;;;;;:::i;:::-;10054:16;576:17620;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;10236:68;576:17620;10598:3641;10724:16;;;;;;:::i;:::-;576:17620;;-1:-1:-1;;;;;576:17620:153;11319:20;;;;;:::i;:::-;576:17620;11319:38;:61;;;;10598:3641;11319:83;;;;10598:3641;11317:86;11313:129;;11482:212;;;;;11710:17;11726:1;11710:17;;;:38;;;10598:3641;11708:41;11704:84;;833:42;;;;11726:1;833:42;;11929:37;;11923:83;;11726:1;12096:95;;;12447:31;12457:21;12447:31;;;:78;;;10598:3641;12447:143;;;10598:3641;12447:188;;;10598:3641;12447:257;;;10598:3641;12447:331;;;10598:3641;12447:361;;;10598:3641;12447:409;;;10598:3641;12447:444;;;10598:3641;12445:447;12441:490;;833:42;;;-1:-1:-1;;833:42:153;;;11726:1;13068:21;833:42;13068:21;:::i;:::-;13099:117;;;;;;13399:216;;;;;;;;;;11726:1;13629:17;;11726:1;;13662:83;;;;;;;;11726:1;10598:3641;:::o;13625:586::-;13781:1;13765:17;;13781:1;;13798:91;;;;11726:1;10598:3641;:::o;13761:450::-;13925:1;13909:17;;;;;;;;13905:306;13925:1;;;13942:99;;;;;;;11726:1;10598:3641;:::o;13905:306::-;14077:1;14061:17;14057:154;;13905:306;;;;;;;11726:1;10598:3641;:::o;14057:154::-;13399:216;;;14094:107;;14057:154;;;;;;;;12441:490;12908:12;;;;;576:17620;12908:12;:::o;12447:444::-;12860:31;12870:21;12860:31;;;12447:444;;:409;12832:24;12842:14;12832:24;;;12447:409;;:361;12782:26;12792:16;12782:26;;;12447:361;;:331;12728:50;12738:40;12728:50;;;12447:331;;:257;12659:45;12669:35;12659:45;;;12447:257;;:188;12594:41;12604:31;12594:41;;;12447:188;;:143;12549:41;12559:31;12549:41;;;12447:143;;:78;12482:43;12492:33;12482:43;;;12447:78;;11923:83;11983:12;;;;576:17620;11983:12;:::o;11710:38::-;11731:17;11747:1;11731:17;;;11710:38;;11313:129;11419:12;;576:17620;11419:12;:::o;11319:83::-;11384:18;;;;11319:83;;:61;-1:-1:-1;;;;;11361:14:153;;;;;;;:::i;:::-;576:17620;11361:19;11319:61;;","linkReferences":{},"immutableReferences":{"75076":[{"start":200,"length":32},{"start":1266,"length":32},{"start":4396,"length":32},{"start":5283,"length":32},{"start":5646,"length":32}]}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","executableBalanceTopUp(uint128)":"704ed542","exited()":"5ce6c327","inheritor()":"36a52a18","initialize(address,address,bool)":"e4bbb5a8","initializer()":"9ce110d7","nonce()":"affed0e0","performStateTransition((address,bytes32,bool,address,uint128,bool,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4),bool)[]))":"084f443a","router()":"f887ea40","sendMessage(bytes,bool)":"42129d00","sendReply(bytes32,bytes)":"7a8e0cdd","stateHash()":"701da98e","transferLockedValueToInheritor()":"e43f3433"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageCallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"callReply\",\"type\":\"bool\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"OwnedBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"ReplyCallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exited\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inheritor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initializer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_abiInterface\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isSmall\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"exited\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"inheritor\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"valueToReceiveNegativeSign\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct Gear.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"call\",\"type\":\"bool\"}],\"internalType\":\"struct Gear.Message[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.StateTransition\",\"name\":\"_transition\",\"type\":\"tuple\"}],\"name\":\"performStateTransition\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_callReply\",\"type\":\"bool\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferLockedValueToInheritor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageCallFailed(bytes32,address,uint128)\":{\"details\":\"Emitted when the program fails to call outgoing message to other contracts. NOTE: It's event for USERS: it informs about failed message call from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128,bool)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"OwnedBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's owned balance top up with his Ether. NOTE: It's event for NODES: it requires to top up balance of the program (in Ether).\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyCallFailed(uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program fails to call reply message to other contracts. NOTE: It's event for USERS: it informs about failed reply call from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Minimal constructor that only sets the immutable router address.\"}},\"stateVariables\":{\"ETH_EVENT_ADDR\":{\"details\":\"Special address to which Sails contract sends messages so that Mirror can decode events: https://github.com/gear-tech/sails/blob/master/rs/src/solidity.rs\"},\"exited\":{\"details\":\"The bool flag indicates whether the program is exited.\"},\"inheritor\":{\"details\":\"The address of the inheritor, which is set by the program on exit.\"},\"initializer\":{\"details\":\"The address eligible to send first (init) message.\"},\"isSmall\":{\"details\":\"The bool flag indicates whether to process arbitrary calls as `sendMessage` payload.\"},\"nonce\":{\"details\":\"Source for message ids unique generation. In-fact represents amount of messages received from Ethereum. Zeroed nonce is always represent init message.\"},\"router\":{\"details\":\"Address of the router contract, which is the sole authority.\"},\"stateHash\":{\"details\":\"Program's current state hash.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"router()\":{\"notice\":\"forge-lint: disable-next-item(screaming-snake-case-immutable)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@symbioticfi/core/=lib/symbiotic-rewards/lib/core/\",\":core/=lib/symbiotic-rewards/lib/core/\",\":ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":script/=script/\",\":src/=src/\",\":symbiotic-core/=lib/symbiotic-core/\",\":symbiotic-rewards/=lib/symbiotic-rewards/\",\":test/=test/\"],\"viaIR\":true},\"sources\":{\"lib/frost-secp256k1-evm/src/FROST.sol\":{\"keccak256\":\"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8\",\"dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA\"]},\"lib/frost-secp256k1-evm/src/utils/Memory.sol\":{\"keccak256\":\"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294\",\"dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb\",\"dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab\",\"dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol\":{\"keccak256\":\"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a\",\"dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol\":{\"keccak256\":\"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf\",\"dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de\",\"dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/ICallbacks.sol\":{\"keccak256\":\"0xa3ff0ca18524203a1c5bd15611886cfaf52bd137f5fa338d253972ec1fd6ce93\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4fe1046bb816929a4e6439af4d67744c29c23ac56b38e0c718d61a30251e5ef3\",\"dweb:/ipfs/QmedQraXHdtHTHmJrQuufcxctdUhBNWCPPKnit58piDoPH\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x2b43176b08617d83a2940156abcfcbcc44e9f764501b35b5b81ddbfb80a7e904\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5cf6c062db5bc4daa511f2b4c1ba3899dbf2b43e6addf8f0e81539bd67471b53\",\"dweb:/ipfs/QmVNrK3QkTC2F4a9Yu6kJb9hu12YXAQDKi2jhZAkZAhgab\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x232d0d4cb3c5868088d3e0b613289fc1ec07199413f5cd11ff1362e1a9bebc79\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://311bd37f4a691c3a01306c0e115fbb2b3a6464d0146ecc3e08008a472440fad5\",\"dweb:/ipfs/QmWGyUaMR2FiuocLSVJC4Gzu8cnWUN75rZutndpWuLUPWx\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0x52380e66a972ed612ecb2a350a4e4e2ad0b490f5f22d3fc5f4da6293e1f14ae0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6c316499ab60018089226dffd9c2555ee41df970103754c4b8e1fdd2b1c7d6a1\",\"dweb:/ipfs/QmNruxDqGYWFoERjUujThdcR5YvovyL6CTwDjbCajhr31E\"]},\"src/Mirror.sol\":{\"keccak256\":\"0xd18681ac5ba7080707ceb08782d5b414ab3587f458967992321de856e6112c90\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8190203871c6f19bf6a2343023c2e0029994481f225e192cfe97b1e2758177c5\",\"dweb:/ipfs/QmVv13WAam4f5iTGtSUraVHNNTCeGP4mU9ALn1c3MNtnj1\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0xc4dbccecfd856e8f08c0d96de2379632b560e43dbf91682ba3fa4d7dbd27d163\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://72a9289d5c80767308eef765192f2f1b7ff13e9815acaaf9f99219d6f52efcfc\",\"dweb:/ipfs/QmPRoskdmTEWyMp9fbJs5gnASfgsgxrhyjR9ciXkyYMsoW\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageCallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bool","name":"callReply","type":"bool","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"OwnedBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"ReplyCallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"executableBalanceTopUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"exited","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"inheritor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_initializer","type":"address"},{"internalType":"address","name":"_abiInterface","type":"address"},{"internalType":"bool","name":"_isSmall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"initializer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Gear.StateTransition","name":"_transition","type":"tuple","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"bool","name":"exited","type":"bool"},{"internalType":"address","name":"inheritor","type":"address"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"bool","name":"valueToReceiveNegativeSign","type":"bool"},{"internalType":"struct Gear.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct Gear.Message[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct Gear.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]},{"internalType":"bool","name":"call","type":"bool"}]}]}],"stateMutability":"payable","type":"function","name":"performStateTransition","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bool","name":"_callReply","type":"bool"}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"payable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"transferLockedValueToInheritor"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Minimal constructor that only sets the immutable router address."}},"version":1},"userdoc":{"kind":"user","methods":{"router()":{"notice":"forge-lint: disable-next-item(screaming-snake-case-immutable)"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@symbioticfi/core/=lib/symbiotic-rewards/lib/core/","core/=lib/symbiotic-rewards/lib/core/","ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","script/=script/","src/=src/","symbiotic-core/=lib/symbiotic-core/","symbiotic-rewards/=lib/symbiotic-rewards/","test/=test/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"lib/frost-secp256k1-evm/src/FROST.sol":{"keccak256":"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f","urls":["bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8","dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/Memory.sol":{"keccak256":"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859","urls":["bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294","dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol":{"keccak256":"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56","urls":["bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb","dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol":{"keccak256":"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc","urls":["bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab","dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol":{"keccak256":"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b","urls":["bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a","dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol":{"keccak256":"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a","urls":["bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf","dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f","urls":["bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e","dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0","urls":["bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f","dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26","urls":["bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2","dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4","urls":["bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e","dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946","urls":["bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de","dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631","urls":["bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59","dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"src/ICallbacks.sol":{"keccak256":"0xa3ff0ca18524203a1c5bd15611886cfaf52bd137f5fa338d253972ec1fd6ce93","urls":["bzz-raw://4fe1046bb816929a4e6439af4d67744c29c23ac56b38e0c718d61a30251e5ef3","dweb:/ipfs/QmedQraXHdtHTHmJrQuufcxctdUhBNWCPPKnit58piDoPH"],"license":"UNLICENSED"},"src/IMirror.sol":{"keccak256":"0x2b43176b08617d83a2940156abcfcbcc44e9f764501b35b5b81ddbfb80a7e904","urls":["bzz-raw://5cf6c062db5bc4daa511f2b4c1ba3899dbf2b43e6addf8f0e81539bd67471b53","dweb:/ipfs/QmVNrK3QkTC2F4a9Yu6kJb9hu12YXAQDKi2jhZAkZAhgab"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x232d0d4cb3c5868088d3e0b613289fc1ec07199413f5cd11ff1362e1a9bebc79","urls":["bzz-raw://311bd37f4a691c3a01306c0e115fbb2b3a6464d0146ecc3e08008a472440fad5","dweb:/ipfs/QmWGyUaMR2FiuocLSVJC4Gzu8cnWUN75rZutndpWuLUPWx"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0x52380e66a972ed612ecb2a350a4e4e2ad0b490f5f22d3fc5f4da6293e1f14ae0","urls":["bzz-raw://6c316499ab60018089226dffd9c2555ee41df970103754c4b8e1fdd2b1c7d6a1","dweb:/ipfs/QmNruxDqGYWFoERjUujThdcR5YvovyL6CTwDjbCajhr31E"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0xd18681ac5ba7080707ceb08782d5b414ab3587f458967992321de856e6112c90","urls":["bzz-raw://8190203871c6f19bf6a2343023c2e0029994481f225e192cfe97b1e2758177c5","dweb:/ipfs/QmVv13WAam4f5iTGtSUraVHNNTCeGP4mU9ALn1c3MNtnj1"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0xc4dbccecfd856e8f08c0d96de2379632b560e43dbf91682ba3fa4d7dbd27d163","urls":["bzz-raw://72a9289d5c80767308eef765192f2f1b7ff13e9815acaaf9f99219d6f52efcfc","dweb:/ipfs/QmPRoskdmTEWyMp9fbJs5gnASfgsgxrhyjR9ciXkyYMsoW"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":75079,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":75082,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"1","type":"t_uint256"},{"astId":75085,"contract":"src/Mirror.sol:Mirror","label":"exited","offset":0,"slot":"2","type":"t_bool"},{"astId":75088,"contract":"src/Mirror.sol:Mirror","label":"inheritor","offset":1,"slot":"2","type":"t_address"},{"astId":75091,"contract":"src/Mirror.sol:Mirror","label":"initializer","offset":0,"slot":"3","type":"t_address"},{"astId":75094,"contract":"src/Mirror.sol:Mirror","label":"isSmall","offset":20,"slot":"3","type":"t_bool"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":76243,"exportedSymbols":{"ERC1967Utils":[44618],"Gear":[80886],"Hashes":[40570],"ICallbacks":[71919],"IMirror":[72455],"IRouter":[72764],"IWrappedVara":[72775],"Memory":[40390],"Mirror":[76242],"StorageSlot":[47840]},"nodeType":"SourceUnit","src":"39:18158:153","nodes":[{"id":75049,"nodeType":"PragmaDirective","src":"39:24:153","nodes":[],"literals":["solidity","^","0.8",".28"]},{"id":75051,"nodeType":"ImportDirective","src":"65:73:153","nodes":[],"absolutePath":"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol","file":"frost-secp256k1-evm/utils/cryptography/Hashes.sol","nameLocation":"-1:-1:-1","scope":76243,"sourceUnit":40571,"symbolAliases":[{"foreign":{"id":75050,"name":"Hashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40570,"src":"73:6:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75053,"nodeType":"ImportDirective","src":"139:60:153","nodes":[],"absolutePath":"lib/frost-secp256k1-evm/src/utils/Memory.sol","file":"frost-secp256k1-evm/utils/Memory.sol","nameLocation":"-1:-1:-1","scope":76243,"sourceUnit":40391,"symbolAliases":[{"foreign":{"id":75052,"name":"Memory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40390,"src":"147:6:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75055,"nodeType":"ImportDirective","src":"200:84:153","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol","nameLocation":"-1:-1:-1","scope":76243,"sourceUnit":44619,"symbolAliases":[{"foreign":{"id":75054,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44618,"src":"208:12:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75057,"nodeType":"ImportDirective","src":"285:74:153","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":76243,"sourceUnit":47841,"symbolAliases":[{"foreign":{"id":75056,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"293:11:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75059,"nodeType":"ImportDirective","src":"360:44:153","nodes":[],"absolutePath":"src/ICallbacks.sol","file":"./ICallbacks.sol","nameLocation":"-1:-1:-1","scope":76243,"sourceUnit":71920,"symbolAliases":[{"foreign":{"id":75058,"name":"ICallbacks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71919,"src":"368:10:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75061,"nodeType":"ImportDirective","src":"405:38:153","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":76243,"sourceUnit":72456,"symbolAliases":[{"foreign":{"id":75060,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"413:7:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75063,"nodeType":"ImportDirective","src":"444:38:153","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":76243,"sourceUnit":72765,"symbolAliases":[{"foreign":{"id":75062,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72764,"src":"452:7:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75065,"nodeType":"ImportDirective","src":"483:48:153","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":76243,"sourceUnit":72776,"symbolAliases":[{"foreign":{"id":75064,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72775,"src":"491:12:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75067,"nodeType":"ImportDirective","src":"532:42:153","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":76243,"sourceUnit":80887,"symbolAliases":[{"foreign":{"id":75066,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"540:4:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76242,"nodeType":"ContractDefinition","src":"576:17620:153","nodes":[{"id":75073,"nodeType":"VariableDeclaration","src":"790:85:153","nodes":[],"constant":true,"documentation":{"id":75070,"nodeType":"StructuredDocumentation","src":"609:176:153","text":"@dev Special address to which Sails contract sends messages so that Mirror can decode events:\n https://github.com/gear-tech/sails/blob/master/rs/src/solidity.rs"},"mutability":"constant","name":"ETH_EVENT_ADDR","nameLocation":"816:14:153","scope":76242,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75071,"name":"address","nodeType":"ElementaryTypeName","src":"790:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307846466646664666664646666666464666464666464646464666664646466666666646664646466646","id":75072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"833:42:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF"},"visibility":"internal"},{"id":75076,"nodeType":"VariableDeclaration","src":"1026:31:153","nodes":[],"baseFunctions":[72383],"constant":false,"documentation":{"id":75074,"nodeType":"StructuredDocumentation","src":"882:139:153","text":"forge-lint: disable-next-item(screaming-snake-case-immutable)\n @dev Address of the router contract, which is the sole authority."},"functionSelector":"f887ea40","mutability":"immutable","name":"router","nameLocation":"1051:6:153","scope":76242,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75075,"name":"address","nodeType":"ElementaryTypeName","src":"1026:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":75079,"nodeType":"VariableDeclaration","src":"1107:24:153","nodes":[],"baseFunctions":[72388],"constant":false,"documentation":{"id":75077,"nodeType":"StructuredDocumentation","src":"1064:38:153","text":"@dev Program's current state hash."},"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"1122:9:153","scope":76242,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75078,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1107:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":75082,"nodeType":"VariableDeclaration","src":"1328:20:153","nodes":[],"baseFunctions":[72393],"constant":false,"documentation":{"id":75080,"nodeType":"StructuredDocumentation","src":"1138:185:153","text":"@dev Source for message ids unique generation.\n In-fact represents amount of messages received from Ethereum.\n Zeroed nonce is always represent init message."},"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"1343:5:153","scope":76242,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75081,"name":"uint256","nodeType":"ElementaryTypeName","src":"1328:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":75085,"nodeType":"VariableDeclaration","src":"1423:18:153","nodes":[],"baseFunctions":[72398],"constant":false,"documentation":{"id":75083,"nodeType":"StructuredDocumentation","src":"1355:63:153","text":"@dev The bool flag indicates whether the program is exited."},"functionSelector":"5ce6c327","mutability":"mutable","name":"exited","nameLocation":"1435:6:153","scope":76242,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75084,"name":"bool","nodeType":"ElementaryTypeName","src":"1423:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"id":75088,"nodeType":"VariableDeclaration","src":"1576:24:153","nodes":[],"baseFunctions":[72403],"constant":false,"documentation":{"id":75086,"nodeType":"StructuredDocumentation","src":"1496:75:153","text":"@dev The address of the inheritor, which is set by the program on exit."},"functionSelector":"36a52a18","mutability":"mutable","name":"inheritor","nameLocation":"1591:9:153","scope":76242,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75087,"name":"address","nodeType":"ElementaryTypeName","src":"1576:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":75091,"nodeType":"VariableDeclaration","src":"1671:26:153","nodes":[],"baseFunctions":[72408],"constant":false,"documentation":{"id":75089,"nodeType":"StructuredDocumentation","src":"1607:59:153","text":"@dev The address eligible to send first (init) message."},"functionSelector":"9ce110d7","mutability":"mutable","name":"initializer","nameLocation":"1686:11:153","scope":76242,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75090,"name":"address","nodeType":"ElementaryTypeName","src":"1671:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":75094,"nodeType":"VariableDeclaration","src":"1802:12:153","nodes":[],"constant":false,"documentation":{"id":75092,"nodeType":"StructuredDocumentation","src":"1704:93:153","text":"@dev The bool flag indicates whether to process arbitrary calls as `sendMessage` payload."},"mutability":"mutable","name":"isSmall","nameLocation":"1807:7:153","scope":76242,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75093,"name":"bool","nodeType":"ElementaryTypeName","src":"1802:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"id":75105,"nodeType":"FunctionDefinition","src":"1899:62:153","nodes":[],"body":{"id":75104,"nodeType":"Block","src":"1928:33:153","nodes":[],"statements":[{"expression":{"id":75102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75100,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75076,"src":"1938:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75101,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75097,"src":"1947:7:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1938:16:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75103,"nodeType":"ExpressionStatement","src":"1938:16:153"}]},"documentation":{"id":75095,"nodeType":"StructuredDocumentation","src":"1821:73:153","text":"@dev Minimal constructor that only sets the immutable router address."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":75098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75097,"mutability":"mutable","name":"_router","nameLocation":"1919:7:153","nodeType":"VariableDeclaration","scope":75105,"src":"1911:15:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75096,"name":"address","nodeType":"ElementaryTypeName","src":"1911:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1910:17:153"},"returnParameters":{"id":75099,"nodeType":"ParameterList","parameters":[],"src":"1928:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75113,"nodeType":"ModifierDefinition","src":"2080:83:153","nodes":[],"body":{"id":75112,"nodeType":"Block","src":"2112:51:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75108,"name":"_onlyAfterInitMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75124,"src":"2122:21:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2122:23:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75110,"nodeType":"ExpressionStatement","src":"2122:23:153"},{"id":75111,"nodeType":"PlaceholderStatement","src":"2155:1:153"}]},"documentation":{"id":75106,"nodeType":"StructuredDocumentation","src":"1967:108:153","text":"@dev Functions marked with this modifier can only be called if the init message has been created before."},"name":"onlyAfterInitMessage","nameLocation":"2089:20:153","parameters":{"id":75107,"nodeType":"ParameterList","parameters":[],"src":"2109:2:153"},"virtual":false,"visibility":"internal"},{"id":75124,"nodeType":"FunctionDefinition","src":"2169:129:153","nodes":[],"body":{"id":75123,"nodeType":"Block","src":"2216:82:153","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75117,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75082,"src":"2234:5:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":75118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2242:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2234:9:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a6572206861736e2774206372656174656420696e6974206d65737361676520796574","id":75120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2245:45:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_65d3f165ecb53a71c4baab7e3c64d50628aa4b4da22aa56421c8898d77a0af21","typeString":"literal_string \"initializer hasn't created init message yet\""},"value":"initializer hasn't created init message yet"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_65d3f165ecb53a71c4baab7e3c64d50628aa4b4da22aa56421c8898d77a0af21","typeString":"literal_string \"initializer hasn't created init message yet\""}],"id":75116,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2226:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2226:65:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75122,"nodeType":"ExpressionStatement","src":"2226:65:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyAfterInitMessage","nameLocation":"2178:21:153","parameters":{"id":75114,"nodeType":"ParameterList","parameters":[],"src":"2199:2:153"},"returnParameters":{"id":75115,"nodeType":"ParameterList","parameters":[],"src":"2216:0:153"},"scope":76242,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75132,"nodeType":"ModifierDefinition","src":"2450:109:153","nodes":[],"body":{"id":75131,"nodeType":"Block","src":"2495:64:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75127,"name":"_onlyAfterInitMessageOrInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75148,"src":"2505:34:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2505:36:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75129,"nodeType":"ExpressionStatement","src":"2505:36:153"},{"id":75130,"nodeType":"PlaceholderStatement","src":"2551:1:153"}]},"documentation":{"id":75125,"nodeType":"StructuredDocumentation","src":"2304:141:153","text":"@dev Functions marked with this modifier can only be called if the init message has been created before or the caller is the initializer."},"name":"onlyAfterInitMessageOrInitializer","nameLocation":"2459:33:153","parameters":{"id":75126,"nodeType":"ParameterList","parameters":[],"src":"2492:2:153"},"virtual":false,"visibility":"internal"},{"id":75148,"nodeType":"FunctionDefinition","src":"2565:240:153","nodes":[],"body":{"id":75147,"nodeType":"Block","src":"2625:180:153","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75136,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75082,"src":"2656:5:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":75137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2664:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2656:9:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75139,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2669:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2673:6:153","memberName":"sender","nodeType":"MemberAccess","src":"2669:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":75141,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75091,"src":"2683:11:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2669:25:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2656:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a6572206861736e2774206372656174656420696e6974206d657373616765207965743b20616e642063616c6c6572206973206e6f742074686520696e697469616c697a6572","id":75144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2708:80:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_13d09412efdd3ea901e05c34e20672234b60e241c9b8e583815ce03b750c4d5c","typeString":"literal_string \"initializer hasn't created init message yet; and caller is not the initializer\""},"value":"initializer hasn't created init message yet; and caller is not the initializer"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_13d09412efdd3ea901e05c34e20672234b60e241c9b8e583815ce03b750c4d5c","typeString":"literal_string \"initializer hasn't created init message yet; and caller is not the initializer\""}],"id":75135,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2635:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2635:163:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75146,"nodeType":"ExpressionStatement","src":"2635:163:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyAfterInitMessageOrInitializer","nameLocation":"2574:34:153","parameters":{"id":75133,"nodeType":"ParameterList","parameters":[],"src":"2608:2:153"},"returnParameters":{"id":75134,"nodeType":"ParameterList","parameters":[],"src":"2625:0:153"},"scope":76242,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75156,"nodeType":"ModifierDefinition","src":"2901:67:153","nodes":[],"body":{"id":75155,"nodeType":"Block","src":"2925:43:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75151,"name":"_onlyIfActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75166,"src":"2935:13:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2935:15:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75153,"nodeType":"ExpressionStatement","src":"2935:15:153"},{"id":75154,"nodeType":"PlaceholderStatement","src":"2960:1:153"}]},"documentation":{"id":75149,"nodeType":"StructuredDocumentation","src":"2811:85:153","text":"@dev Functions marked with this modifier can only be called if program is active."},"name":"onlyIfActive","nameLocation":"2910:12:153","parameters":{"id":75150,"nodeType":"ParameterList","parameters":[],"src":"2922:2:153"},"virtual":false,"visibility":"internal"},{"id":75166,"nodeType":"FunctionDefinition","src":"2974:93:153","nodes":[],"body":{"id":75165,"nodeType":"Block","src":"3013:54:153","nodes":[],"statements":[{"expression":{"arguments":[{"id":75161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3031:7:153","subExpression":{"id":75160,"name":"exited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75085,"src":"3032:6:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d20697320657869746564","id":75162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3040:19:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_3aae404e672693cb14d92bdba0e17bd007fcccc02cb2b908be00702b45a1be18","typeString":"literal_string \"program is exited\""},"value":"program is exited"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3aae404e672693cb14d92bdba0e17bd007fcccc02cb2b908be00702b45a1be18","typeString":"literal_string \"program is exited\""}],"id":75159,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3023:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3023:37:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75164,"nodeType":"ExpressionStatement","src":"3023:37:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyIfActive","nameLocation":"2983:13:153","parameters":{"id":75157,"nodeType":"ParameterList","parameters":[],"src":"2996:2:153"},"returnParameters":{"id":75158,"nodeType":"ParameterList","parameters":[],"src":"3013:0:153"},"scope":76242,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75174,"nodeType":"ModifierDefinition","src":"3163:67:153","nodes":[],"body":{"id":75173,"nodeType":"Block","src":"3187:43:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75169,"name":"_onlyIfExited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75183,"src":"3197:13:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3197:15:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75171,"nodeType":"ExpressionStatement","src":"3197:15:153"},{"id":75172,"nodeType":"PlaceholderStatement","src":"3222:1:153"}]},"documentation":{"id":75167,"nodeType":"StructuredDocumentation","src":"3073:85:153","text":"@dev Functions marked with this modifier can only be called if program is exited."},"name":"onlyIfExited","nameLocation":"3172:12:153","parameters":{"id":75168,"nodeType":"ParameterList","parameters":[],"src":"3184:2:153"},"virtual":false,"visibility":"internal"},{"id":75183,"nodeType":"FunctionDefinition","src":"3236:96:153","nodes":[],"body":{"id":75182,"nodeType":"Block","src":"3275:57:153","nodes":[],"statements":[{"expression":{"arguments":[{"id":75178,"name":"exited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75085,"src":"3293:6:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973206e6f7420657869746564","id":75179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3301:23:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_6183322af2e012ce19e64deaa6e7833882db40384ce02d654fbace8b596d2449","typeString":"literal_string \"program is not exited\""},"value":"program is not exited"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6183322af2e012ce19e64deaa6e7833882db40384ce02d654fbace8b596d2449","typeString":"literal_string \"program is not exited\""}],"id":75177,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3285:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3285:40:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75181,"nodeType":"ExpressionStatement","src":"3285:40:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyIfExited","nameLocation":"3245:13:153","parameters":{"id":75175,"nodeType":"ParameterList","parameters":[],"src":"3258:2:153"},"returnParameters":{"id":75176,"nodeType":"ParameterList","parameters":[],"src":"3275:0:153"},"scope":76242,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75191,"nodeType":"ModifierDefinition","src":"3421:63:153","nodes":[],"body":{"id":75190,"nodeType":"Block","src":"3443:41:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75186,"name":"_onlyRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75203,"src":"3453:11:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3453:13:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75188,"nodeType":"ExpressionStatement","src":"3453:13:153"},{"id":75189,"nodeType":"PlaceholderStatement","src":"3476:1:153"}]},"documentation":{"id":75184,"nodeType":"StructuredDocumentation","src":"3338:78:153","text":"@dev Functions marked with this modifier can only be called by the router."},"name":"onlyRouter","nameLocation":"3430:10:153","parameters":{"id":75185,"nodeType":"ParameterList","parameters":[],"src":"3440:2:153"},"virtual":false,"visibility":"internal"},{"id":75203,"nodeType":"FunctionDefinition","src":"3490:111:153","nodes":[],"body":{"id":75202,"nodeType":"Block","src":"3527:74:153","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75195,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3545:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3549:6:153","memberName":"sender","nodeType":"MemberAccess","src":"3545:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":75197,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75076,"src":"3559:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3545:20:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"63616c6c6572206973206e6f742074686520726f75746572","id":75199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3567:26:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_198bece7548b89eb58a1e57e2a5c5ba93b63a70943a48214dc1508db322b92d3","typeString":"literal_string \"caller is not the router\""},"value":"caller is not the router"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_198bece7548b89eb58a1e57e2a5c5ba93b63a70943a48214dc1508db322b92d3","typeString":"literal_string \"caller is not the router\""}],"id":75194,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3537:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3537:57:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75201,"nodeType":"ExpressionStatement","src":"3537:57:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyRouter","nameLocation":"3499:11:153","parameters":{"id":75192,"nodeType":"ParameterList","parameters":[],"src":"3510:2:153"},"returnParameters":{"id":75193,"nodeType":"ParameterList","parameters":[],"src":"3527:0:153"},"scope":76242,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75214,"nodeType":"ModifierDefinition","src":"3722:89:153","nodes":[],"body":{"id":75213,"nodeType":"Block","src":"3761:50:153","nodes":[],"statements":[{"expression":{"arguments":[{"id":75209,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75206,"src":"3787:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75208,"name":"_retrievingVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75242,"src":"3771:15:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3771:22:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75211,"nodeType":"ExpressionStatement","src":"3771:22:153"},{"id":75212,"nodeType":"PlaceholderStatement","src":"3803:1:153"}]},"documentation":{"id":75204,"nodeType":"StructuredDocumentation","src":"3607:110:153","text":"@dev Non-zero Vara value must be transferred from source to router in functions marked with this modifier."},"name":"retrievingVara","nameLocation":"3731:14:153","parameters":{"id":75207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75206,"mutability":"mutable","name":"value","nameLocation":"3754:5:153","nodeType":"VariableDeclaration","scope":75214,"src":"3746:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75205,"name":"uint128","nodeType":"ElementaryTypeName","src":"3746:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3745:15:153"},"virtual":false,"visibility":"internal"},{"id":75242,"nodeType":"FunctionDefinition","src":"3817:274:153","nodes":[],"body":{"id":75241,"nodeType":"Block","src":"3866:225:153","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75219,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75216,"src":"3880:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3889:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3880:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75240,"nodeType":"IfStatement","src":"3876:209:153","trueBody":{"id":75239,"nodeType":"Block","src":"3892:193:153","statements":[{"assignments":[75223],"declarations":[{"constant":false,"id":75223,"mutability":"mutable","name":"success","nameLocation":"3911:7:153","nodeType":"VariableDeclaration","scope":75239,"src":"3906:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75222,"name":"bool","nodeType":"ElementaryTypeName","src":"3906:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75233,"initialValue":{"arguments":[{"expression":{"id":75228,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3949:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3953:6:153","memberName":"sender","nodeType":"MemberAccess","src":"3949:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75230,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75076,"src":"3961:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75231,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75216,"src":"3969:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":75225,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75076,"src":"3928:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75224,"name":"_wvara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76157,"src":"3921:6:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_contract$_IWrappedVara_$72775_$","typeString":"function (address) view returns (contract IWrappedVara)"}},"id":75226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3921:14:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$72775","typeString":"contract IWrappedVara"}},"id":75227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3936:12:153","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":45586,"src":"3921:27:153","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":75232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3921:54:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3906:69:153"},{"expression":{"arguments":[{"id":75235,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75223,"src":"3997:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f756e74206f662057566172612066726f6d20736f7572636520746f20726f75746572","id":75236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4006:67:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_89834f4f5b676caeda9aeacc6e70651fe8c874cb9d7867ce1578400f765c69dd","typeString":"literal_string \"failed to transfer non-zero amount of WVara from source to router\""},"value":"failed to transfer non-zero amount of WVara from source to router"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_89834f4f5b676caeda9aeacc6e70651fe8c874cb9d7867ce1578400f765c69dd","typeString":"literal_string \"failed to transfer non-zero amount of WVara from source to router\""}],"id":75234,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3989:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3989:85:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75238,"nodeType":"ExpressionStatement","src":"3989:85:153"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrievingVara","nameLocation":"3826:15:153","parameters":{"id":75217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75216,"mutability":"mutable","name":"value","nameLocation":"3850:5:153","nodeType":"VariableDeclaration","scope":75242,"src":"3842:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75215,"name":"uint128","nodeType":"ElementaryTypeName","src":"3842:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3841:15:153"},"returnParameters":{"id":75218,"nodeType":"ParameterList","parameters":[],"src":"3866:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":75268,"nodeType":"FunctionDefinition","src":"4213:253:153","nodes":[],"body":{"id":75267,"nodeType":"Block","src":"4263:203:153","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75248,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75245,"src":"4277:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4286:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4277:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75266,"nodeType":"IfStatement","src":"4273:187:153","trueBody":{"id":75265,"nodeType":"Block","src":"4289:171:153","statements":[{"assignments":[75252,null],"declarations":[{"constant":false,"id":75252,"mutability":"mutable","name":"success","nameLocation":"4309:7:153","nodeType":"VariableDeclaration","scope":75265,"src":"4304:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75251,"name":"bool","nodeType":"ElementaryTypeName","src":"4304:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":75259,"initialValue":{"arguments":[{"hexValue":"","id":75257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4347:2:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":75253,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75076,"src":"4321:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4328:4:153","memberName":"call","nodeType":"MemberAccess","src":"4321:11:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":75255,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75245,"src":"4340:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"4321:25:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4321:29:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4303:47:153"},{"expression":{"arguments":[{"id":75261,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75252,"src":"4372:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f756e74206f662045746865722066726f6d20736f7572636520746f20726f75746572","id":75262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4381:67:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_3b53edf5673e45c6acd843a4ace7ad87406352242bf2ff953ca52c9e10a341e7","typeString":"literal_string \"failed to transfer non-zero amount of Ether from source to router\""},"value":"failed to transfer non-zero amount of Ether from source to router"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3b53edf5673e45c6acd843a4ace7ad87406352242bf2ff953ca52c9e10a341e7","typeString":"literal_string \"failed to transfer non-zero amount of Ether from source to router\""}],"id":75260,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4364:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4364:85:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75264,"nodeType":"ExpressionStatement","src":"4364:85:153"}]}}]},"documentation":{"id":75243,"nodeType":"StructuredDocumentation","src":"4097:111:153","text":"@dev Non-zero Ether value must be transferred from source to router in functions marked with this modifier."},"implemented":true,"kind":"function","modifiers":[],"name":"_retrievingEther","nameLocation":"4222:16:153","parameters":{"id":75246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75245,"mutability":"mutable","name":"value","nameLocation":"4247:5:153","nodeType":"VariableDeclaration","scope":75268,"src":"4239:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75244,"name":"uint128","nodeType":"ElementaryTypeName","src":"4239:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"4238:15:153"},"returnParameters":{"id":75247,"nodeType":"ParameterList","parameters":[],"src":"4263:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":75283,"nodeType":"FunctionDefinition","src":"4502:156:153","nodes":[],"body":{"id":75282,"nodeType":"Block","src":"4600:58:153","nodes":[],"statements":[{"expression":{"arguments":[{"id":75278,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75270,"src":"4630:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75279,"name":"_callReply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75272,"src":"4640:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":75277,"name":"_sendMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75595,"src":"4617:12:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_calldata_ptr_$_t_bool_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bool) returns (bytes32)"}},"id":75280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4617:34:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75276,"id":75281,"nodeType":"Return","src":"4610:41:153"}]},"baseFunctions":[72417],"functionSelector":"42129d00","implemented":true,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"4511:11:153","parameters":{"id":75273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75270,"mutability":"mutable","name":"_payload","nameLocation":"4538:8:153","nodeType":"VariableDeclaration","scope":75283,"src":"4523:23:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75269,"name":"bytes","nodeType":"ElementaryTypeName","src":"4523:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75272,"mutability":"mutable","name":"_callReply","nameLocation":"4553:10:153","nodeType":"VariableDeclaration","scope":75283,"src":"4548:15:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75271,"name":"bool","nodeType":"ElementaryTypeName","src":"4548:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4522:42:153"},"returnParameters":{"id":75276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75283,"src":"4591:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75274,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4591:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4590:9:153"},"scope":76242,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":75315,"nodeType":"FunctionDefinition","src":"4664:282:153","nodes":[],"body":{"id":75314,"nodeType":"Block","src":"4779:167:153","nodes":[],"statements":[{"assignments":[75295],"declarations":[{"constant":false,"id":75295,"mutability":"mutable","name":"_value","nameLocation":"4797:6:153","nodeType":"VariableDeclaration","scope":75314,"src":"4789:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75294,"name":"uint128","nodeType":"ElementaryTypeName","src":"4789:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75301,"initialValue":{"arguments":[{"expression":{"id":75298,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4814:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4818:5:153","memberName":"value","nodeType":"MemberAccess","src":"4814:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75297,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4806:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":75296,"name":"uint128","nodeType":"ElementaryTypeName","src":"4806:7:153","typeDescriptions":{}}},"id":75300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:18:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"4789:35:153"},{"expression":{"arguments":[{"id":75303,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75295,"src":"4852:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75302,"name":"_retrievingEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75268,"src":"4835:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4835:24:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75305,"nodeType":"ExpressionStatement","src":"4835:24:153"},{"eventCall":{"arguments":[{"id":75307,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75285,"src":"4898:10:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75308,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4910:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4914:6:153","memberName":"sender","nodeType":"MemberAccess","src":"4910:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75310,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75287,"src":"4922:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75311,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75295,"src":"4932:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75306,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72314,"src":"4875:22:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4875:64:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75313,"nodeType":"EmitStatement","src":"4870:69:153"}]},"baseFunctions":[72424],"functionSelector":"7a8e0cdd","implemented":true,"kind":"function","modifiers":[{"id":75290,"kind":"modifierInvocation","modifierName":{"id":75289,"name":"onlyIfActive","nameLocations":["4745:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75156,"src":"4745:12:153"},"nodeType":"ModifierInvocation","src":"4745:12:153"},{"id":75292,"kind":"modifierInvocation","modifierName":{"id":75291,"name":"onlyAfterInitMessage","nameLocations":["4758:20:153"],"nodeType":"IdentifierPath","referencedDeclaration":75113,"src":"4758:20:153"},"nodeType":"ModifierInvocation","src":"4758:20:153"}],"name":"sendReply","nameLocation":"4673:9:153","parameters":{"id":75288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75285,"mutability":"mutable","name":"_repliedTo","nameLocation":"4691:10:153","nodeType":"VariableDeclaration","scope":75315,"src":"4683:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75284,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4683:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75287,"mutability":"mutable","name":"_payload","nameLocation":"4718:8:153","nodeType":"VariableDeclaration","scope":75315,"src":"4703:23:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75286,"name":"bytes","nodeType":"ElementaryTypeName","src":"4703:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4682:45:153"},"returnParameters":{"id":75293,"nodeType":"ParameterList","parameters":[],"src":"4779:0:153"},"scope":76242,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":75331,"nodeType":"FunctionDefinition","src":"5019:151:153","nodes":[],"body":{"id":75330,"nodeType":"Block","src":"5102:68:153","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":75325,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75317,"src":"5140:10:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75326,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5152:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5156:6:153","memberName":"sender","nodeType":"MemberAccess","src":"5152:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":75324,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72321,"src":"5117:22:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":75328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5117:46:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75329,"nodeType":"EmitStatement","src":"5112:51:153"}]},"baseFunctions":[72429],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[{"id":75320,"kind":"modifierInvocation","modifierName":{"id":75319,"name":"onlyIfActive","nameLocations":["5068:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75156,"src":"5068:12:153"},"nodeType":"ModifierInvocation","src":"5068:12:153"},{"id":75322,"kind":"modifierInvocation","modifierName":{"id":75321,"name":"onlyAfterInitMessage","nameLocations":["5081:20:153"],"nodeType":"IdentifierPath","referencedDeclaration":75113,"src":"5081:20:153"},"nodeType":"ModifierInvocation","src":"5081:20:153"}],"name":"claimValue","nameLocation":"5028:10:153","parameters":{"id":75318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75317,"mutability":"mutable","name":"_claimedId","nameLocation":"5047:10:153","nodeType":"VariableDeclaration","scope":75331,"src":"5039:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75316,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5039:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5038:20:153"},"returnParameters":{"id":75323,"nodeType":"ParameterList","parameters":[],"src":"5102:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75346,"nodeType":"FunctionDefinition","src":"5176:154:153","nodes":[],"body":{"id":75345,"nodeType":"Block","src":"5269:61:153","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":75342,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75333,"src":"5316:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75341,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72331,"src":"5284:31:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5284:39:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75344,"nodeType":"EmitStatement","src":"5279:44:153"}]},"baseFunctions":[72434],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[{"id":75336,"kind":"modifierInvocation","modifierName":{"id":75335,"name":"onlyIfActive","nameLocations":["5233:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75156,"src":"5233:12:153"},"nodeType":"ModifierInvocation","src":"5233:12:153"},{"arguments":[{"id":75338,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75333,"src":"5261:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":75339,"kind":"modifierInvocation","modifierName":{"id":75337,"name":"retrievingVara","nameLocations":["5246:14:153"],"nodeType":"IdentifierPath","referencedDeclaration":75214,"src":"5246:14:153"},"nodeType":"ModifierInvocation","src":"5246:22:153"}],"name":"executableBalanceTopUp","nameLocation":"5185:22:153","parameters":{"id":75334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75333,"mutability":"mutable","name":"_value","nameLocation":"5216:6:153","nodeType":"VariableDeclaration","scope":75346,"src":"5208:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75332,"name":"uint128","nodeType":"ElementaryTypeName","src":"5208:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"5207:16:153"},"returnParameters":{"id":75340,"nodeType":"ParameterList","parameters":[],"src":"5269:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75368,"nodeType":"FunctionDefinition","src":"5336:321:153","nodes":[],"body":{"id":75367,"nodeType":"Block","src":"5398:259:153","nodes":[],"statements":[{"assignments":[75352],"declarations":[{"constant":false,"id":75352,"mutability":"mutable","name":"balance","nameLocation":"5416:7:153","nodeType":"VariableDeclaration","scope":75367,"src":"5408:15:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75351,"name":"uint256","nodeType":"ElementaryTypeName","src":"5408:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75358,"initialValue":{"expression":{"arguments":[{"id":75355,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5434:4:153","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$76242","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$76242","typeString":"contract Mirror"}],"id":75354,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5426:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75353,"name":"address","nodeType":"ElementaryTypeName","src":"5426:7:153","typeDescriptions":{}}},"id":75356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5426:13:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5440:7:153","memberName":"balance","nodeType":"MemberAccess","src":"5426:21:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5408:39:153"},{"expression":{"arguments":[{"id":75360,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75088,"src":"5622:9:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":75363,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75352,"src":"5641:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5633:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":75361,"name":"uint128","nodeType":"ElementaryTypeName","src":"5633:7:153","typeDescriptions":{}}},"id":75364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5633:16:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75359,"name":"_transferEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76184,"src":"5607:14:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":75365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5607:43:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75366,"nodeType":"ExpressionStatement","src":"5607:43:153"}]},"baseFunctions":[72437],"functionSelector":"e43f3433","implemented":true,"kind":"function","modifiers":[{"id":75349,"kind":"modifierInvocation","modifierName":{"id":75348,"name":"onlyIfExited","nameLocations":["5385:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75174,"src":"5385:12:153"},"nodeType":"ModifierInvocation","src":"5385:12:153"}],"name":"transferLockedValueToInheritor","nameLocation":"5345:30:153","parameters":{"id":75347,"nodeType":"ParameterList","parameters":[],"src":"5375:2:153"},"returnParameters":{"id":75350,"nodeType":"ParameterList","parameters":[],"src":"5398:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75432,"nodeType":"FunctionDefinition","src":"5715:598:153","nodes":[],"body":{"id":75431,"nodeType":"Block","src":"5813:500:153","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75380,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75091,"src":"5831:11:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5854:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75382,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5846:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75381,"name":"address","nodeType":"ElementaryTypeName","src":"5846:7:153","typeDescriptions":{}}},"id":75384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5846:10:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5831:25:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e6365","id":75386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5858:36:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_a22a998b3a781946b89501fcd4ccd018d3a95bd8711aff0547431faa4986b249","typeString":"literal_string \"initializer could only be set once\""},"value":"initializer could only be set once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a22a998b3a781946b89501fcd4ccd018d3a95bd8711aff0547431faa4986b249","typeString":"literal_string \"initializer could only be set once\""}],"id":75379,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5823:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5823:72:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75388,"nodeType":"ExpressionStatement","src":"5823:72:153"},{"expression":{"arguments":[{"id":75391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5914:8:153","subExpression":{"id":75390,"name":"isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75094,"src":"5915:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6973536d616c6c20636f756c64206f6e6c7920626520736574206f6e6365","id":75392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5924:32:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_8599ae4b81228782baec57304205e7ac62068ae2063af4820c33b969a978e3ab","typeString":"literal_string \"isSmall could only be set once\""},"value":"isSmall could only be set once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8599ae4b81228782baec57304205e7ac62068ae2063af4820c33b969a978e3ab","typeString":"literal_string \"isSmall could only be set once\""}],"id":75389,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5906:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5906:51:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75394,"nodeType":"ExpressionStatement","src":"5906:51:153"},{"assignments":[75399],"declarations":[{"constant":false,"id":75399,"mutability":"mutable","name":"implementationSlot","nameLocation":"6000:18:153","nodeType":"VariableDeclaration","scope":75431,"src":"5968:50:153","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":75398,"nodeType":"UserDefinedTypeName","pathNode":{"id":75397,"name":"StorageSlot.AddressSlot","nameLocations":["5968:11:153","5980:11:153"],"nodeType":"IdentifierPath","referencedDeclaration":47722,"src":"5968:23:153"},"referencedDeclaration":47722,"src":"5968:23:153","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"id":75405,"initialValue":{"arguments":[{"expression":{"id":75402,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44618,"src":"6060:12:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$44618_$","typeString":"type(library ERC1967Utils)"}},"id":75403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6073:19:153","memberName":"IMPLEMENTATION_SLOT","nodeType":"MemberAccess","referencedDeclaration":44339,"src":"6060:32:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75400,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"6033:11:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":75401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6045:14:153","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":47751,"src":"6033:26:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$47722_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":75404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6033:60:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5968:125:153"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75407,"name":"implementationSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75399,"src":"6112:18:153","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":75408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6131:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47721,"src":"6112:24:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6148:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75410,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6140:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75409,"name":"address","nodeType":"ElementaryTypeName","src":"6140:7:153","typeDescriptions":{}}},"id":75412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:10:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6112:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"61626920696e7465726661636520636f756c64206f6e6c7920626520736574206f6e6365","id":75414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6152:38:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_277fa764d1ef61d0ebce06271b5b6adf1b20d90129ffd89158611b5c8a1de3e1","typeString":"literal_string \"abi interface could only be set once\""},"value":"abi interface could only be set once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_277fa764d1ef61d0ebce06271b5b6adf1b20d90129ffd89158611b5c8a1de3e1","typeString":"literal_string \"abi interface could only be set once\""}],"id":75406,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6104:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6104:87:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75416,"nodeType":"ExpressionStatement","src":"6104:87:153"},{"expression":{"id":75419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75417,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75091,"src":"6202:11:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75418,"name":"_initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75370,"src":"6216:12:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6202:26:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75420,"nodeType":"ExpressionStatement","src":"6202:26:153"},{"expression":{"id":75423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75421,"name":"isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75094,"src":"6238:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75422,"name":"_isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75374,"src":"6248:8:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6238:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75424,"nodeType":"ExpressionStatement","src":"6238:18:153"},{"expression":{"id":75429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75425,"name":"implementationSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75399,"src":"6266:18:153","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":75427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6285:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47721,"src":"6266:24:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75428,"name":"_abiInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75372,"src":"6293:13:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6266:40:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75430,"nodeType":"ExpressionStatement","src":"6266:40:153"}]},"baseFunctions":[72446],"functionSelector":"e4bbb5a8","implemented":true,"kind":"function","modifiers":[{"id":75377,"kind":"modifierInvocation","modifierName":{"id":75376,"name":"onlyRouter","nameLocations":["5802:10:153"],"nodeType":"IdentifierPath","referencedDeclaration":75191,"src":"5802:10:153"},"nodeType":"ModifierInvocation","src":"5802:10:153"}],"name":"initialize","nameLocation":"5724:10:153","parameters":{"id":75375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75370,"mutability":"mutable","name":"_initializer","nameLocation":"5743:12:153","nodeType":"VariableDeclaration","scope":75432,"src":"5735:20:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75369,"name":"address","nodeType":"ElementaryTypeName","src":"5735:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75372,"mutability":"mutable","name":"_abiInterface","nameLocation":"5765:13:153","nodeType":"VariableDeclaration","scope":75432,"src":"5757:21:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75371,"name":"address","nodeType":"ElementaryTypeName","src":"5757:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75374,"mutability":"mutable","name":"_isSmall","nameLocation":"5785:8:153","nodeType":"VariableDeclaration","scope":75432,"src":"5780:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75373,"name":"bool","nodeType":"ElementaryTypeName","src":"5780:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5734:60:153"},"returnParameters":{"id":75378,"nodeType":"ParameterList","parameters":[],"src":"5813:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75544,"nodeType":"FunctionDefinition","src":"6319:1755:153","nodes":[],"body":{"id":75543,"nodeType":"Block","src":"6476:1598:153","nodes":[],"statements":[{"documentation":"@dev Verify that the transition belongs to this contract.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75443,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"6564:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6576:7:153","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"6564:19:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":75447,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6595:4:153","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$76242","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$76242","typeString":"contract Mirror"}],"id":75446,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6587:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75445,"name":"address","nodeType":"ElementaryTypeName","src":"6587:7:153","typeDescriptions":{}}},"id":75448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6587:13:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6564:36:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6163746f724964206d757374206265207468697320636f6e7472616374","id":75450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6602:31:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_ba7be785920a68bd302e7ea09bd7071e8b885ef81058f7ff907b22051b8150cd","typeString":"literal_string \"actorId must be this contract\""},"value":"actorId must be this contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ba7be785920a68bd302e7ea09bd7071e8b885ef81058f7ff907b22051b8150cd","typeString":"literal_string \"actorId must be this contract\""}],"id":75442,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6556:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6556:78:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75452,"nodeType":"ExpressionStatement","src":"6556:78:153"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75453,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"6744:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6756:14:153","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79967,"src":"6744:26:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6774:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6744:31:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"expression":{"id":75457,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"6779:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6791:26:153","memberName":"valueToReceiveNegativeSign","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"6779:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6744:73:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":"@dev Transfer value to router if valueToReceive is non-zero and has negative sign.","id":75476,"nodeType":"IfStatement","src":"6740:264:153","trueBody":{"id":75475,"nodeType":"Block","src":"6819:185:153","statements":[{"assignments":[75461,null],"declarations":[{"constant":false,"id":75461,"mutability":"mutable","name":"success","nameLocation":"6839:7:153","nodeType":"VariableDeclaration","scope":75475,"src":"6834:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75460,"name":"bool","nodeType":"ElementaryTypeName","src":"6834:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":75469,"initialValue":{"arguments":[{"hexValue":"","id":75467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6898:2:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":75462,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75076,"src":"6851:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6858:4:153","memberName":"call","nodeType":"MemberAccess","src":"6851:11:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":75464,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"6870:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6882:14:153","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79967,"src":"6870:26:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"6851:46:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6851:50:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6833:68:153"},{"expression":{"arguments":[{"id":75471,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75461,"src":"6923:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e736665722076616c756520746f20726f7574657220647572696e67207374617465207472616e736974696f6e","id":75472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6932:60:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_4f1b70cb4ae30b894d9f44646f03399a3eda171c3cace09d1e4a0511f6dc825a","typeString":"literal_string \"failed to transfer value to router during state transition\""},"value":"failed to transfer value to router during state transition"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4f1b70cb4ae30b894d9f44646f03399a3eda171c3cace09d1e4a0511f6dc825a","typeString":"literal_string \"failed to transfer value to router during state transition\""}],"id":75470,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6915:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6915:78:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75474,"nodeType":"ExpressionStatement","src":"6915:78:153"}]}},{"assignments":[75479],"declarations":[{"constant":false,"id":75479,"mutability":"mutable","name":"messagesHashesHash","nameLocation":"7067:18:153","nodeType":"VariableDeclaration","scope":75543,"src":"7059:26:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75478,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7059:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"documentation":"@dev Send all outgoing messages.","id":75484,"initialValue":{"arguments":[{"expression":{"id":75481,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7102:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7114:8:153","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":79977,"src":"7102:20:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79937_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_Message_$79937_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}],"id":75480,"name":"_sendMessages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75696,"src":"7088:13:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_Message_$79937_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.Message calldata[] calldata) returns (bytes32)"}},"id":75483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7088:35:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7059:64:153"},{"assignments":[75487],"declarations":[{"constant":false,"id":75487,"mutability":"mutable","name":"valueClaimsHash","nameLocation":"7186:15:153","nodeType":"VariableDeclaration","scope":75543,"src":"7178:23:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75486,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7178:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"documentation":"@dev Send value for each claim.","id":75492,"initialValue":{"arguments":[{"expression":{"id":75489,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7217:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7229:11:153","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":79973,"src":"7217:23:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80014_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80014_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}],"id":75488,"name":"_claimValues","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76103,"src":"7204:12:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_ValueClaim_$80014_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.ValueClaim calldata[] calldata) returns (bytes32)"}},"id":75491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7204:37:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7178:63:153"},{"condition":{"expression":{"id":75493,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7298:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7310:6:153","memberName":"exited","nodeType":"MemberAccess","referencedDeclaration":79962,"src":"7298:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":"@dev Set inheritor if exited.","falseBody":{"id":75512,"nodeType":"Block","src":"7385:109:153","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75502,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7407:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7419:9:153","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":79964,"src":"7407:21:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7440:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7432:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75504,"name":"address","nodeType":"ElementaryTypeName","src":"7432:7:153","typeDescriptions":{}}},"id":75507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7432:10:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7407:35:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e68657269746f72206d757374206265207a65726f206966206e6f7420657869746564","id":75509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7444:38:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_c8c7685c35744010c2e0b71ab762a8448df425a85a7969d97ae43c48a66f978c","typeString":"literal_string \"inheritor must be zero if not exited\""},"value":"inheritor must be zero if not exited"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c8c7685c35744010c2e0b71ab762a8448df425a85a7969d97ae43c48a66f978c","typeString":"literal_string \"inheritor must be zero if not exited\""}],"id":75501,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7399:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7399:84:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75511,"nodeType":"ExpressionStatement","src":"7399:84:153"}]},"id":75513,"nodeType":"IfStatement","src":"7294:200:153","trueBody":{"id":75500,"nodeType":"Block","src":"7318:61:153","statements":[{"expression":{"arguments":[{"expression":{"id":75496,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7346:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7358:9:153","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":79964,"src":"7346:21:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75495,"name":"_setInheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76122,"src":"7332:13:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":75498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7332:36:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75499,"nodeType":"ExpressionStatement","src":"7332:36:153"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75514,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75079,"src":"7559:9:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75515,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7572:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7584:12:153","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":79960,"src":"7572:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7559:37:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":"@dev Update the state hash if changed.","id":75524,"nodeType":"IfStatement","src":"7555:110:153","trueBody":{"id":75523,"nodeType":"Block","src":"7598:67:153","statements":[{"expression":{"arguments":[{"expression":{"id":75519,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7629:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7641:12:153","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":79960,"src":"7629:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":75518,"name":"_updateStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76136,"src":"7612:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":75521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7612:42:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75522,"nodeType":"ExpressionStatement","src":"7612:42:153"}]}},{"documentation":"@dev Return hash of performed state transition.","expression":{"arguments":[{"expression":{"id":75527,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7780:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7792:7:153","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"7780:19:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":75529,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7813:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7825:12:153","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":79960,"src":"7813:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75531,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7851:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7863:6:153","memberName":"exited","nodeType":"MemberAccess","referencedDeclaration":79962,"src":"7851:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":75533,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7883:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7895:9:153","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":79964,"src":"7883:21:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":75535,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7918:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7930:14:153","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79967,"src":"7918:26:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":75537,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75435,"src":"7958:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7970:26:153","memberName":"valueToReceiveNegativeSign","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"7958:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":75539,"name":"valueClaimsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75487,"src":"8010:15:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75540,"name":"messagesHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75479,"src":"8039:18:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75525,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"7742:4:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":75526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7747:19:153","memberName":"stateTransitionHash","nodeType":"MemberAccess","referencedDeclaration":80303,"src":"7742:24:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_bool_$_t_address_$_t_uint128_$_t_bool_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,bool,address,uint128,bool,bytes32,bytes32) pure returns (bytes32)"}},"id":75541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7742:325:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75441,"id":75542,"nodeType":"Return","src":"7735:332:153"}]},"baseFunctions":[72454],"functionSelector":"084f443a","implemented":true,"kind":"function","modifiers":[{"id":75438,"kind":"modifierInvocation","modifierName":{"id":75437,"name":"onlyRouter","nameLocations":["6435:10:153"],"nodeType":"IdentifierPath","referencedDeclaration":75191,"src":"6435:10:153"},"nodeType":"ModifierInvocation","src":"6435:10:153"}],"name":"performStateTransition","nameLocation":"6328:22:153","parameters":{"id":75436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75435,"mutability":"mutable","name":"_transition","nameLocation":"6381:11:153","nodeType":"VariableDeclaration","scope":75544,"src":"6351:41:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":75434,"nodeType":"UserDefinedTypeName","pathNode":{"id":75433,"name":"Gear.StateTransition","nameLocations":["6351:4:153","6356:15:153"],"nodeType":"IdentifierPath","referencedDeclaration":79978,"src":"6351:20:153"},"referencedDeclaration":79978,"src":"6351:20:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"src":"6350:43:153"},"returnParameters":{"id":75441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75440,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75544,"src":"6463:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75439,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6463:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6462:9:153"},"scope":76242,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":75595,"nodeType":"FunctionDefinition","src":"8080:441:153","nodes":[],"body":{"id":75594,"nodeType":"Block","src":"8253:268:153","nodes":[],"statements":[{"assignments":[75558],"declarations":[{"constant":false,"id":75558,"mutability":"mutable","name":"_value","nameLocation":"8271:6:153","nodeType":"VariableDeclaration","scope":75594,"src":"8263:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75557,"name":"uint128","nodeType":"ElementaryTypeName","src":"8263:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75564,"initialValue":{"arguments":[{"expression":{"id":75561,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8288:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8292:5:153","memberName":"value","nodeType":"MemberAccess","src":"8288:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75560,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8280:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":75559,"name":"uint128","nodeType":"ElementaryTypeName","src":"8280:7:153","typeDescriptions":{}}},"id":75563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8280:18:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"8263:35:153"},{"expression":{"arguments":[{"id":75566,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75558,"src":"8326:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75565,"name":"_retrievingEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75268,"src":"8309:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8309:24:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75568,"nodeType":"ExpressionStatement","src":"8309:24:153"},{"assignments":[75570],"declarations":[{"constant":false,"id":75570,"mutability":"mutable","name":"id","nameLocation":"8352:2:153","nodeType":"VariableDeclaration","scope":75594,"src":"8344:10:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75569,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8344:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75582,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":75576,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8392:4:153","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$76242","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$76242","typeString":"contract Mirror"}],"id":75575,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8384:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75574,"name":"address","nodeType":"ElementaryTypeName","src":"8384:7:153","typeDescriptions":{}}},"id":75577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8384:13:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8399:7:153","subExpression":{"id":75578,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75082,"src":"8399:5:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75572,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8367:3:153","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8371:12:153","memberName":"encodePacked","nodeType":"MemberAccess","src":"8367:16:153","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":75580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8367:40:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":75571,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8357:9:153","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8357:51:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8344:64:153"},{"eventCall":{"arguments":[{"id":75584,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75570,"src":"8449:2:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75585,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8453:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8457:6:153","memberName":"sender","nodeType":"MemberAccess","src":"8453:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75587,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75546,"src":"8465:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75588,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75558,"src":"8475:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":75589,"name":"_callReply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75548,"src":"8483:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":75583,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72303,"src":"8424:24:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bool_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128,bool)"}},"id":75590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8424:70:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75591,"nodeType":"EmitStatement","src":"8419:75:153"},{"expression":{"id":75592,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75570,"src":"8512:2:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75556,"id":75593,"nodeType":"Return","src":"8505:9:153"}]},"implemented":true,"kind":"function","modifiers":[{"id":75551,"kind":"modifierInvocation","modifierName":{"id":75550,"name":"onlyIfActive","nameLocations":["8168:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75156,"src":"8168:12:153"},"nodeType":"ModifierInvocation","src":"8168:12:153"},{"id":75553,"kind":"modifierInvocation","modifierName":{"id":75552,"name":"onlyAfterInitMessageOrInitializer","nameLocations":["8189:33:153"],"nodeType":"IdentifierPath","referencedDeclaration":75132,"src":"8189:33:153"},"nodeType":"ModifierInvocation","src":"8189:33:153"}],"name":"_sendMessage","nameLocation":"8089:12:153","parameters":{"id":75549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75546,"mutability":"mutable","name":"_payload","nameLocation":"8117:8:153","nodeType":"VariableDeclaration","scope":75595,"src":"8102:23:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75545,"name":"bytes","nodeType":"ElementaryTypeName","src":"8102:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75548,"mutability":"mutable","name":"_callReply","nameLocation":"8132:10:153","nodeType":"VariableDeclaration","scope":75595,"src":"8127:15:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75547,"name":"bool","nodeType":"ElementaryTypeName","src":"8127:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8101:42:153"},"returnParameters":{"id":75556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75555,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75595,"src":"8240:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75554,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8240:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8239:9:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75696,"nodeType":"FunctionDefinition","src":"8729:1033:153","nodes":[],"body":{"id":75695,"nodeType":"Block","src":"8813:949:153","nodes":[],"statements":[{"assignments":[75605],"declarations":[{"constant":false,"id":75605,"mutability":"mutable","name":"len","nameLocation":"8831:3:153","nodeType":"VariableDeclaration","scope":75695,"src":"8823:11:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75604,"name":"uint256","nodeType":"ElementaryTypeName","src":"8823:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75608,"initialValue":{"expression":{"id":75606,"name":"_messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75599,"src":"8837:9:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79937_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":75607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8847:6:153","memberName":"length","nodeType":"MemberAccess","src":"8837:16:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8823:30:153"},{"assignments":[75610],"declarations":[{"constant":false,"id":75610,"mutability":"mutable","name":"messagesHashesLen","nameLocation":"8949:17:153","nodeType":"VariableDeclaration","scope":75695,"src":"8941:25:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75609,"name":"uint256","nodeType":"ElementaryTypeName","src":"8941:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75614,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75611,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75605,"src":"8969:3:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3332","id":75612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8975:2:153","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"8969:8:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8941:36:153"},{"assignments":[75616],"declarations":[{"constant":false,"id":75616,"mutability":"mutable","name":"messagesHashesMemPtr","nameLocation":"8995:20:153","nodeType":"VariableDeclaration","scope":75695,"src":"8987:28:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75615,"name":"uint256","nodeType":"ElementaryTypeName","src":"8987:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75621,"initialValue":{"arguments":[{"id":75619,"name":"messagesHashesLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75610,"src":"9034:17:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75617,"name":"Memory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40390,"src":"9018:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Memory_$40390_$","typeString":"type(library Memory)"}},"id":75618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9025:8:153","memberName":"allocate","nodeType":"MemberAccess","referencedDeclaration":40331,"src":"9018:15:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":75620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9018:34:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8987:65:153"},{"assignments":[75623],"declarations":[{"constant":false,"id":75623,"mutability":"mutable","name":"offset","nameLocation":"9071:6:153","nodeType":"VariableDeclaration","scope":75695,"src":"9063:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75622,"name":"uint256","nodeType":"ElementaryTypeName","src":"9063:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75625,"initialValue":{"hexValue":"30","id":75624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9080:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9063:18:153"},{"body":{"id":75683,"nodeType":"Block","src":"9126:534:153","statements":[{"assignments":[75640],"declarations":[{"constant":false,"id":75640,"mutability":"mutable","name":"message","nameLocation":"9162:7:153","nodeType":"VariableDeclaration","scope":75683,"src":"9140:29:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":75639,"nodeType":"UserDefinedTypeName","pathNode":{"id":75638,"name":"Gear.Message","nameLocations":["9140:4:153","9145:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79937,"src":"9140:12:153"},"referencedDeclaration":79937,"src":"9140:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"id":75644,"initialValue":{"baseExpression":{"id":75641,"name":"_messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75599,"src":"9172:9:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79937_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":75643,"indexExpression":{"id":75642,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75627,"src":"9182:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9172:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"nodeType":"VariableDeclarationStatement","src":"9140:44:153"},{"assignments":[75646],"declarations":[{"constant":false,"id":75646,"mutability":"mutable","name":"h","nameLocation":"9252:1:153","nodeType":"VariableDeclaration","scope":75683,"src":"9244:9:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75645,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9244:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75651,"initialValue":{"arguments":[{"id":75649,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75640,"src":"9273:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}],"expression":{"id":75647,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"9256:4:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":75648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9261:11:153","memberName":"messageHash","nodeType":"MemberAccess","referencedDeclaration":80243,"src":"9256:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$79937_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.Message memory) pure returns (bytes32)"}},"id":75650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9256:25:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9244:37:153"},{"expression":{"arguments":[{"id":75655,"name":"messagesHashesMemPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75616,"src":"9374:20:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":75656,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75623,"src":"9396:6:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":75659,"name":"h","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75646,"src":"9412:1:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":75658,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9404:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":75657,"name":"uint256","nodeType":"ElementaryTypeName","src":"9404:7:153","typeDescriptions":{}}},"id":75660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9404:10:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75652,"name":"Memory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40390,"src":"9357:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Memory_$40390_$","typeString":"type(library Memory)"}},"id":75654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9364:9:153","memberName":"writeWord","nodeType":"MemberAccess","referencedDeclaration":40377,"src":"9357:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":75661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9357:58:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75662,"nodeType":"ExpressionStatement","src":"9357:58:153"},{"expression":{"id":75665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75663,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75623,"src":"9429:6:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":75664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9439:2:153","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"9429:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75666,"nodeType":"ExpressionStatement","src":"9429:12:153"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":75667,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75640,"src":"9492:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9500:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79934,"src":"9492:20:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79956_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":75669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9513:2:153","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":79953,"src":"9492:23:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9519:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9492:28:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":75681,"nodeType":"Block","src":"9591:59:153","statements":[{"expression":{"arguments":[{"id":75678,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75640,"src":"9627:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}],"id":75677,"name":"_sendReplyMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76038,"src":"9609:17:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$79937_calldata_ptr_$returns$__$","typeString":"function (struct Gear.Message calldata)"}},"id":75679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9609:26:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75680,"nodeType":"ExpressionStatement","src":"9609:26:153"}]},"id":75682,"nodeType":"IfStatement","src":"9488:162:153","trueBody":{"id":75676,"nodeType":"Block","src":"9522:63:153","statements":[{"expression":{"arguments":[{"id":75673,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75640,"src":"9562:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}],"id":75672,"name":"_sendMailboxedMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75750,"src":"9540:21:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$79937_calldata_ptr_$returns$__$","typeString":"function (struct Gear.Message calldata)"}},"id":75674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9540:30:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75675,"nodeType":"ExpressionStatement","src":"9540:30:153"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75630,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75627,"src":"9112:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":75631,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75605,"src":"9116:3:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9112:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75684,"initializationExpression":{"assignments":[75627],"declarations":[{"constant":false,"id":75627,"mutability":"mutable","name":"i","nameLocation":"9105:1:153","nodeType":"VariableDeclaration","scope":75684,"src":"9097:9:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75626,"name":"uint256","nodeType":"ElementaryTypeName","src":"9097:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75629,"initialValue":{"hexValue":"30","id":75628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9109:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9097:13:153"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":75634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9121:3:153","subExpression":{"id":75633,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75627,"src":"9121:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75635,"nodeType":"ExpressionStatement","src":"9121:3:153"},"nodeType":"ForStatement","src":"9092:568:153"},{"expression":{"arguments":[{"arguments":[{"id":75689,"name":"messagesHashesMemPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75616,"src":"9711:20:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":75690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9733:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":75691,"name":"messagesHashesLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75610,"src":"9736:17:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75687,"name":"Hashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40570,"src":"9685:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Hashes_$40570_$","typeString":"type(library Hashes)"}},"id":75688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9692:18:153","memberName":"efficientKeccak256","nodeType":"MemberAccess","referencedDeclaration":40557,"src":"9685:25:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":75692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9685:69:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75686,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9677:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75685,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9677:7:153","typeDescriptions":{}}},"id":75693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9677:78:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75603,"id":75694,"nodeType":"Return","src":"9670:85:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessages","nameLocation":"8738:13:153","parameters":{"id":75600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75599,"mutability":"mutable","name":"_messages","nameLocation":"8776:9:153","nodeType":"VariableDeclaration","scope":75696,"src":"8752:33:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79937_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message[]"},"typeName":{"baseType":{"id":75597,"nodeType":"UserDefinedTypeName","pathNode":{"id":75596,"name":"Gear.Message","nameLocations":["8752:4:153","8757:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79937,"src":"8752:12:153"},"referencedDeclaration":79937,"src":"8752:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_storage_ptr","typeString":"struct Gear.Message"}},"id":75598,"nodeType":"ArrayTypeName","src":"8752:14:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79937_storage_$dyn_storage_ptr","typeString":"struct Gear.Message[]"}},"visibility":"internal"}],"src":"8751:35:153"},"returnParameters":{"id":75603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75696,"src":"8804:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75601,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8804:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8803:9:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75750,"nodeType":"FunctionDefinition","src":"9821:657:153","nodes":[],"body":{"id":75749,"nodeType":"Block","src":"9892:586:153","nodes":[],"statements":[{"condition":{"id":75706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9906:37:153","subExpression":{"arguments":[{"id":75704,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"9934:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}],"id":75703,"name":"_tryParseAndEmitSailsEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75933,"src":"9907:26:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$79937_calldata_ptr_$returns$_t_bool_$","typeString":"function (struct Gear.Message calldata) returns (bool)"}},"id":75705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9907:36:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75748,"nodeType":"IfStatement","src":"9902:570:153","trueBody":{"id":75747,"nodeType":"Block","src":"9945:527:153","statements":[{"condition":{"expression":{"id":75707,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"9963:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9972:4:153","memberName":"call","nodeType":"MemberAccess","referencedDeclaration":79936,"src":"9963:13:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75735,"nodeType":"IfStatement","src":"9959:407:153","trueBody":{"id":75734,"nodeType":"Block","src":"9978:388:153","statements":[{"assignments":[75710,null],"declarations":[{"constant":false,"id":75710,"mutability":"mutable","name":"success","nameLocation":"10002:7:153","nodeType":"VariableDeclaration","scope":75734,"src":"9997:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75709,"name":"bool","nodeType":"ElementaryTypeName","src":"9997:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":75719,"initialValue":{"arguments":[{"expression":{"id":75716,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"10054:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10063:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79929,"src":"10054:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"expression":{"id":75711,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"10014:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10023:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79927,"src":"10014:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10035:4:153","memberName":"call","nodeType":"MemberAccess","src":"10014:25:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":75714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10045:7:153","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"10014:39:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10014:57:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"9996:75:153"},{"condition":{"id":75721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10094:8:153","subExpression":{"id":75720,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75710,"src":"10095:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75733,"nodeType":"IfStatement","src":"10090:262:153","trueBody":{"id":75732,"nodeType":"Block","src":"10104:248:153","statements":[{"documentation":"@dev In case of failed call, we emit appropriate event to inform external users.","eventCall":{"arguments":[{"expression":{"id":75723,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"10254:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10263:2:153","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79925,"src":"10254:11:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75725,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"10267:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10276:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79927,"src":"10267:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":75727,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"10289:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10298:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"10289:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75722,"name":"MessageCallFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72351,"src":"10236:17:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint128)"}},"id":75729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10236:68:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75730,"nodeType":"EmitStatement","src":"10231:73:153"},{"functionReturnParameters":75702,"id":75731,"nodeType":"Return","src":"10327:7:153"}]}}]}},{"eventCall":{"arguments":[{"expression":{"id":75737,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"10393:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10402:2:153","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79925,"src":"10393:11:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75739,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"10406:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10415:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79927,"src":"10406:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":75741,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"10428:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10437:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79929,"src":"10428:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":75743,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75700,"src":"10446:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10455:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"10446:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75736,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72342,"src":"10385:7:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10385:76:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75746,"nodeType":"EmitStatement","src":"10380:81:153"}]}}]},"documentation":{"id":75697,"nodeType":"StructuredDocumentation","src":"9768:48:153","text":"@dev Value never sent since goes to mailbox."},"implemented":true,"kind":"function","modifiers":[],"name":"_sendMailboxedMessage","nameLocation":"9830:21:153","parameters":{"id":75701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75700,"mutability":"mutable","name":"_message","nameLocation":"9874:8:153","nodeType":"VariableDeclaration","scope":75750,"src":"9852:30:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":75699,"nodeType":"UserDefinedTypeName","pathNode":{"id":75698,"name":"Gear.Message","nameLocations":["9852:4:153","9857:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79937,"src":"9852:12:153"},"referencedDeclaration":79937,"src":"9852:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"src":"9851:32:153"},"returnParameters":{"id":75702,"nodeType":"ParameterList","parameters":[],"src":"9892:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75933,"nodeType":"FunctionDefinition","src":"10598:3641:153","nodes":[],"body":{"id":75932,"nodeType":"Block","src":"10689:3550:153","nodes":[],"statements":[{"assignments":[75760],"declarations":[{"constant":false,"id":75760,"mutability":"mutable","name":"payload","nameLocation":"10714:7:153","nodeType":"VariableDeclaration","scope":75932,"src":"10699:22:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75759,"name":"bytes","nodeType":"ElementaryTypeName","src":"10699:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":75763,"initialValue":{"expression":{"id":75761,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75754,"src":"10724:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10733:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79929,"src":"10724:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"nodeType":"VariableDeclarationStatement","src":"10699:41:153"},{"condition":{"id":75779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11317:86:153","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75764,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75754,"src":"11319:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11328:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79927,"src":"11319:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":75766,"name":"ETH_EVENT_ADDR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75073,"src":"11343:14:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11319:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75768,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75754,"src":"11361:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11370:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"11361:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11379:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11361:19:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11319:61:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75773,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75760,"src":"11384:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":75774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11392:6:153","memberName":"length","nodeType":"MemberAccess","src":"11384:14:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":75775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11401:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11384:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11319:83:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":75778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11318:85:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75783,"nodeType":"IfStatement","src":"11313:129:153","trueBody":{"id":75782,"nodeType":"Block","src":"11405:37:153","statements":[{"expression":{"hexValue":"66616c7365","id":75780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11426:5:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75758,"id":75781,"nodeType":"Return","src":"11419:12:153"}]}},{"assignments":[75785],"declarations":[{"constant":false,"id":75785,"mutability":"mutable","name":"topicsLength","nameLocation":"11460:12:153","nodeType":"VariableDeclaration","scope":75932,"src":"11452:20:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75784,"name":"uint256","nodeType":"ElementaryTypeName","src":"11452:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75786,"nodeType":"VariableDeclarationStatement","src":"11452:20:153"},{"AST":{"nativeSrc":"11507:187:153","nodeType":"YulBlock","src":"11507:187:153","statements":[{"nativeSrc":"11630:54:153","nodeType":"YulAssignment","src":"11630:54:153","value":{"arguments":[{"kind":"number","nativeSrc":"11650:3:153","nodeType":"YulLiteral","src":"11650:3:153","type":"","value":"248"},{"arguments":[{"name":"payload.offset","nativeSrc":"11668:14:153","nodeType":"YulIdentifier","src":"11668:14:153"}],"functionName":{"name":"calldataload","nativeSrc":"11655:12:153","nodeType":"YulIdentifier","src":"11655:12:153"},"nativeSrc":"11655:28:153","nodeType":"YulFunctionCall","src":"11655:28:153"}],"functionName":{"name":"shr","nativeSrc":"11646:3:153","nodeType":"YulIdentifier","src":"11646:3:153"},"nativeSrc":"11646:38:153","nodeType":"YulFunctionCall","src":"11646:38:153"},"variableNames":[{"name":"topicsLength","nativeSrc":"11630:12:153","nodeType":"YulIdentifier","src":"11630:12:153"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":75760,"isOffset":true,"isSlot":false,"src":"11668:14:153","suffix":"offset","valueSize":1},{"declaration":75785,"isOffset":false,"isSlot":false,"src":"11630:12:153","valueSize":1}],"flags":["memory-safe"],"id":75787,"nodeType":"InlineAssembly","src":"11482:212:153"},{"condition":{"id":75796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11708:41:153","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75788,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75785,"src":"11710:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"31","id":75789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11726:1:153","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11710:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75791,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75785,"src":"11731:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"34","id":75792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11747:1:153","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11731:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11710:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":75795,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11709:40:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75800,"nodeType":"IfStatement","src":"11704:84:153","trueBody":{"id":75799,"nodeType":"Block","src":"11751:37:153","statements":[{"expression":{"hexValue":"66616c7365","id":75797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11772:5:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75758,"id":75798,"nodeType":"Return","src":"11765:12:153"}]}},{"assignments":[75802],"declarations":[{"constant":false,"id":75802,"mutability":"mutable","name":"topicsLengthInBytes","nameLocation":"11806:19:153","nodeType":"VariableDeclaration","scope":75932,"src":"11798:27:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75801,"name":"uint256","nodeType":"ElementaryTypeName","src":"11798:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75803,"nodeType":"VariableDeclarationStatement","src":"11798:27:153"},{"id":75812,"nodeType":"UncheckedBlock","src":"11835:78:153","statements":[{"expression":{"id":75810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75804,"name":"topicsLengthInBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75802,"src":"11859:19:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":75805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11881:1:153","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75806,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75785,"src":"11885:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3332","id":75807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11900:2:153","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11885:17:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11881:21:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11859:43:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75811,"nodeType":"ExpressionStatement","src":"11859:43:153"}]},{"condition":{"id":75818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11927:40:153","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75813,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75760,"src":"11929:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":75814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11937:6:153","memberName":"length","nodeType":"MemberAccess","src":"11929:14:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":75815,"name":"topicsLengthInBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75802,"src":"11947:19:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11929:37:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":75817,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11928:39:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75822,"nodeType":"IfStatement","src":"11923:83:153","trueBody":{"id":75821,"nodeType":"Block","src":"11969:37:153","statements":[{"expression":{"hexValue":"66616c7365","id":75819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11990:5:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75758,"id":75820,"nodeType":"Return","src":"11983:12:153"}]}},{"assignments":[75824],"declarations":[{"constant":false,"id":75824,"mutability":"mutable","name":"topic1","nameLocation":"12080:6:153","nodeType":"VariableDeclaration","scope":75932,"src":"12072:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75823,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12072:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75825,"nodeType":"VariableDeclarationStatement","src":"12072:14:153"},{"AST":{"nativeSrc":"12121:70:153","nodeType":"YulBlock","src":"12121:70:153","statements":[{"nativeSrc":"12135:46:153","nodeType":"YulAssignment","src":"12135:46:153","value":{"arguments":[{"arguments":[{"name":"payload.offset","nativeSrc":"12162:14:153","nodeType":"YulIdentifier","src":"12162:14:153"},{"kind":"number","nativeSrc":"12178:1:153","nodeType":"YulLiteral","src":"12178:1:153","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"12158:3:153","nodeType":"YulIdentifier","src":"12158:3:153"},"nativeSrc":"12158:22:153","nodeType":"YulFunctionCall","src":"12158:22:153"}],"functionName":{"name":"calldataload","nativeSrc":"12145:12:153","nodeType":"YulIdentifier","src":"12145:12:153"},"nativeSrc":"12145:36:153","nodeType":"YulFunctionCall","src":"12145:36:153"},"variableNames":[{"name":"topic1","nativeSrc":"12135:6:153","nodeType":"YulIdentifier","src":"12135:6:153"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":75760,"isOffset":true,"isSlot":false,"src":"12162:14:153","suffix":"offset","valueSize":1},{"declaration":75824,"isOffset":false,"isSlot":false,"src":"12135:6:153","valueSize":1}],"flags":["memory-safe"],"id":75826,"nodeType":"InlineAssembly","src":"12096:95:153"},{"condition":{"id":75872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12445:447:153","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75827,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75824,"src":"12447:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75828,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72290,"src":"12457:12:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":75829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12470:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12457:21:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12447:31:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75831,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75824,"src":"12482:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75832,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72303,"src":"12492:24:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bool_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128,bool)"}},"id":75833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12517:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12492:33:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12482:43:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:78:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75836,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75824,"src":"12549:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75837,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72314,"src":"12559:22:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12582:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12559:31:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12549:41:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:143:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75841,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75824,"src":"12594:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75842,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72321,"src":"12604:22:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":75843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12627:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12604:31:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12594:41:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:188:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75846,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75824,"src":"12659:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75847,"name":"OwnedBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72326,"src":"12669:26:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12696:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12669:35:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12659:45:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:257:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75851,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75824,"src":"12728:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75852,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72331,"src":"12738:31:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12770:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12738:40:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12728:50:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:331:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75856,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75824,"src":"12782:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75857,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72342,"src":"12792:7:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12800:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12792:16:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12782:26:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:361:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75861,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75824,"src":"12832:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75862,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72362,"src":"12842:5:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":75863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12848:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12842:14:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12832:24:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:409:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75866,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75824,"src":"12860:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75867,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72378,"src":"12870:12:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":75868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12883:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12870:21:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12860:31:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:444:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":75871,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12446:446:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":" @dev SECURITY:\n Very important check because custom events can match our hashes!\n If we miss even 1 event that is emitted by Mirror, user will be able to fake protocol logic!","id":75876,"nodeType":"IfStatement","src":"12441:490:153","trueBody":{"id":75875,"nodeType":"Block","src":"12894:37:153","statements":[{"expression":{"hexValue":"66616c7365","id":75873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12915:5:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75758,"id":75874,"nodeType":"Return","src":"12908:12:153"}]}},{"assignments":[75878],"declarations":[{"constant":false,"id":75878,"mutability":"mutable","name":"size","nameLocation":"12949:4:153","nodeType":"VariableDeclaration","scope":75932,"src":"12941:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75877,"name":"uint256","nodeType":"ElementaryTypeName","src":"12941:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75879,"nodeType":"VariableDeclarationStatement","src":"12941:12:153"},{"id":75887,"nodeType":"UncheckedBlock","src":"12963:78:153","statements":[{"expression":{"id":75885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75880,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75878,"src":"12987:4:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75881,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75760,"src":"12994:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":75882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13002:6:153","memberName":"length","nodeType":"MemberAccess","src":"12994:14:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":75883,"name":"topicsLengthInBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75802,"src":"13011:19:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12994:36:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12987:43:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75886,"nodeType":"ExpressionStatement","src":"12987:43:153"}]},{"assignments":[75889],"declarations":[{"constant":false,"id":75889,"mutability":"mutable","name":"memPtr","nameLocation":"13059:6:153","nodeType":"VariableDeclaration","scope":75932,"src":"13051:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75888,"name":"uint256","nodeType":"ElementaryTypeName","src":"13051:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75894,"initialValue":{"arguments":[{"id":75892,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75878,"src":"13084:4:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75890,"name":"Memory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40390,"src":"13068:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Memory_$40390_$","typeString":"type(library Memory)"}},"id":75891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13075:8:153","memberName":"allocate","nodeType":"MemberAccess","referencedDeclaration":40331,"src":"13068:15:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":75893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13068:21:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13051:38:153"},{"AST":{"nativeSrc":"13124:92:153","nodeType":"YulBlock","src":"13124:92:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"13151:6:153","nodeType":"YulIdentifier","src":"13151:6:153"},{"arguments":[{"name":"payload.offset","nativeSrc":"13163:14:153","nodeType":"YulIdentifier","src":"13163:14:153"},{"name":"topicsLengthInBytes","nativeSrc":"13179:19:153","nodeType":"YulIdentifier","src":"13179:19:153"}],"functionName":{"name":"add","nativeSrc":"13159:3:153","nodeType":"YulIdentifier","src":"13159:3:153"},"nativeSrc":"13159:40:153","nodeType":"YulFunctionCall","src":"13159:40:153"},{"name":"size","nativeSrc":"13201:4:153","nodeType":"YulIdentifier","src":"13201:4:153"}],"functionName":{"name":"calldatacopy","nativeSrc":"13138:12:153","nodeType":"YulIdentifier","src":"13138:12:153"},"nativeSrc":"13138:68:153","nodeType":"YulFunctionCall","src":"13138:68:153"},"nativeSrc":"13138:68:153","nodeType":"YulExpressionStatement","src":"13138:68:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75889,"isOffset":false,"isSlot":false,"src":"13151:6:153","valueSize":1},{"declaration":75760,"isOffset":true,"isSlot":false,"src":"13163:14:153","suffix":"offset","valueSize":1},{"declaration":75878,"isOffset":false,"isSlot":false,"src":"13201:4:153","valueSize":1},{"declaration":75802,"isOffset":false,"isSlot":false,"src":"13179:19:153","valueSize":1}],"flags":["memory-safe"],"id":75895,"nodeType":"InlineAssembly","src":"13099:117:153"},{"assignments":[75897],"declarations":[{"constant":false,"id":75897,"mutability":"mutable","name":"topic2","nameLocation":"13335:6:153","nodeType":"VariableDeclaration","scope":75932,"src":"13327:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75896,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13327:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75898,"nodeType":"VariableDeclarationStatement","src":"13327:14:153"},{"assignments":[75900],"declarations":[{"constant":false,"id":75900,"mutability":"mutable","name":"topic3","nameLocation":"13359:6:153","nodeType":"VariableDeclaration","scope":75932,"src":"13351:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75899,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13351:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75901,"nodeType":"VariableDeclarationStatement","src":"13351:14:153"},{"assignments":[75903],"declarations":[{"constant":false,"id":75903,"mutability":"mutable","name":"topic4","nameLocation":"13383:6:153","nodeType":"VariableDeclaration","scope":75932,"src":"13375:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75902,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13375:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75904,"nodeType":"VariableDeclarationStatement","src":"13375:14:153"},{"AST":{"nativeSrc":"13424:191:153","nodeType":"YulBlock","src":"13424:191:153","statements":[{"nativeSrc":"13438:47:153","nodeType":"YulAssignment","src":"13438:47:153","value":{"arguments":[{"arguments":[{"name":"payload.offset","nativeSrc":"13465:14:153","nodeType":"YulIdentifier","src":"13465:14:153"},{"kind":"number","nativeSrc":"13481:2:153","nodeType":"YulLiteral","src":"13481:2:153","type":"","value":"33"}],"functionName":{"name":"add","nativeSrc":"13461:3:153","nodeType":"YulIdentifier","src":"13461:3:153"},"nativeSrc":"13461:23:153","nodeType":"YulFunctionCall","src":"13461:23:153"}],"functionName":{"name":"calldataload","nativeSrc":"13448:12:153","nodeType":"YulIdentifier","src":"13448:12:153"},"nativeSrc":"13448:37:153","nodeType":"YulFunctionCall","src":"13448:37:153"},"variableNames":[{"name":"topic2","nativeSrc":"13438:6:153","nodeType":"YulIdentifier","src":"13438:6:153"}]},{"nativeSrc":"13498:47:153","nodeType":"YulAssignment","src":"13498:47:153","value":{"arguments":[{"arguments":[{"name":"payload.offset","nativeSrc":"13525:14:153","nodeType":"YulIdentifier","src":"13525:14:153"},{"kind":"number","nativeSrc":"13541:2:153","nodeType":"YulLiteral","src":"13541:2:153","type":"","value":"65"}],"functionName":{"name":"add","nativeSrc":"13521:3:153","nodeType":"YulIdentifier","src":"13521:3:153"},"nativeSrc":"13521:23:153","nodeType":"YulFunctionCall","src":"13521:23:153"}],"functionName":{"name":"calldataload","nativeSrc":"13508:12:153","nodeType":"YulIdentifier","src":"13508:12:153"},"nativeSrc":"13508:37:153","nodeType":"YulFunctionCall","src":"13508:37:153"},"variableNames":[{"name":"topic3","nativeSrc":"13498:6:153","nodeType":"YulIdentifier","src":"13498:6:153"}]},{"nativeSrc":"13558:47:153","nodeType":"YulAssignment","src":"13558:47:153","value":{"arguments":[{"arguments":[{"name":"payload.offset","nativeSrc":"13585:14:153","nodeType":"YulIdentifier","src":"13585:14:153"},{"kind":"number","nativeSrc":"13601:2:153","nodeType":"YulLiteral","src":"13601:2:153","type":"","value":"97"}],"functionName":{"name":"add","nativeSrc":"13581:3:153","nodeType":"YulIdentifier","src":"13581:3:153"},"nativeSrc":"13581:23:153","nodeType":"YulFunctionCall","src":"13581:23:153"}],"functionName":{"name":"calldataload","nativeSrc":"13568:12:153","nodeType":"YulIdentifier","src":"13568:12:153"},"nativeSrc":"13568:37:153","nodeType":"YulFunctionCall","src":"13568:37:153"},"variableNames":[{"name":"topic4","nativeSrc":"13558:6:153","nodeType":"YulIdentifier","src":"13558:6:153"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":75760,"isOffset":true,"isSlot":false,"src":"13465:14:153","suffix":"offset","valueSize":1},{"declaration":75760,"isOffset":true,"isSlot":false,"src":"13525:14:153","suffix":"offset","valueSize":1},{"declaration":75760,"isOffset":true,"isSlot":false,"src":"13585:14:153","suffix":"offset","valueSize":1},{"declaration":75897,"isOffset":false,"isSlot":false,"src":"13438:6:153","valueSize":1},{"declaration":75900,"isOffset":false,"isSlot":false,"src":"13498:6:153","valueSize":1},{"declaration":75903,"isOffset":false,"isSlot":false,"src":"13558:6:153","valueSize":1}],"flags":["memory-safe"],"id":75905,"nodeType":"InlineAssembly","src":"13399:216:153"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75906,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75785,"src":"13629:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":75907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13645:1:153","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13629:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75911,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75785,"src":"13765:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"32","id":75912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13781:1:153","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"13765:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75916,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75785,"src":"13909:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"33","id":75917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13925:1:153","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"13909:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75921,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75785,"src":"14061:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"34","id":75922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14077:1:153","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"14061:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75926,"nodeType":"IfStatement","src":"14057:154:153","trueBody":{"id":75925,"nodeType":"Block","src":"14080:131:153","statements":[{"AST":{"nativeSrc":"14119:82:153","nodeType":"YulBlock","src":"14119:82:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"14142:6:153","nodeType":"YulIdentifier","src":"14142:6:153"},{"name":"size","nativeSrc":"14150:4:153","nodeType":"YulIdentifier","src":"14150:4:153"},{"name":"topic1","nativeSrc":"14156:6:153","nodeType":"YulIdentifier","src":"14156:6:153"},{"name":"topic2","nativeSrc":"14164:6:153","nodeType":"YulIdentifier","src":"14164:6:153"},{"name":"topic3","nativeSrc":"14172:6:153","nodeType":"YulIdentifier","src":"14172:6:153"},{"name":"topic4","nativeSrc":"14180:6:153","nodeType":"YulIdentifier","src":"14180:6:153"}],"functionName":{"name":"log4","nativeSrc":"14137:4:153","nodeType":"YulIdentifier","src":"14137:4:153"},"nativeSrc":"14137:50:153","nodeType":"YulFunctionCall","src":"14137:50:153"},"nativeSrc":"14137:50:153","nodeType":"YulExpressionStatement","src":"14137:50:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75889,"isOffset":false,"isSlot":false,"src":"14142:6:153","valueSize":1},{"declaration":75878,"isOffset":false,"isSlot":false,"src":"14150:4:153","valueSize":1},{"declaration":75824,"isOffset":false,"isSlot":false,"src":"14156:6:153","valueSize":1},{"declaration":75897,"isOffset":false,"isSlot":false,"src":"14164:6:153","valueSize":1},{"declaration":75900,"isOffset":false,"isSlot":false,"src":"14172:6:153","valueSize":1},{"declaration":75903,"isOffset":false,"isSlot":false,"src":"14180:6:153","valueSize":1}],"flags":["memory-safe"],"id":75924,"nodeType":"InlineAssembly","src":"14094:107:153"}]}},"id":75927,"nodeType":"IfStatement","src":"13905:306:153","trueBody":{"id":75920,"nodeType":"Block","src":"13928:123:153","statements":[{"AST":{"nativeSrc":"13967:74:153","nodeType":"YulBlock","src":"13967:74:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"13990:6:153","nodeType":"YulIdentifier","src":"13990:6:153"},{"name":"size","nativeSrc":"13998:4:153","nodeType":"YulIdentifier","src":"13998:4:153"},{"name":"topic1","nativeSrc":"14004:6:153","nodeType":"YulIdentifier","src":"14004:6:153"},{"name":"topic2","nativeSrc":"14012:6:153","nodeType":"YulIdentifier","src":"14012:6:153"},{"name":"topic3","nativeSrc":"14020:6:153","nodeType":"YulIdentifier","src":"14020:6:153"}],"functionName":{"name":"log3","nativeSrc":"13985:4:153","nodeType":"YulIdentifier","src":"13985:4:153"},"nativeSrc":"13985:42:153","nodeType":"YulFunctionCall","src":"13985:42:153"},"nativeSrc":"13985:42:153","nodeType":"YulExpressionStatement","src":"13985:42:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75889,"isOffset":false,"isSlot":false,"src":"13990:6:153","valueSize":1},{"declaration":75878,"isOffset":false,"isSlot":false,"src":"13998:4:153","valueSize":1},{"declaration":75824,"isOffset":false,"isSlot":false,"src":"14004:6:153","valueSize":1},{"declaration":75897,"isOffset":false,"isSlot":false,"src":"14012:6:153","valueSize":1},{"declaration":75900,"isOffset":false,"isSlot":false,"src":"14020:6:153","valueSize":1}],"flags":["memory-safe"],"id":75919,"nodeType":"InlineAssembly","src":"13942:99:153"}]}},"id":75928,"nodeType":"IfStatement","src":"13761:450:153","trueBody":{"id":75915,"nodeType":"Block","src":"13784:115:153","statements":[{"AST":{"nativeSrc":"13823:66:153","nodeType":"YulBlock","src":"13823:66:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"13846:6:153","nodeType":"YulIdentifier","src":"13846:6:153"},{"name":"size","nativeSrc":"13854:4:153","nodeType":"YulIdentifier","src":"13854:4:153"},{"name":"topic1","nativeSrc":"13860:6:153","nodeType":"YulIdentifier","src":"13860:6:153"},{"name":"topic2","nativeSrc":"13868:6:153","nodeType":"YulIdentifier","src":"13868:6:153"}],"functionName":{"name":"log2","nativeSrc":"13841:4:153","nodeType":"YulIdentifier","src":"13841:4:153"},"nativeSrc":"13841:34:153","nodeType":"YulFunctionCall","src":"13841:34:153"},"nativeSrc":"13841:34:153","nodeType":"YulExpressionStatement","src":"13841:34:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75889,"isOffset":false,"isSlot":false,"src":"13846:6:153","valueSize":1},{"declaration":75878,"isOffset":false,"isSlot":false,"src":"13854:4:153","valueSize":1},{"declaration":75824,"isOffset":false,"isSlot":false,"src":"13860:6:153","valueSize":1},{"declaration":75897,"isOffset":false,"isSlot":false,"src":"13868:6:153","valueSize":1}],"flags":["memory-safe"],"id":75914,"nodeType":"InlineAssembly","src":"13798:91:153"}]}},"id":75929,"nodeType":"IfStatement","src":"13625:586:153","trueBody":{"id":75910,"nodeType":"Block","src":"13648:107:153","statements":[{"AST":{"nativeSrc":"13687:58:153","nodeType":"YulBlock","src":"13687:58:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"13710:6:153","nodeType":"YulIdentifier","src":"13710:6:153"},{"name":"size","nativeSrc":"13718:4:153","nodeType":"YulIdentifier","src":"13718:4:153"},{"name":"topic1","nativeSrc":"13724:6:153","nodeType":"YulIdentifier","src":"13724:6:153"}],"functionName":{"name":"log1","nativeSrc":"13705:4:153","nodeType":"YulIdentifier","src":"13705:4:153"},"nativeSrc":"13705:26:153","nodeType":"YulFunctionCall","src":"13705:26:153"},"nativeSrc":"13705:26:153","nodeType":"YulExpressionStatement","src":"13705:26:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75889,"isOffset":false,"isSlot":false,"src":"13710:6:153","valueSize":1},{"declaration":75878,"isOffset":false,"isSlot":false,"src":"13718:4:153","valueSize":1},{"declaration":75824,"isOffset":false,"isSlot":false,"src":"13724:6:153","valueSize":1}],"flags":["memory-safe"],"id":75909,"nodeType":"InlineAssembly","src":"13662:83:153"}]}},{"expression":{"hexValue":"74727565","id":75930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14228:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":75758,"id":75931,"nodeType":"Return","src":"14221:11:153"}]},"documentation":{"id":75751,"nodeType":"StructuredDocumentation","src":"10484:109:153","text":"@dev Tries to parse and emit Sails Event. Returns `true` in case of success and `false` in case of error."},"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseAndEmitSailsEvent","nameLocation":"10607:26:153","parameters":{"id":75755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75754,"mutability":"mutable","name":"_message","nameLocation":"10656:8:153","nodeType":"VariableDeclaration","scope":75933,"src":"10634:30:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":75753,"nodeType":"UserDefinedTypeName","pathNode":{"id":75752,"name":"Gear.Message","nameLocations":["10634:4:153","10639:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79937,"src":"10634:12:153"},"referencedDeclaration":79937,"src":"10634:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"src":"10633:32:153"},"returnParameters":{"id":75758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75933,"src":"10683:4:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75756,"name":"bool","nodeType":"ElementaryTypeName","src":"10683:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10682:6:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76038,"nodeType":"FunctionDefinition","src":"14314:1288:153","nodes":[],"body":{"id":76037,"nodeType":"Block","src":"14381:1221:153","nodes":[],"statements":[{"condition":{"expression":{"id":75940,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"14395:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14404:4:153","memberName":"call","nodeType":"MemberAccess","referencedDeclaration":79936,"src":"14395:13:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":76035,"nodeType":"Block","src":"15406:190:153","statements":[{"expression":{"arguments":[{"expression":{"id":76016,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15435:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15444:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79927,"src":"15435:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76018,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15457:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15466:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"15457:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76015,"name":"_transferEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76184,"src":"15420:14:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":76020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15420:52:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76021,"nodeType":"ExpressionStatement","src":"15420:52:153"},{"eventCall":{"arguments":[{"expression":{"id":76023,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15498:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15507:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79929,"src":"15498:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":76025,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15516:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15525:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"15516:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":76027,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15532:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15541:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79934,"src":"15532:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79956_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15554:2:153","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":79953,"src":"15532:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":76030,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15558:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15567:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79934,"src":"15558:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79956_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15580:4:153","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":79955,"src":"15558:26:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":76022,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72362,"src":"15492:5:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":76033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15492:93:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76034,"nodeType":"EmitStatement","src":"15487:98:153"}]},"id":76036,"nodeType":"IfStatement","src":"14391:1205:153","trueBody":{"id":76014,"nodeType":"Block","src":"14410:990:153","statements":[{"assignments":[75943],"declarations":[{"constant":false,"id":75943,"mutability":"mutable","name":"isSuccessReply","nameLocation":"14429:14:153","nodeType":"VariableDeclaration","scope":76014,"src":"14424:19:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75942,"name":"bool","nodeType":"ElementaryTypeName","src":"14424:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75951,"initialValue":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":75950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":75944,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"14446:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14455:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79934,"src":"14446:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79956_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":75946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14468:4:153","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":79955,"src":"14446:26:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":75948,"indexExpression":{"hexValue":"30","id":75947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14473:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14446:29:153","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14479:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14446:34:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"14424:56:153"},{"assignments":[75953],"declarations":[{"constant":false,"id":75953,"mutability":"mutable","name":"payload","nameLocation":"14508:7:153","nodeType":"VariableDeclaration","scope":76014,"src":"14495:20:153","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":75952,"name":"bytes","nodeType":"ElementaryTypeName","src":"14495:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":75954,"nodeType":"VariableDeclarationStatement","src":"14495:20:153"},{"condition":{"id":75955,"name":"isSuccessReply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75943,"src":"14534:14:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":75978,"nodeType":"Block","src":"14615:348:153","statements":[{"expression":{"id":75976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75962,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75953,"src":"14785:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":75965,"name":"ICallbacks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71919,"src":"14839:10:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICallbacks_$71919_$","typeString":"type(contract ICallbacks)"}},"id":75966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14850:12:153","memberName":"onErrorReply","nodeType":"MemberAccess","referencedDeclaration":71918,"src":"14839:23:153","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes4_$returns$__$","typeString":"function ICallbacks.onErrorReply(bytes32,bytes calldata,bytes4)"}},"id":75967,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14863:8:153","memberName":"selector","nodeType":"MemberAccess","src":"14839:32:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"expression":{"id":75968,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"14873:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14882:2:153","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79925,"src":"14873:11:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75970,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"14886:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14895:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79929,"src":"14886:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"expression":{"id":75972,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"14904:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14913:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79934,"src":"14904:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79956_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":75974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14926:4:153","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":79955,"src":"14904:26:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":75963,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14795:3:153","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14799:18:153","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"14795:22:153","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":75975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14795:153:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"14785:163:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":75977,"nodeType":"ExpressionStatement","src":"14785:163:153"}]},"id":75979,"nodeType":"IfStatement","src":"14530:433:153","trueBody":{"id":75961,"nodeType":"Block","src":"14550:59:153","statements":[{"expression":{"id":75959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75956,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75953,"src":"14568:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":75957,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"14578:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14587:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79929,"src":"14578:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"14568:26:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":75960,"nodeType":"ExpressionStatement","src":"14568:26:153"}]}},{"assignments":[75981,null],"declarations":[{"constant":false,"id":75981,"mutability":"mutable","name":"success","nameLocation":"14983:7:153","nodeType":"VariableDeclaration","scope":76014,"src":"14978:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75980,"name":"bool","nodeType":"ElementaryTypeName","src":"14978:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":75991,"initialValue":{"arguments":[{"id":75989,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75953,"src":"15058:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"expression":{"id":75982,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"14995:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15004:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79927,"src":"14995:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15016:4:153","memberName":"call","nodeType":"MemberAccess","src":"14995:25:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas","value"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":75985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15026:7:153","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"},{"expression":{"id":75986,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15042:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15051:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"15042:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"14995:62:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gasvalue","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14995:71:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"14977:89:153"},{"condition":{"id":75993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"15085:8:153","subExpression":{"id":75992,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75981,"src":"15086:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76013,"nodeType":"IfStatement","src":"15081:309:153","trueBody":{"id":76012,"nodeType":"Block","src":"15095:295:153","statements":[{"expression":{"arguments":[{"expression":{"id":75995,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15128:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15137:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79927,"src":"15128:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":75997,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15150:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15159:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"15150:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75994,"name":"_transferEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76184,"src":"15113:14:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":75999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15113:52:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76000,"nodeType":"ExpressionStatement","src":"15113:52:153"},{"documentation":"@dev In case of failed call, we emit appropriate event to inform external users.","eventCall":{"arguments":[{"expression":{"id":76002,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15306:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15315:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"15306:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":76004,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15322:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15331:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79934,"src":"15322:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79956_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15344:2:153","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":79953,"src":"15322:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":76007,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75937,"src":"15348:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15357:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79934,"src":"15348:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79956_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15370:4:153","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":79955,"src":"15348:26:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":76001,"name":"ReplyCallFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72371,"src":"15290:15:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (uint128,bytes32,bytes4)"}},"id":76010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15290:85:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76011,"nodeType":"EmitStatement","src":"15285:90:153"}]}}]}}]},"documentation":{"id":75934,"nodeType":"StructuredDocumentation","src":"14245:64:153","text":"@dev Non-zero value always sent since never goes to mailbox."},"implemented":true,"kind":"function","modifiers":[],"name":"_sendReplyMessage","nameLocation":"14323:17:153","parameters":{"id":75938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75937,"mutability":"mutable","name":"_message","nameLocation":"14363:8:153","nodeType":"VariableDeclaration","scope":76038,"src":"14341:30:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":75936,"nodeType":"UserDefinedTypeName","pathNode":{"id":75935,"name":"Gear.Message","nameLocations":["14341:4:153","14346:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79937,"src":"14341:12:153"},"referencedDeclaration":79937,"src":"14341:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79937_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"src":"14340:32:153"},"returnParameters":{"id":75939,"nodeType":"ParameterList","parameters":[],"src":"14381:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76103,"nodeType":"FunctionDefinition","src":"15705:514:153","nodes":[],"body":{"id":76102,"nodeType":"Block","src":"15789:430:153","nodes":[],"statements":[{"assignments":[76048],"declarations":[{"constant":false,"id":76048,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"15812:16:153","nodeType":"VariableDeclaration","scope":76102,"src":"15799:29:153","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76047,"name":"bytes","nodeType":"ElementaryTypeName","src":"15799:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76049,"nodeType":"VariableDeclarationStatement","src":"15799:29:153"},{"body":{"id":76096,"nodeType":"Block","src":"15884:284:153","statements":[{"assignments":[76065],"declarations":[{"constant":false,"id":76065,"mutability":"mutable","name":"claim","nameLocation":"15923:5:153","nodeType":"VariableDeclaration","scope":76096,"src":"15898:30:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80014_calldata_ptr","typeString":"struct Gear.ValueClaim"},"typeName":{"id":76064,"nodeType":"UserDefinedTypeName","pathNode":{"id":76063,"name":"Gear.ValueClaim","nameLocations":["15898:4:153","15903:10:153"],"nodeType":"IdentifierPath","referencedDeclaration":80014,"src":"15898:15:153"},"referencedDeclaration":80014,"src":"15898:15:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80014_storage_ptr","typeString":"struct Gear.ValueClaim"}},"visibility":"internal"}],"id":76069,"initialValue":{"baseExpression":{"id":76066,"name":"_claims","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76042,"src":"15931:7:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80014_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":76068,"indexExpression":{"id":76067,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76051,"src":"15939:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15931:10:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80014_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"15898:43:153"},{"expression":{"id":76080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76070,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"15956:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76074,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"15988:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76077,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76065,"src":"16027:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80014_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValueClaim_$80014_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}],"expression":{"id":76075,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"16006:4:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":76076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16011:15:153","memberName":"valueClaimBytes","nodeType":"MemberAccess","referencedDeclaration":80777,"src":"16006:20:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ValueClaim_$80014_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct Gear.ValueClaim memory) pure returns (bytes memory)"}},"id":76078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16006:27:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":76072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15975:5:153","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76071,"name":"bytes","nodeType":"ElementaryTypeName","src":"15975:5:153","typeDescriptions":{}}},"id":76073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15981:6:153","memberName":"concat","nodeType":"MemberAccess","src":"15975:12:153","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15975:59:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"15956:78:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76081,"nodeType":"ExpressionStatement","src":"15956:78:153"},{"expression":{"arguments":[{"expression":{"id":76083,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76065,"src":"16064:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80014_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16070:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":80011,"src":"16064:17:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76085,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76065,"src":"16083:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80014_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16089:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":80013,"src":"16083:11:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76082,"name":"_transferEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76184,"src":"16049:14:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":76087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16049:46:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76088,"nodeType":"ExpressionStatement","src":"16049:46:153"},{"eventCall":{"arguments":[{"expression":{"id":76090,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76065,"src":"16128:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80014_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16134:9:153","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":80009,"src":"16128:15:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76092,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76065,"src":"16145:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80014_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16151:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":80013,"src":"16145:11:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76089,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72378,"src":"16115:12:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":76094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16115:42:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76095,"nodeType":"EmitStatement","src":"16110:47:153"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76054,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76051,"src":"15859:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76055,"name":"_claims","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76042,"src":"15863:7:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80014_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":76056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15871:6:153","memberName":"length","nodeType":"MemberAccess","src":"15863:14:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15859:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76097,"initializationExpression":{"assignments":[76051],"declarations":[{"constant":false,"id":76051,"mutability":"mutable","name":"i","nameLocation":"15852:1:153","nodeType":"VariableDeclaration","scope":76097,"src":"15844:9:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76050,"name":"uint256","nodeType":"ElementaryTypeName","src":"15844:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76053,"initialValue":{"hexValue":"30","id":76052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15856:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15844:13:153"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15879:3:153","subExpression":{"id":76058,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76051,"src":"15879:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76060,"nodeType":"ExpressionStatement","src":"15879:3:153"},"nodeType":"ForStatement","src":"15839:329:153"},{"expression":{"arguments":[{"id":76099,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"16195:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76098,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16185:9:153","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16185:27:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76046,"id":76101,"nodeType":"Return","src":"16178:34:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_claimValues","nameLocation":"15714:12:153","parameters":{"id":76043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76042,"mutability":"mutable","name":"_claims","nameLocation":"15754:7:153","nodeType":"VariableDeclaration","scope":76103,"src":"15727:34:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80014_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim[]"},"typeName":{"baseType":{"id":76040,"nodeType":"UserDefinedTypeName","pathNode":{"id":76039,"name":"Gear.ValueClaim","nameLocations":["15727:4:153","15732:10:153"],"nodeType":"IdentifierPath","referencedDeclaration":80014,"src":"15727:15:153"},"referencedDeclaration":80014,"src":"15727:15:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80014_storage_ptr","typeString":"struct Gear.ValueClaim"}},"id":76041,"nodeType":"ArrayTypeName","src":"15727:17:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80014_storage_$dyn_storage_ptr","typeString":"struct Gear.ValueClaim[]"}},"visibility":"internal"}],"src":"15726:36:153"},"returnParameters":{"id":76046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76103,"src":"15780:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76044,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15780:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15779:9:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76122,"nodeType":"FunctionDefinition","src":"16280:267:153","nodes":[],"body":{"id":76121,"nodeType":"Block","src":"16344:203:153","nodes":[],"statements":[{"documentation":"@dev Set inheritor.","expression":{"id":76112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76110,"name":"exited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75085,"src":"16386:6:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":76111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16395:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"16386:13:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76113,"nodeType":"ExpressionStatement","src":"16386:13:153"},{"expression":{"id":76116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76114,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75088,"src":"16409:9:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76115,"name":"_inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76105,"src":"16421:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16409:22:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":76117,"nodeType":"ExpressionStatement","src":"16409:22:153"},{"documentation":"@dev Transfer all available balance to the inheritor.","expression":{"arguments":[],"expression":{"argumentTypes":[],"id":76118,"name":"transferLockedValueToInheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75368,"src":"16508:30:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":76119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16508:32:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76120,"nodeType":"ExpressionStatement","src":"16508:32:153"}]},"implemented":true,"kind":"function","modifiers":[{"id":76108,"kind":"modifierInvocation","modifierName":{"id":76107,"name":"onlyIfActive","nameLocations":["16331:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75156,"src":"16331:12:153"},"nodeType":"ModifierInvocation","src":"16331:12:153"}],"name":"_setInheritor","nameLocation":"16289:13:153","parameters":{"id":76106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76105,"mutability":"mutable","name":"_inheritor","nameLocation":"16311:10:153","nodeType":"VariableDeclaration","scope":76122,"src":"16303:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76104,"name":"address","nodeType":"ElementaryTypeName","src":"16303:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16302:20:153"},"returnParameters":{"id":76109,"nodeType":"ParameterList","parameters":[],"src":"16344:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76136,"nodeType":"FunctionDefinition","src":"16553:235:153","nodes":[],"body":{"id":76135,"nodeType":"Block","src":"16607:181:153","nodes":[],"statements":[{"documentation":"@dev Set state hash.","expression":{"id":76129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76127,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75079,"src":"16650:9:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76128,"name":"_stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76124,"src":"16662:10:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16650:22:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":76130,"nodeType":"ExpressionStatement","src":"16650:22:153"},{"documentation":"@dev Emits an event signaling that the state has changed.","eventCall":{"arguments":[{"id":76132,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75079,"src":"16771:9:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76131,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72290,"src":"16758:12:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":76133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16758:23:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76134,"nodeType":"EmitStatement","src":"16753:28:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_updateStateHash","nameLocation":"16562:16:153","parameters":{"id":76125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76124,"mutability":"mutable","name":"_stateHash","nameLocation":"16587:10:153","nodeType":"VariableDeclaration","scope":76136,"src":"16579:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76123,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16579:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16578:20:153"},"returnParameters":{"id":76126,"nodeType":"ParameterList","parameters":[],"src":"16607:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76157,"nodeType":"FunctionDefinition","src":"16828:182:153","nodes":[],"body":{"id":76156,"nodeType":"Block","src":"16900:110:153","nodes":[],"statements":[{"assignments":[76145],"declarations":[{"constant":false,"id":76145,"mutability":"mutable","name":"wvaraAddr","nameLocation":"16918:9:153","nodeType":"VariableDeclaration","scope":76156,"src":"16910:17:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76144,"name":"address","nodeType":"ElementaryTypeName","src":"16910:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":76151,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":76147,"name":"routerAddr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76138,"src":"16938:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76146,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72764,"src":"16930:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$72764_$","typeString":"type(contract IRouter)"}},"id":76148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16930:19:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$72764","typeString":"contract IRouter"}},"id":76149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16950:11:153","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":72600,"src":"16930:31:153","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":76150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16930:33:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16910:53:153"},{"expression":{"arguments":[{"id":76153,"name":"wvaraAddr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76145,"src":"16993:9:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76152,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72775,"src":"16980:12:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$72775_$","typeString":"type(contract IWrappedVara)"}},"id":76154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16980:23:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$72775","typeString":"contract IWrappedVara"}},"functionReturnParameters":76143,"id":76155,"nodeType":"Return","src":"16973:30:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_wvara","nameLocation":"16837:6:153","parameters":{"id":76139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76138,"mutability":"mutable","name":"routerAddr","nameLocation":"16852:10:153","nodeType":"VariableDeclaration","scope":76157,"src":"16844:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76137,"name":"address","nodeType":"ElementaryTypeName","src":"16844:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16843:20:153"},"returnParameters":{"id":76143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76142,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76157,"src":"16886:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$72775","typeString":"contract IWrappedVara"},"typeName":{"id":76141,"nodeType":"UserDefinedTypeName","pathNode":{"id":76140,"name":"IWrappedVara","nameLocations":["16886:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":72775,"src":"16886:12:153"},"referencedDeclaration":72775,"src":"16886:12:153","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$72775","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"src":"16885:14:153"},"scope":76242,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":76184,"nodeType":"FunctionDefinition","src":"17016:235:153","nodes":[],"body":{"id":76183,"nodeType":"Block","src":"17084:167:153","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":76166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76164,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76161,"src":"17098:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":76165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17107:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17098:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76182,"nodeType":"IfStatement","src":"17094:151:153","trueBody":{"id":76181,"nodeType":"Block","src":"17110:135:153","statements":[{"assignments":[76168,null],"declarations":[{"constant":false,"id":76168,"mutability":"mutable","name":"success","nameLocation":"17130:7:153","nodeType":"VariableDeclaration","scope":76181,"src":"17125:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":76167,"name":"bool","nodeType":"ElementaryTypeName","src":"17125:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":76175,"initialValue":{"arguments":[{"hexValue":"","id":76173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17173:2:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":76169,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76159,"src":"17142:11:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":76170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17154:4:153","memberName":"call","nodeType":"MemberAccess","src":"17142:16:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":76172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":76171,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76161,"src":"17166:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"17142:30:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":76174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17142:34:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"17124:52:153"},{"expression":{"arguments":[{"id":76177,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76168,"src":"17198:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e73666572204574686572","id":76178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17207:26:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_00e6cde77ec9144bbd886e1f93f7d8152ae0c166b31b2570bdc9836ca6340138","typeString":"literal_string \"failed to transfer Ether\""},"value":"failed to transfer Ether"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_00e6cde77ec9144bbd886e1f93f7d8152ae0c166b31b2570bdc9836ca6340138","typeString":"literal_string \"failed to transfer Ether\""}],"id":76176,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17190:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17190:44:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76180,"nodeType":"ExpressionStatement","src":"17190:44:153"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_transferEther","nameLocation":"17025:14:153","parameters":{"id":76162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76159,"mutability":"mutable","name":"destination","nameLocation":"17048:11:153","nodeType":"VariableDeclaration","scope":76184,"src":"17040:19:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76158,"name":"address","nodeType":"ElementaryTypeName","src":"17040:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":76161,"mutability":"mutable","name":"value","nameLocation":"17069:5:153","nodeType":"VariableDeclaration","scope":76184,"src":"17061:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76160,"name":"uint128","nodeType":"ElementaryTypeName","src":"17061:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"17039:36:153"},"returnParameters":{"id":76163,"nodeType":"ParameterList","parameters":[],"src":"17084:0:153"},"scope":76242,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76241,"nodeType":"FunctionDefinition","src":"17257:937:153","nodes":[],"body":{"id":76240,"nodeType":"Block","src":"17285:909:153","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":76196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":76187,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17299:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17303:5:153","memberName":"value","nodeType":"MemberAccess","src":"17299:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":76189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17311:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17299:13:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76191,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17316:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17320:4:153","memberName":"data","nodeType":"MemberAccess","src":"17316:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":76193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17325:6:153","memberName":"length","nodeType":"MemberAccess","src":"17316:15:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":76194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17335:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17316:20:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17299:37:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76211,"nodeType":"IfStatement","src":"17295:176:153","trueBody":{"id":76210,"nodeType":"Block","src":"17338:133:153","statements":[{"assignments":[76198],"declarations":[{"constant":false,"id":76198,"mutability":"mutable","name":"value","nameLocation":"17360:5:153","nodeType":"VariableDeclaration","scope":76210,"src":"17352:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76197,"name":"uint128","nodeType":"ElementaryTypeName","src":"17352:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":76204,"initialValue":{"arguments":[{"expression":{"id":76201,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17376:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17380:5:153","memberName":"value","nodeType":"MemberAccess","src":"17376:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17368:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":76199,"name":"uint128","nodeType":"ElementaryTypeName","src":"17368:7:153","typeDescriptions":{}}},"id":76203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17368:18:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"17352:34:153"},{"eventCall":{"arguments":[{"id":76206,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76198,"src":"17433:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76205,"name":"OwnedBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72326,"src":"17406:26:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":76207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17406:33:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76208,"nodeType":"EmitStatement","src":"17401:38:153"},{"functionReturnParameters":76186,"id":76209,"nodeType":"Return","src":"17454:7:153"}]}},{"expression":{"arguments":[{"id":76214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"17629:8:153","subExpression":{"id":76213,"name":"isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75094,"src":"17630:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76212,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17621:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":76215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17621:17:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76216,"nodeType":"ExpressionStatement","src":"17621:17:153"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76218,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17863:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17867:4:153","memberName":"data","nodeType":"MemberAccess","src":"17863:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":76220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17872:6:153","memberName":"length","nodeType":"MemberAccess","src":"17863:15:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30783234","id":76221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17882:4:153","typeDescriptions":{"typeIdentifier":"t_rational_36_by_1","typeString":"int_const 36"},"value":"0x24"},"src":"17863:23:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76217,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17855:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":76223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17855:32:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76224,"nodeType":"ExpressionStatement","src":"17855:32:153"},{"assignments":[76226],"declarations":[{"constant":false,"id":76226,"mutability":"mutable","name":"callReply","nameLocation":"17906:9:153","nodeType":"VariableDeclaration","scope":76240,"src":"17898:17:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76225,"name":"uint256","nodeType":"ElementaryTypeName","src":"17898:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76227,"nodeType":"VariableDeclarationStatement","src":"17898:17:153"},{"AST":{"nativeSrc":"17951:55:153","nodeType":"YulBlock","src":"17951:55:153","statements":[{"nativeSrc":"17965:31:153","nodeType":"YulAssignment","src":"17965:31:153","value":{"arguments":[{"kind":"number","nativeSrc":"17991:4:153","nodeType":"YulLiteral","src":"17991:4:153","type":"","value":"0x04"}],"functionName":{"name":"calldataload","nativeSrc":"17978:12:153","nodeType":"YulIdentifier","src":"17978:12:153"},"nativeSrc":"17978:18:153","nodeType":"YulFunctionCall","src":"17978:18:153"},"variableNames":[{"name":"callReply","nativeSrc":"17965:9:153","nodeType":"YulIdentifier","src":"17965:9:153"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":76226,"isOffset":false,"isSlot":false,"src":"17965:9:153","valueSize":1}],"flags":["memory-safe"],"id":76228,"nodeType":"InlineAssembly","src":"17926:80:153"},{"assignments":[76230],"declarations":[{"constant":false,"id":76230,"mutability":"mutable","name":"messageId","nameLocation":"18024:9:153","nodeType":"VariableDeclaration","scope":76240,"src":"18016:17:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76229,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18016:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76238,"initialValue":{"arguments":[{"expression":{"id":76232,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18049:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18053:4:153","memberName":"data","nodeType":"MemberAccess","src":"18049:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76234,"name":"callReply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76226,"src":"18059:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":76235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18072:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18059:14:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76231,"name":"_sendMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75595,"src":"18036:12:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_calldata_ptr_$_t_bool_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bool) returns (bytes32)"}},"id":76237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18036:38:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18016:58:153"},{"AST":{"nativeSrc":"18110:78:153","nodeType":"YulBlock","src":"18110:78:153","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"18131:4:153","nodeType":"YulLiteral","src":"18131:4:153","type":"","value":"0x00"},{"name":"messageId","nativeSrc":"18137:9:153","nodeType":"YulIdentifier","src":"18137:9:153"}],"functionName":{"name":"mstore","nativeSrc":"18124:6:153","nodeType":"YulIdentifier","src":"18124:6:153"},"nativeSrc":"18124:23:153","nodeType":"YulFunctionCall","src":"18124:23:153"},"nativeSrc":"18124:23:153","nodeType":"YulExpressionStatement","src":"18124:23:153"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"18167:4:153","nodeType":"YulLiteral","src":"18167:4:153","type":"","value":"0x00"},{"kind":"number","nativeSrc":"18173:4:153","nodeType":"YulLiteral","src":"18173:4:153","type":"","value":"0x20"}],"functionName":{"name":"return","nativeSrc":"18160:6:153","nodeType":"YulIdentifier","src":"18160:6:153"},"nativeSrc":"18160:18:153","nodeType":"YulFunctionCall","src":"18160:18:153"},"nativeSrc":"18160:18:153","nodeType":"YulExpressionStatement","src":"18160:18:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":76230,"isOffset":false,"isSlot":false,"src":"18137:9:153","valueSize":1}],"flags":["memory-safe"],"id":76239,"nodeType":"InlineAssembly","src":"18085:103:153"}]},"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":76185,"nodeType":"ParameterList","parameters":[],"src":"17265:2:153"},"returnParameters":{"id":76186,"nodeType":"ParameterList","parameters":[],"src":"17285:0:153"},"scope":76242,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":75068,"name":"IMirror","nameLocations":["595:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":72455,"src":"595:7:153"},"id":75069,"nodeType":"InheritanceSpecifier","src":"595:7:153"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[76242,72455],"name":"Mirror","nameLocation":"585:6:153","scope":76243,"usedErrors":[],"usedEvents":[72290,72303,72314,72321,72326,72331,72342,72351,72362,72371,72378]}],"license":"UNLICENSED"},"id":153} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_router","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"exited","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"inheritor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_initializer","type":"address","internalType":"address"},{"name":"_abiInterface","type":"address","internalType":"address"},{"name":"_isSmall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initializer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"performStateTransition","inputs":[{"name":"_transition","type":"tuple","internalType":"struct Gear.StateTransition","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"exited","type":"bool","internalType":"bool"},{"name":"inheritor","type":"address","internalType":"address"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueToReceiveNegativeSign","type":"bool","internalType":"bool"},{"name":"valueClaims","type":"tuple[]","internalType":"struct Gear.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct Gear.Message[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct Gear.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]},{"name":"call","type":"bool","internalType":"bool"}]}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_callReply","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"transferLockedValueToInheritor","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageCallFailed","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"callReply","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"OwnedBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyCallFailed","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60a03461008557601f611c4938819003918201601f19168301916001600160401b038311848410176100895780849260209460405283398101031261008557516001600160a01b038116810361008557608052604051611bab908161009e823960805181818160c8015281816104f20152818161112c015281816114a3015261160e0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6101006040526004361015610019575b61001761135f565b005b5f5f3560e01c8063084f443a1461088857806336a52a181461085b57806342129d00146106b85780635ce6c32714610695578063701da98e14610678578063704ed5421461047f5780637a8e0cdd146103f157806391d5a64c1461039e5780639ce110d714610375578063affed0e014610357578063e43f3433146102da578063e4bbb5a8146100fa5763f887ea40146100b3575061000f565b346100f757806003193601126100f7576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b50346100f75760603660031901126100f7576004356001600160a01b038116908190036102d6576024356001600160a01b03811691908290036102d257604435908115158092036102ce5761014d6114a1565b600354906001600160a01b03821661027e5760ff8260a01c16610239577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54926001600160a01b0384166101e8576001600160a81b03199092161760a09190911b60ff60a01b16176003556001600160a01b031916177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5580f35b60405162461bcd60e51b8152602060048201526024808201527f61626920696e7465726661636520636f756c64206f6e6c7920626520736574206044820152636f6e636560e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f6973536d616c6c20636f756c64206f6e6c7920626520736574206f6e636500006044820152606490fd5b60405162461bcd60e51b815260206004820152602260248201527f696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e604482015261636560f01b6064820152608490fd5b8380fd5b8280fd5b5080fd5b50346100f757806003193601126100f75760025460ff81161561031a5761031790476001600160801b03169060081c6001600160a01b03166116b4565b80f35b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81b9bdd08195e1a5d1959605a1b6044820152606490fd5b50346100f757806003193601126100f7576020600154604051908152f35b50346100f757806003193601126100f7576003546040516001600160a01b039091168152602090f35b50346100f75760203660031901126100f7576103b861154e565b6103c0611593565b60405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203392a280f35b5060403660031901126100f7576024356001600160401b0381116102d65761043e7fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f91369060040161121c565b61044992919261154e565b610451611593565b6001600160801b03341690610465826115f6565b610479604051928392339660043585611331565b0390a280f35b50346100f75760203660031901126100f7576004356001600160801b0381168091036102d6576104ad61154e565b806104e1575b60207f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666791604051908152a180f35b60405163088f50cf60e41b815282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa908115610628578391610633575b50606460209260405194859384926323b872dd60e01b8452336004850152602484015287604484015260018060a01b03165af19081156106285783916105ed575b506104b35760405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662057566172612066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b90506020813d602011610620575b81610608602093836112a6565b810103126102d2575180151581036102d2575f610573565b3d91506105fb565b6040513d85823e3d90fd5b90506020813d602011610670575b8161064e602093836112a6565b810103126102d25751906001600160a01b03821682036102d257906064610532565b3d9150610641565b50346100f757806003193601126100f75760209054604051908152f35b50346100f757806003193601126100f757602060ff600254166040519015158152f35b5060403660031901126100f7576004356001600160401b0381116102d6576106e490369060040161121c565b916024358015158091036102d6576106fa61154e565b60015415801590610847575b156107c5576001600160801b0334169161071f836115f6565b600154905f1982146107b15750937f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c549161079886600160209801600155604051888101913060601b835260348201526034815261077d6054826112a6565b51902095604051938785526080898601526080850191611311565b93604083015260608201528033930390a2604051908152f35b634e487b7160e01b81526011600452602490fd5b60405162461bcd60e51b815260206004820152604e60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201527f6d657373616765207965743b20616e642063616c6c6572206973206e6f74207460648201526d34329034b734ba34b0b634bd32b960911b608482015260a490fd5b506003546001600160a01b03163314610706565b50346100f757806003193601126100f75760025460405160089190911c6001600160a01b03168152602090f35b506020366003190112610d85576004356001600160401b038111610d855780360391610100600319840112610d85576108bf6114a1565b6108cb82600401611271565b306001600160a01b03909116036111d75760848201926001600160801b036108f285611285565b161515806111c5575b611114575b6022190160e483013581811215610d8557830192600484013560a0526001600160401b0360a05111610d855760a05160051b928336036024860113610d855760a051840460201460a051151715610d715761095c849694611725565b6080525f60e081905261010219368790030194905b60a051811015610d9d576024600582901b8801013586811215610d85576004908801019060208201601f19833603019060e08212610d85576040519160c083018381106001600160401b03821117610d89576040528135835260408501906109d88261125d565b602085019081526060870160c05260c051356001600160401b038111610d855760209088010136601f82011215610d8557610a1a903690602081359101611518565b906040860191825260808801926040610a3285611249565b6060890190815291607f190112610d855760405192604084018481106001600160401b03821117610d895760405260a08a01358085529760c08b01948535926001600160e01b031984168403610d85576020820193845281608084015260e08d013591821515808403610d8557610b25958560549560a060359801525198519351975192519063ffffffff60e01b905116906020604051998a968288019c8d526001600160601b03199060601b1660408801528051918291018888015e8501936001600160801b03199060801b16868501526064840152608483015260f81b6088820152030160158101845201826112a6565b51902060e0516080510152602060e05101968760e05111610d715760019760e05285155f14610b625750505050610b5c9150611791565b01610971565b60e0610b7391959293949501611299565b15610cd9575f9081906001600160f81b0319610b8e8561177c565b831a60f81b16156060908314610c6f5750610baf610bb69160c0519061174a565b3691611518565b610bbf86611271565b6001600160801b03610bd087611285565b16602083519301916207a120f1610be56112e2565b5015610bf5575b50505050610b5c565b610c3c604092610c37610c287f5136ea80de584762b9532903198dfdd1125167a8685e943b1bc5d16b777151c396611271565b610c3183611285565b906116b4565b611285565b906001600160e01b031990610c509061177c565b16936001600160801b038351921682526020820152a25f808080610bec565b90610cd490610cb7610c8360c0518361174a565b9190610c8e8961177c565b92604051968795634a646c7f60e01b602088015235602487015260448601526084850191611311565b9063ffffffff60e01b16606483015203601f1981018352826112a6565b610bb6565b90610d20610d2892610d17610d0e7fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c697611271565b610c3187611285565b60c0519061174a565b929093611285565b906001600160e01b031990610d3c9061177c565b16946001600160801b03610d5d604051958695606087526060870191611311565b9216602084015260408301520390a2610b5c565b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b5086608051209360c484013590811215610d85578301916004830135936001600160401b038511610d85576060850236036024850113610d85576060955f5b86811015610f2d576004606082028701016060601f198236030112610d855760405190606082018281106001600160401b03821117610d8957604052602081013591828152604082019a610e2f8c61125d565b9283602084015260600192610e4384611249565b6040819401526040519260208401918683526001600160601b03199060601b1660408501526001600160801b03199060801b16605484015260448352610e8a6064846112a6565b60405192828493516020819201602086015e83019060208201905f8252519283915e016020015f815203601f1981018252610ec590826112a6565b99610ecf90611271565b610ed882611285565b610ee1916116b4565b610eea90611285565b604080519283526001600160801b039190911660208301527fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578391a1600101610ddc565b50865160208801206044830193610f4385611299565b156110a057506020946001610f5a60648601611271565b610f6261154e565b600280546001600160a81b031916600892831b60ff1960a886901b011617909217918290555f9591610fa991476001600160801b031691901c6001600160a01b03166116b4565b84546024820135958680920361106f575b5050610fd1610fcb82600401611271565b96611299565b91610ff360a4610fec610fe660648601611271565b93611285565b9301611299565b9260405196898801986001600160601b03199060601b1689526034880152151560f81b60548701526001600160601b03199060601b1660558601526001600160801b03199060801b166069850152151560f81b6079840152607a830152609a820152609a815261106460ba826112a6565b519020604051908152f35b557f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c08093087604051878152a18488610fba565b92946001600160a01b036110b660648801611271565b166110c357602095610fa9565b60405162461bcd60e51b8152602060048201526024808201527f696e68657269746f72206d757374206265207a65726f206966206e6f742065786044820152631a5d195960e21b6064820152608490fd5b5f8080806001600160801b0361112989611285565b167f00000000000000000000000000000000000000000000000000000000000000005af16111556112e2565b506109005760405162461bcd60e51b815260206004820152603a60248201527f6661696c656420746f207472616e736665722076616c756520746f20726f757460448201527f657220647572696e67207374617465207472616e736974696f6e0000000000006064820152608490fd5b506111d260a48401611299565b6108fb565b60405162461bcd60e51b815260206004820152601d60248201527f6163746f724964206d757374206265207468697320636f6e74726163740000006044820152606490fd5b9181601f84011215610d85578235916001600160401b038311610d855760208381860195010111610d8557565b35906001600160801b0382168203610d8557565b35906001600160a01b0382168203610d8557565b356001600160a01b0381168103610d855790565b356001600160801b0381168103610d855790565b358015158103610d855790565b90601f801991011681019081106001600160401b03821117610d8957604052565b6001600160401b038111610d8957601f01601f191660200190565b3d1561130c573d906112f3826112c7565b9161130160405193846112a6565b82523d5f602084013e565b606090565b908060209392818452848401375f828201840152601f01601f1916010190565b92604092611358916001600160801b03939796978652606060208701526060860191611311565b9416910152565b34151580611499575b6114645760ff60035460a01c16610d855760243610610d855761138961154e565b60015415801590611450575b156107c5576001600160801b0334166113ad816115f6565b6001545f198114610d71576001810160015560405160208101913060601b83526034820152603481526113e16054826112a6565b519020907f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c5460405183815260806020820152602060808201368152365f838301375f823683010152601f19601f3601160101926040820152600435151560608201528033930390a25f5260205ff35b506003546001600160a01b03163314611395565b7f134041dec9803c024e94a2479679395a15b6ae0034c4d424ab47712aa182620660206040516001600160801b0334168152a1565b503615611368565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036114d357565b60405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f742074686520726f7574657200000000000000006044820152606490fd5b929192611524826112c7565b9161153260405193846112a6565b829481845281830111610d85578281602093845f960137010152565b60ff6002541661155a57565b60405162461bcd60e51b81526020600482015260116024820152701c1c9bd9dc985b481a5cc8195e1a5d1959607a1b6044820152606490fd5b6001541561159d57565b60405162461bcd60e51b815260206004820152602b60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201526a1b595cdcd859d9481e595d60aa1b6064820152608490fd5b6001600160801b0316806116075750565b5f808080937f00000000000000000000000000000000000000000000000000000000000000005af16116376112e2565b501561163f57565b60405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662045746865722066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b906001600160801b031690816116c8575050565b5f80809381935af16116d86112e2565b50156116e057565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207472616e7366657220457468657200000000000000006044820152606490fd5b6040519190601f01601f191682016001600160401b03811183821017610d8557604052565b903590601e1981360301821215610d8557018035906001600160401b038211610d8557602001918136038313610d8557565b356001600160e01b031981168103610d855790565b61179a816118c7565b156117a25750565b6117ae60c08201611299565b61181b575b7f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117736118166117e360208401611271565b6117f0604085018561174a565b6117ff60608795939501611285565b9060405194859460018060a01b0316973585611331565b0390a2565b602081015f8061182a83611271565b81611838604087018761174a565b9190826040519384928337810182815203926207a120f16118576112e2565b501561186357506117b3565b61188d7f76c87872723521658a1c429bc5e355c5ad7b30719dae90158fe2b591f9ea56f891611271565b61189960608401611285565b60408051943585526001600160801b0390911660208501526001600160a01b03909116929081908101611816565b6118d4604082018261174a565b90916001600160a01b03806118eb60208401611271565b16149081611b8d575b5080611b84575b15611b7e5781358060f81c90600182101580611b73575b15611b6b5760f31c611fe016600181018310611b6b576001840135927f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c08093084141580611b41575b80611b17575b80611aed575b80611ac3575b80611a99575b80611a6f575b80611a45575b80611a1b575b15611a12578190035f19019182600161199a82611725565b938701018337602185013594604181013591600181036119c15750505090919250a1600190565b600281036119d257505050a2600190565b600381979593969497145f146119ee57505090919293a3600190565b600414611a01575b505050505050600190565b6061013594a45f80808080806119f6565b50505050505f90565b507fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783841415611982565b507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c684141561197c565b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f8011773841415611976565b507f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667841415611970565b507f134041dec9803c024e94a2479679395a15b6ae0034c4d424ab47712aa182620684141561196a565b507f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c4978841415611964565b507fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f84141561195e565b507f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c54841415611958565b505050505f90565b506004821115611912565b50505f90565b508015156118fb565b6001600160801b0391506060611ba39101611285565b16155f6118f456","sourceMap":"576:17620:153:-:0;;;;;;;;;;;;;-1:-1:-1;;576:17620:153;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;1938:16;;576:17620;;;;;;;;1938:16;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;576:17620:153;;;;;;-1:-1:-1;576:17620:153;;;;;-1:-1:-1;576:17620:153","linkReferences":{}},"deployedBytecode":{"object":"0x6101006040526004361015610019575b61001761135f565b005b5f5f3560e01c8063084f443a1461088857806336a52a181461085b57806342129d00146106b85780635ce6c32714610695578063701da98e14610678578063704ed5421461047f5780637a8e0cdd146103f157806391d5a64c1461039e5780639ce110d714610375578063affed0e014610357578063e43f3433146102da578063e4bbb5a8146100fa5763f887ea40146100b3575061000f565b346100f757806003193601126100f7576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b50346100f75760603660031901126100f7576004356001600160a01b038116908190036102d6576024356001600160a01b03811691908290036102d257604435908115158092036102ce5761014d6114a1565b600354906001600160a01b03821661027e5760ff8260a01c16610239577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54926001600160a01b0384166101e8576001600160a81b03199092161760a09190911b60ff60a01b16176003556001600160a01b031916177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5580f35b60405162461bcd60e51b8152602060048201526024808201527f61626920696e7465726661636520636f756c64206f6e6c7920626520736574206044820152636f6e636560e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f6973536d616c6c20636f756c64206f6e6c7920626520736574206f6e636500006044820152606490fd5b60405162461bcd60e51b815260206004820152602260248201527f696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e604482015261636560f01b6064820152608490fd5b8380fd5b8280fd5b5080fd5b50346100f757806003193601126100f75760025460ff81161561031a5761031790476001600160801b03169060081c6001600160a01b03166116b4565b80f35b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81b9bdd08195e1a5d1959605a1b6044820152606490fd5b50346100f757806003193601126100f7576020600154604051908152f35b50346100f757806003193601126100f7576003546040516001600160a01b039091168152602090f35b50346100f75760203660031901126100f7576103b861154e565b6103c0611593565b60405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203392a280f35b5060403660031901126100f7576024356001600160401b0381116102d65761043e7fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f91369060040161121c565b61044992919261154e565b610451611593565b6001600160801b03341690610465826115f6565b610479604051928392339660043585611331565b0390a280f35b50346100f75760203660031901126100f7576004356001600160801b0381168091036102d6576104ad61154e565b806104e1575b60207f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666791604051908152a180f35b60405163088f50cf60e41b815282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa908115610628578391610633575b50606460209260405194859384926323b872dd60e01b8452336004850152602484015287604484015260018060a01b03165af19081156106285783916105ed575b506104b35760405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662057566172612066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b90506020813d602011610620575b81610608602093836112a6565b810103126102d2575180151581036102d2575f610573565b3d91506105fb565b6040513d85823e3d90fd5b90506020813d602011610670575b8161064e602093836112a6565b810103126102d25751906001600160a01b03821682036102d257906064610532565b3d9150610641565b50346100f757806003193601126100f75760209054604051908152f35b50346100f757806003193601126100f757602060ff600254166040519015158152f35b5060403660031901126100f7576004356001600160401b0381116102d6576106e490369060040161121c565b916024358015158091036102d6576106fa61154e565b60015415801590610847575b156107c5576001600160801b0334169161071f836115f6565b600154905f1982146107b15750937f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c549161079886600160209801600155604051888101913060601b835260348201526034815261077d6054826112a6565b51902095604051938785526080898601526080850191611311565b93604083015260608201528033930390a2604051908152f35b634e487b7160e01b81526011600452602490fd5b60405162461bcd60e51b815260206004820152604e60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201527f6d657373616765207965743b20616e642063616c6c6572206973206e6f74207460648201526d34329034b734ba34b0b634bd32b960911b608482015260a490fd5b506003546001600160a01b03163314610706565b50346100f757806003193601126100f75760025460405160089190911c6001600160a01b03168152602090f35b506020366003190112610d85576004356001600160401b038111610d855780360391610100600319840112610d85576108bf6114a1565b6108cb82600401611271565b306001600160a01b03909116036111d75760848201926001600160801b036108f285611285565b161515806111c5575b611114575b6022190160e483013581811215610d8557830192600484013560a0526001600160401b0360a05111610d855760a05160051b928336036024860113610d855760a051840460201460a051151715610d715761095c849694611725565b6080525f60e081905261010219368790030194905b60a051811015610d9d576024600582901b8801013586811215610d85576004908801019060208201601f19833603019060e08212610d85576040519160c083018381106001600160401b03821117610d89576040528135835260408501906109d88261125d565b602085019081526060870160c05260c051356001600160401b038111610d855760209088010136601f82011215610d8557610a1a903690602081359101611518565b906040860191825260808801926040610a3285611249565b6060890190815291607f190112610d855760405192604084018481106001600160401b03821117610d895760405260a08a01358085529760c08b01948535926001600160e01b031984168403610d85576020820193845281608084015260e08d013591821515808403610d8557610b25958560549560a060359801525198519351975192519063ffffffff60e01b905116906020604051998a968288019c8d526001600160601b03199060601b1660408801528051918291018888015e8501936001600160801b03199060801b16868501526064840152608483015260f81b6088820152030160158101845201826112a6565b51902060e0516080510152602060e05101968760e05111610d715760019760e05285155f14610b625750505050610b5c9150611791565b01610971565b60e0610b7391959293949501611299565b15610cd9575f9081906001600160f81b0319610b8e8561177c565b831a60f81b16156060908314610c6f5750610baf610bb69160c0519061174a565b3691611518565b610bbf86611271565b6001600160801b03610bd087611285565b16602083519301916207a120f1610be56112e2565b5015610bf5575b50505050610b5c565b610c3c604092610c37610c287f5136ea80de584762b9532903198dfdd1125167a8685e943b1bc5d16b777151c396611271565b610c3183611285565b906116b4565b611285565b906001600160e01b031990610c509061177c565b16936001600160801b038351921682526020820152a25f808080610bec565b90610cd490610cb7610c8360c0518361174a565b9190610c8e8961177c565b92604051968795634a646c7f60e01b602088015235602487015260448601526084850191611311565b9063ffffffff60e01b16606483015203601f1981018352826112a6565b610bb6565b90610d20610d2892610d17610d0e7fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c697611271565b610c3187611285565b60c0519061174a565b929093611285565b906001600160e01b031990610d3c9061177c565b16946001600160801b03610d5d604051958695606087526060870191611311565b9216602084015260408301520390a2610b5c565b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b5086608051209360c484013590811215610d85578301916004830135936001600160401b038511610d85576060850236036024850113610d85576060955f5b86811015610f2d576004606082028701016060601f198236030112610d855760405190606082018281106001600160401b03821117610d8957604052602081013591828152604082019a610e2f8c61125d565b9283602084015260600192610e4384611249565b6040819401526040519260208401918683526001600160601b03199060601b1660408501526001600160801b03199060801b16605484015260448352610e8a6064846112a6565b60405192828493516020819201602086015e83019060208201905f8252519283915e016020015f815203601f1981018252610ec590826112a6565b99610ecf90611271565b610ed882611285565b610ee1916116b4565b610eea90611285565b604080519283526001600160801b039190911660208301527fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578391a1600101610ddc565b50865160208801206044830193610f4385611299565b156110a057506020946001610f5a60648601611271565b610f6261154e565b600280546001600160a81b031916600892831b60ff1960a886901b011617909217918290555f9591610fa991476001600160801b031691901c6001600160a01b03166116b4565b84546024820135958680920361106f575b5050610fd1610fcb82600401611271565b96611299565b91610ff360a4610fec610fe660648601611271565b93611285565b9301611299565b9260405196898801986001600160601b03199060601b1689526034880152151560f81b60548701526001600160601b03199060601b1660558601526001600160801b03199060801b166069850152151560f81b6079840152607a830152609a820152609a815261106460ba826112a6565b519020604051908152f35b557f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c08093087604051878152a18488610fba565b92946001600160a01b036110b660648801611271565b166110c357602095610fa9565b60405162461bcd60e51b8152602060048201526024808201527f696e68657269746f72206d757374206265207a65726f206966206e6f742065786044820152631a5d195960e21b6064820152608490fd5b5f8080806001600160801b0361112989611285565b167f00000000000000000000000000000000000000000000000000000000000000005af16111556112e2565b506109005760405162461bcd60e51b815260206004820152603a60248201527f6661696c656420746f207472616e736665722076616c756520746f20726f757460448201527f657220647572696e67207374617465207472616e736974696f6e0000000000006064820152608490fd5b506111d260a48401611299565b6108fb565b60405162461bcd60e51b815260206004820152601d60248201527f6163746f724964206d757374206265207468697320636f6e74726163740000006044820152606490fd5b9181601f84011215610d85578235916001600160401b038311610d855760208381860195010111610d8557565b35906001600160801b0382168203610d8557565b35906001600160a01b0382168203610d8557565b356001600160a01b0381168103610d855790565b356001600160801b0381168103610d855790565b358015158103610d855790565b90601f801991011681019081106001600160401b03821117610d8957604052565b6001600160401b038111610d8957601f01601f191660200190565b3d1561130c573d906112f3826112c7565b9161130160405193846112a6565b82523d5f602084013e565b606090565b908060209392818452848401375f828201840152601f01601f1916010190565b92604092611358916001600160801b03939796978652606060208701526060860191611311565b9416910152565b34151580611499575b6114645760ff60035460a01c16610d855760243610610d855761138961154e565b60015415801590611450575b156107c5576001600160801b0334166113ad816115f6565b6001545f198114610d71576001810160015560405160208101913060601b83526034820152603481526113e16054826112a6565b519020907f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c5460405183815260806020820152602060808201368152365f838301375f823683010152601f19601f3601160101926040820152600435151560608201528033930390a25f5260205ff35b506003546001600160a01b03163314611395565b7f134041dec9803c024e94a2479679395a15b6ae0034c4d424ab47712aa182620660206040516001600160801b0334168152a1565b503615611368565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036114d357565b60405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f742074686520726f7574657200000000000000006044820152606490fd5b929192611524826112c7565b9161153260405193846112a6565b829481845281830111610d85578281602093845f960137010152565b60ff6002541661155a57565b60405162461bcd60e51b81526020600482015260116024820152701c1c9bd9dc985b481a5cc8195e1a5d1959607a1b6044820152606490fd5b6001541561159d57565b60405162461bcd60e51b815260206004820152602b60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201526a1b595cdcd859d9481e595d60aa1b6064820152608490fd5b6001600160801b0316806116075750565b5f808080937f00000000000000000000000000000000000000000000000000000000000000005af16116376112e2565b501561163f57565b60405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662045746865722066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b906001600160801b031690816116c8575050565b5f80809381935af16116d86112e2565b50156116e057565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207472616e7366657220457468657200000000000000006044820152606490fd5b6040519190601f01601f191682016001600160401b03811183821017610d8557604052565b903590601e1981360301821215610d8557018035906001600160401b038211610d8557602001918136038313610d8557565b356001600160e01b031981168103610d855790565b61179a816118c7565b156117a25750565b6117ae60c08201611299565b61181b575b7f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117736118166117e360208401611271565b6117f0604085018561174a565b6117ff60608795939501611285565b9060405194859460018060a01b0316973585611331565b0390a2565b602081015f8061182a83611271565b81611838604087018761174a565b9190826040519384928337810182815203926207a120f16118576112e2565b501561186357506117b3565b61188d7f76c87872723521658a1c429bc5e355c5ad7b30719dae90158fe2b591f9ea56f891611271565b61189960608401611285565b60408051943585526001600160801b0390911660208501526001600160a01b03909116929081908101611816565b6118d4604082018261174a565b90916001600160a01b03806118eb60208401611271565b16149081611b8d575b5080611b84575b15611b7e5781358060f81c90600182101580611b73575b15611b6b5760f31c611fe016600181018310611b6b576001840135927f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c08093084141580611b41575b80611b17575b80611aed575b80611ac3575b80611a99575b80611a6f575b80611a45575b80611a1b575b15611a12578190035f19019182600161199a82611725565b938701018337602185013594604181013591600181036119c15750505090919250a1600190565b600281036119d257505050a2600190565b600381979593969497145f146119ee57505090919293a3600190565b600414611a01575b505050505050600190565b6061013594a45f80808080806119f6565b50505050505f90565b507fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783841415611982565b507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c684141561197c565b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f8011773841415611976565b507f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667841415611970565b507f134041dec9803c024e94a2479679395a15b6ae0034c4d424ab47712aa182620684141561196a565b507f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c4978841415611964565b507fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f84141561195e565b507f9d835932f9695ed8acd7290fb99476799c321b20b15a597a99b597bdfb907c54841415611958565b505050505f90565b506004821115611912565b50505f90565b508015156118fb565b6001600160801b0391506060611ba39101611285565b16155f6118f456","sourceMap":"576:17620:153:-:0;;;;;;;;;-1:-1:-1;576:17620:153;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1026:31;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;3421:63;;:::i;:::-;5831:11;576:17620;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;811:66:51;576:17620:153;;-1:-1:-1;;;;;576:17620:153;;811:66:51;;-1:-1:-1;;;;;;811:66:51;;;;;;;;;-1:-1:-1;;;811:66:51;;5831:11:153;811:66:51;-1:-1:-1;;;;;;811:66:51;;;;576:17620:153;;811:66:51;576:17620:153;;-1:-1:-1;;;811:66:51;;576:17620:153;;811:66:51;;;576:17620:153;811:66:51;;;576:17620:153;811:66:51;576:17620:153;;;811:66:51;-1:-1:-1;;;811:66:51;;;;;;;576:17620:153;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3293:6;576:17620;;;;;;;5633:16;;5426:21;-1:-1:-1;;;;;576:17620:153;;;;-1:-1:-1;;;;;576:17620:153;5633:16;:::i;:::-;576:17620;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;1328:20;576:17620;;;;;;;;;;;;;;;;;;;;1671:26;576:17620;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;-1:-1:-1;;576:17620:153;;;;2901:67;;:::i;:::-;2080:83;;:::i;:::-;576:17620;;;;;;5117:46;576:17620;5152:10;5117:46;;576:17620;;;-1:-1:-1;576:17620:153;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;4875:64;576:17620;;;;;;:::i;:::-;2901:67;;;;;:::i;:::-;2080:83;;:::i;:::-;-1:-1:-1;;;;;4814:9:153;576:17620;4852:6;;;;:::i;:::-;4875:64;576:17620;;4910:10;;;;576:17620;;;4875:64;;:::i;:::-;;;;576:17620;;;;;;;;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;2901:67;;:::i;:::-;3880:10;3876:209;;576:17620;;5284:39;576:17620;;;;;;5284:39;576:17620;;3876:209;576:17620;;-1:-1:-1;;;16930:33:153;;576:17620;;3928:6;-1:-1:-1;;;;;576:17620:153;;;;;;;16930:33;;;;;;;;;;;3876:209;576:17620;3921:54;576:17620;;;;;;;;;;;;3921:54;;3949:10;576:17620;3921:54;;576:17620;;;;;;;;;;;;;;;;3921:54;;;;;;;;;;;3876:209;576:17620;3876:209;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;3921:54;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;3921:54;;;576:17620;3921:54;;576:17620;3921:54;;;;;;576:17620;3921:54;;;:::i;:::-;;;576:17620;;;;;;;;;;;;3921:54;;;;;;-1:-1:-1;3921:54:153;;;576:17620;;;;;;;;;16930:33;;;576:17620;16930:33;;576:17620;16930:33;;;;;;576:17620;16930:33;;;:::i;:::-;;;576:17620;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;16930:33;3921:54;16930:33;;;;;-1:-1:-1;16930:33:153;;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1423:18;576:17620;;;;;;;;;;;-1:-1:-1;576:17620:153;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;2901:67;;:::i;:::-;2656:5;576:17620;2656:9;;;:38;;;576:17620;;;;-1:-1:-1;;;;;8288:9:153;576:17620;8326:6;;;;:::i;:::-;2656:5;576:17620;;-1:-1:-1;;576:17620:153;;;;;;8424:70;576:17620;;;2656:5;576:17620;;;2656:5;576:17620;;;8367:40;;;8392:4;;576:17620;;;;;;;;;8367:40;;;;;;:::i;:::-;576:17620;8357:51;;576:17620;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8453:10;;8424:70;;;;576:17620;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;2656:38;-1:-1:-1;2683:11:153;576:17620;-1:-1:-1;;;;;576:17620:153;2669:10;:25;2656:38;;576:17620;;;;;;;;;;;;;1576:24;576:17620;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;-1:-1:-1;576:17620:153;;-1:-1:-1;;576:17620:153;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;3421:63;;:::i;:::-;6564:19;576:17620;;;6564:19;:::i;:::-;6595:4;-1:-1:-1;;;;;576:17620:153;;;6564:36;576:17620;;6744:26;;;;-1:-1:-1;;;;;6744:26:153;;;:::i;:::-;576:17620;6744:31;;:73;;;576:17620;6740:264;;576:17620;-1:-1:-1;;576:17620:153;7102:20;;;576:17620;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9018:34;;;;;:::i;:::-;;;576:17620;9063:18;;;;-1:-1:-1;;576:17620:153;;;;;;;9121:3;9112:7;;;;;;;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;6744:26;576:17620;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;576:17620:153;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;576:17620:153;;;;;;;;;;;;;6744:26;576:17620;;;;;;;;;;;;;;;;8835:273:161;576:17620:153;;;;;;;;;;;;8934:15:161;;576:17620:153;;;;;;;;;;;;;;;8835:273:161;;;;;;576:17620:153;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;6744:26;576:17620;;;;;;;;;;6744:26;576:17620;;;;;;;;;8835:273:161;;;;;;;;;;:::i;:::-;576:17620:153;8812:306:161;;3266:83:22;;;;;;576:17620:153;;;;;;;;;;;;9429:12;;;9492:28;;9488:162;9492:28;;;9562:7;;;;;;;;:::i;:::-;576:17620;9097:13;;9488:162;576:17620;14395:13;576:17620;;;;;;;14395:13;:::i;:::-;576:17620;;;;;;;-1:-1:-1;;;;;;14446:26:153;;;:::i;:::-;:29;;576:17620;;;14446:34;576:17620;14530:433;;;;;14578:16;;576:17620;14578:16;;;;;:::i;:::-;576:17620;;;:::i;:::-;14995:20;;;:::i;:::-;-1:-1:-1;;;;;15042:14:153;;;:::i;:::-;576:17620;;14995:71;;;;;15026:7;14995:71;;;:::i;:::-;;15085:8;15081:309;;14530:433;14391:1205;;;;9488:162;;15081:309;15306:14;576:17620;15128:20;15150:14;15128:20;15290:85;15128:20;;:::i;:::-;15150:14;;;:::i;:::-;;;:::i;:::-;15306;:::i;:::-;576:17620;-1:-1:-1;;;;;;576:17620:153;15348:26;;;:::i;:::-;576:17620;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;15290:85;15081:309;;;;;;14530:433;14886:16;14795:153;14886:16;576:17620;14886:16;;;;;:::i;:::-;14904:26;;;;;:::i;:::-;576:17620;;;14839:32;;;;;;576:17620;14795:153;;;576:17620;14795:153;;;576:17620;;;;;6744:26;576:17620;;;;:::i;:::-;;;;;;;;;;14795:153;576:17620;;14795:153;;;;;;:::i;:::-;14530:433;;14391:1205;15435:20;15498:16;15516:14;15435:20;15457:14;15435:20;15492:93;15435:20;;:::i;:::-;15457:14;;;:::i;:::-;15498:16;;;;:::i;:::-;15516:14;;;;:::i;:::-;576:17620;-1:-1:-1;;;;;;576:17620:153;15558:26;;;:::i;:::-;576:17620;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;15492:93;;;9488:162;;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;;;9112:7;;;531:131:25;;;7217:23:153;;;;576:17620;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;15844:13;576:17620;15879:3;15859:18;;;;;;576:17620;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;16972:65:161;576:17620:153;16972:65:161;;576:17620:153;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;6744:26;576:17620;;;;;;;16972:65:161;;;;;;:::i;:::-;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16064:17;;;;:::i;:::-;16083:11;;;:::i;:::-;;;;:::i;:::-;16145;;;:::i;:::-;576:17620;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;16115:42;;;576:17620;;15844:13;;15859:18;-1:-1:-1;576:17620:153;;;;;16185:27;576:17620;7298:18;;;;;;:::i;:::-;;;;7346:21;576:17620;7346:21;576:17620;7346:21;16972:65:161;7346:21:153;;;:::i;:::-;2901:67;;:::i;:::-;16386:13;576:17620;;-1:-1:-1;;;;;;576:17620:153;;;;;-1:-1:-1;;576:17620:153;;;;;;;;;;;;;;-1:-1:-1;;576:17620:153;5633:16;;5426:21;-1:-1:-1;;;;;576:17620:153;;;;-1:-1:-1;;;;;576:17620:153;5633:16;:::i;:::-;576:17620;;7572:24;;;576:17620;7559:37;;;;;7555:110;;7294:200;576:17620;;7851:18;7780:19;576:17620;;;7780:19;:::i;:::-;7851:18;;:::i;:::-;7883:21;7958:38;;7918:26;7883:21;16972:65:161;7883:21:153;;;:::i;:::-;7918:26;;:::i;:::-;7958:38;;;:::i;:::-;576:17620;;;9683:279:161;;;;576:17620:153;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;6744:26;576:17620;;;;;;;;;;;;;;;;;;;;;;;9683:279:161;;;;;;:::i;:::-;576:17620:153;9660:312:161;;576:17620:153;;;;;;7555:110;576:17620;16758:23;576:17620;;;;;;16758:23;7555:110;;;;7294:200;576:17620;;-1:-1:-1;;;;;7407:21:153;16972:65:161;7407:21:153;;;:::i;:::-;576:17620;;;;7294:200;;;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;-1:-1:-1;;;16972:65:161;576:17620:153;;;6744:26;;576:17620;6740:264;576:17620;6870:26;;;-1:-1:-1;;;;;6870:26:153;;;:::i;:::-;576:17620;6851:6;:50;;;;:::i;:::-;;6740:264;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;6744:26;;576:17620;6744:73;6779:38;;;;;;:::i;:::-;6744:73;;576:17620;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;576:17620:153;;;;;;:::o;:::-;;;-1:-1:-1;;;;;576:17620:153;;;;;;:::o;:::-;;-1:-1:-1;;;;;576:17620:153;;;;;;;:::o;:::-;;-1:-1:-1;;;;;576:17620:153;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;:::o;:::-;-1:-1:-1;;;;;576:17620:153;;;;;;-1:-1:-1;;576:17620:153;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;576:17620:153;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;576:17620:153;;;;;;;;-1:-1:-1;;576:17620:153;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;17257:937::-;17299:9;:13;;:37;;;17257:937;17295:176;;576:17620;17630:7;576:17620;;;;;;17882:4;17863:8;:23;576:17620;;2901:67;;:::i;:::-;2656:5;576:17620;2656:9;;;:38;;;17257:937;576:17620;;;-1:-1:-1;;;;;17299:9:153;576:17620;8326:6;;;:::i;:::-;2656:5;576:17620;-1:-1:-1;;576:17620:153;;;;2656:5;576:17620;;2656:5;576:17620;;;8367:40;;;8392:4;;576:17620;;;;;;;;;8367:40;;;;;;:::i;:::-;576:17620;8357:51;;576:17620;8424:70;576:17620;;;;;;8367:40;576:17620;;;;;;;17863:8;576:17620;;17863:8;17311:1;576:17620;;;;17311:1;17863:8;;576:17620;;;;;;;17863:8;576:17620;;;;;;;;;17926:80;;18059:14;;576:17620;;;;8453:10;;8424:70;;;;17311:1;18085:103;8367:40;17311:1;18085:103;2656:38;-1:-1:-1;17630:7:153;576:17620;-1:-1:-1;;;;;576:17620:153;2669:10;:25;2656:38;;17295:176;17406:33;576:17620;;;-1:-1:-1;;;;;17299:9:153;576:17620;;;17406:33;17454:7::o;17299:37::-;17316:8;;:20;17299:37;;3490:111;3559:6;-1:-1:-1;;;;;576:17620:153;3545:10;:20;576:17620;;3490:111::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;576:17620:153;;;;;;:::o;2974:93::-;576:17620;3032:6;576:17620;;;;2974:93::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;2169:129;2234:5;576:17620;2234:9;576:17620;;2169:129::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;4213:253;-1:-1:-1;;;;;576:17620:153;4277:10;4273:187;;4213:253;:::o;4273:187::-;4286:1;4321:6;;;;;:29;;;;:::i;:::-;;576:17620;;;4213:253::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;576:17620:153;;;;;;;17016:235;;-1:-1:-1;;;;;576:17620:153;17098:10;;17094:151;;17016:235;;:::o;17094:151::-;17107:1;17142:34;;;;;;;;;:::i;:::-;;576:17620;;;17016:235::o;576:17620::-;;;-1:-1:-1;;;576:17620:153;;;;;;;;;;;;;;;;;;;;863:809:22;1052:614;;;863:809;1052:614;;-1:-1:-1;;1052:614:22;;;-1:-1:-1;;;;;1052:614:22;;;;;;;;;;863:809::o;576:17620:153:-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;;;;;576:17620:153;;;;;;;:::o;9821:657::-;9907:36;;;:::i;:::-;9906:37;9902:570;;9821:657;:::o;9902:570::-;9963:13;;;;;:::i;:::-;9959:407;;9902:570;10385:76;;10406:20;;;;;:::i;:::-;10428:16;;;;;;:::i;:::-;10446:14;;;;;;;;:::i;:::-;576:17620;10428:16;576:17620;;;;;;;;;;;;10385:76;;:::i;:::-;;;;9821:657::o;9959:407::-;10014:20;;;-1:-1:-1;10014:20:153;;;;:::i;:::-;10054:16;;;;;;;:::i;:::-;576:17620;;;10054:16;576:17620;;;;;;;;;;;10014:57;;10045:7;10014:57;;;:::i;:::-;;10094:8;10090:262;;9959:407;;;10090:262;10267:20;10236:68;10267:20;;:::i;:::-;10289:14;;;;;:::i;:::-;10054:16;576:17620;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;-1:-1:-1;;;;;576:17620:153;;;;;;;;;10236:68;576:17620;10598:3641;10724:16;;;;;;:::i;:::-;576:17620;;-1:-1:-1;;;;;576:17620:153;11319:20;;;;;:::i;:::-;576:17620;11319:38;:61;;;;10598:3641;11319:83;;;;10598:3641;11317:86;11313:129;;11482:212;;;;;11710:17;11726:1;11710:17;;;:38;;;10598:3641;11708:41;11704:84;;833:42;;;;11726:1;833:42;;11929:37;;11923:83;;11726:1;12096:95;;;12447:31;12457:21;12447:31;;;:78;;;10598:3641;12447:143;;;10598:3641;12447:188;;;10598:3641;12447:257;;;10598:3641;12447:331;;;10598:3641;12447:361;;;10598:3641;12447:409;;;10598:3641;12447:444;;;10598:3641;12445:447;12441:490;;833:42;;;-1:-1:-1;;833:42:153;;;11726:1;13068:21;833:42;13068:21;:::i;:::-;13099:117;;;;;;13399:216;;;;;;;;;;11726:1;13629:17;;11726:1;;13662:83;;;;;;;;11726:1;10598:3641;:::o;13625:586::-;13781:1;13765:17;;13781:1;;13798:91;;;;11726:1;10598:3641;:::o;13761:450::-;13925:1;13909:17;;;;;;;;13905:306;13925:1;;;13942:99;;;;;;;11726:1;10598:3641;:::o;13905:306::-;14077:1;14061:17;14057:154;;13905:306;;;;;;;11726:1;10598:3641;:::o;14057:154::-;13399:216;;;14094:107;;14057:154;;;;;;;;12441:490;12908:12;;;;;576:17620;12908:12;:::o;12447:444::-;12860:31;12870:21;12860:31;;;12447:444;;:409;12832:24;12842:14;12832:24;;;12447:409;;:361;12782:26;12792:16;12782:26;;;12447:361;;:331;12728:50;12738:40;12728:50;;;12447:331;;:257;12659:45;12669:35;12659:45;;;12447:257;;:188;12594:41;12604:31;12594:41;;;12447:188;;:143;12549:41;12559:31;12549:41;;;12447:143;;:78;12482:43;12492:33;12482:43;;;12447:78;;11923:83;11983:12;;;;576:17620;11983:12;:::o;11710:38::-;11731:17;11747:1;11731:17;;;11710:38;;11313:129;11419:12;;576:17620;11419:12;:::o;11319:83::-;11384:18;;;;11319:83;;:61;-1:-1:-1;;;;;11361:14:153;;;;;;;:::i;:::-;576:17620;11361:19;11319:61;;","linkReferences":{},"immutableReferences":{"75081":[{"start":200,"length":32},{"start":1266,"length":32},{"start":4396,"length":32},{"start":5283,"length":32},{"start":5646,"length":32}]}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","executableBalanceTopUp(uint128)":"704ed542","exited()":"5ce6c327","inheritor()":"36a52a18","initialize(address,address,bool)":"e4bbb5a8","initializer()":"9ce110d7","nonce()":"affed0e0","performStateTransition((address,bytes32,bool,address,uint128,bool,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4),bool)[]))":"084f443a","router()":"f887ea40","sendMessage(bytes,bool)":"42129d00","sendReply(bytes32,bytes)":"7a8e0cdd","stateHash()":"701da98e","transferLockedValueToInheritor()":"e43f3433"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageCallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"callReply\",\"type\":\"bool\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"OwnedBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"ReplyCallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exited\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inheritor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initializer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_abiInterface\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isSmall\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"exited\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"inheritor\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"valueToReceiveNegativeSign\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct Gear.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"call\",\"type\":\"bool\"}],\"internalType\":\"struct Gear.Message[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.StateTransition\",\"name\":\"_transition\",\"type\":\"tuple\"}],\"name\":\"performStateTransition\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_callReply\",\"type\":\"bool\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferLockedValueToInheritor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageCallFailed(bytes32,address,uint128)\":{\"details\":\"Emitted when the program fails to call outgoing message to other contracts. NOTE: It's event for USERS: it informs about failed message call from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128,bool)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"OwnedBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's owned balance top up with his Ether. NOTE: It's event for NODES: it requires to top up balance of the program (in Ether).\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyCallFailed(uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program fails to call reply message to other contracts. NOTE: It's event for USERS: it informs about failed reply call from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Minimal constructor that only sets the immutable router address.\"}},\"stateVariables\":{\"ETH_EVENT_ADDR\":{\"details\":\"Special address to which Sails contract sends messages so that Mirror can decode events: https://github.com/gear-tech/sails/blob/master/rs/src/solidity.rs\"},\"exited\":{\"details\":\"The bool flag indicates whether the program is exited.\"},\"inheritor\":{\"details\":\"The address of the inheritor, which is set by the program on exit.\"},\"initializer\":{\"details\":\"The address eligible to send first (init) message.\"},\"isSmall\":{\"details\":\"The bool flag indicates whether to process arbitrary calls as `sendMessage` payload.\"},\"nonce\":{\"details\":\"Source for message ids unique generation. In-fact represents amount of messages received from Ethereum. Zeroed nonce is always represent init message.\"},\"router\":{\"details\":\"Address of the router contract, which is the sole authority.\"},\"stateHash\":{\"details\":\"Program's current state hash.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"router()\":{\"notice\":\"forge-lint: disable-next-item(screaming-snake-case-immutable)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@symbioticfi/core/=lib/symbiotic-rewards/lib/core/\",\":core/=lib/symbiotic-rewards/lib/core/\",\":ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":script/=script/\",\":src/=src/\",\":symbiotic-core/=lib/symbiotic-core/\",\":symbiotic-rewards/=lib/symbiotic-rewards/\",\":test/=test/\"],\"viaIR\":true},\"sources\":{\"lib/frost-secp256k1-evm/src/FROST.sol\":{\"keccak256\":\"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8\",\"dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA\"]},\"lib/frost-secp256k1-evm/src/utils/Memory.sol\":{\"keccak256\":\"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294\",\"dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb\",\"dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab\",\"dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol\":{\"keccak256\":\"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a\",\"dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol\":{\"keccak256\":\"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf\",\"dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de\",\"dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/ICallbacks.sol\":{\"keccak256\":\"0xa3ff0ca18524203a1c5bd15611886cfaf52bd137f5fa338d253972ec1fd6ce93\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4fe1046bb816929a4e6439af4d67744c29c23ac56b38e0c718d61a30251e5ef3\",\"dweb:/ipfs/QmedQraXHdtHTHmJrQuufcxctdUhBNWCPPKnit58piDoPH\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x2b43176b08617d83a2940156abcfcbcc44e9f764501b35b5b81ddbfb80a7e904\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5cf6c062db5bc4daa511f2b4c1ba3899dbf2b43e6addf8f0e81539bd67471b53\",\"dweb:/ipfs/QmVNrK3QkTC2F4a9Yu6kJb9hu12YXAQDKi2jhZAkZAhgab\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xa774e6ad8cad715a5dda22c1a328bb06b71e54629352d3e027502d1c80ea0a8e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://403f2ebf24110c6d767ddbd0d4fc1f5f55d94fdc656272cf08b68d95f06d7d1d\",\"dweb:/ipfs/QmPkCszf5rWqQHj99J62cdJyn4qpHsKbqyi36pXaDVEeMY\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0x52380e66a972ed612ecb2a350a4e4e2ad0b490f5f22d3fc5f4da6293e1f14ae0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6c316499ab60018089226dffd9c2555ee41df970103754c4b8e1fdd2b1c7d6a1\",\"dweb:/ipfs/QmNruxDqGYWFoERjUujThdcR5YvovyL6CTwDjbCajhr31E\"]},\"src/Mirror.sol\":{\"keccak256\":\"0xd18681ac5ba7080707ceb08782d5b414ab3587f458967992321de856e6112c90\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8190203871c6f19bf6a2343023c2e0029994481f225e192cfe97b1e2758177c5\",\"dweb:/ipfs/QmVv13WAam4f5iTGtSUraVHNNTCeGP4mU9ALn1c3MNtnj1\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0x4ed891c99c612ab3aa6c740a62fce18921e6e5ea4454acbf85c55e674d4fa77c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a8736bf7c0228ef51626284c1da0b9d1cda396a38d1c3aec5e9bac54627e6f80\",\"dweb:/ipfs/QmdEMYjzn5a7Crm5RXZSZoX4RFZ9GHzAvkuKHu6TtyKvxk\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageCallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bool","name":"callReply","type":"bool","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"OwnedBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"ReplyCallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"executableBalanceTopUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"exited","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"inheritor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_initializer","type":"address"},{"internalType":"address","name":"_abiInterface","type":"address"},{"internalType":"bool","name":"_isSmall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"initializer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Gear.StateTransition","name":"_transition","type":"tuple","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"bool","name":"exited","type":"bool"},{"internalType":"address","name":"inheritor","type":"address"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"bool","name":"valueToReceiveNegativeSign","type":"bool"},{"internalType":"struct Gear.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct Gear.Message[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct Gear.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]},{"internalType":"bool","name":"call","type":"bool"}]}]}],"stateMutability":"payable","type":"function","name":"performStateTransition","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bool","name":"_callReply","type":"bool"}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"payable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"transferLockedValueToInheritor"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Minimal constructor that only sets the immutable router address."}},"version":1},"userdoc":{"kind":"user","methods":{"router()":{"notice":"forge-lint: disable-next-item(screaming-snake-case-immutable)"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@symbioticfi/core/=lib/symbiotic-rewards/lib/core/","core/=lib/symbiotic-rewards/lib/core/","ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","script/=script/","src/=src/","symbiotic-core/=lib/symbiotic-core/","symbiotic-rewards/=lib/symbiotic-rewards/","test/=test/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"lib/frost-secp256k1-evm/src/FROST.sol":{"keccak256":"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f","urls":["bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8","dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/Memory.sol":{"keccak256":"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859","urls":["bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294","dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol":{"keccak256":"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56","urls":["bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb","dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol":{"keccak256":"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc","urls":["bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab","dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol":{"keccak256":"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b","urls":["bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a","dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol":{"keccak256":"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a","urls":["bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf","dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f","urls":["bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e","dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0","urls":["bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f","dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26","urls":["bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2","dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4","urls":["bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e","dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946","urls":["bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de","dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631","urls":["bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59","dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"src/ICallbacks.sol":{"keccak256":"0xa3ff0ca18524203a1c5bd15611886cfaf52bd137f5fa338d253972ec1fd6ce93","urls":["bzz-raw://4fe1046bb816929a4e6439af4d67744c29c23ac56b38e0c718d61a30251e5ef3","dweb:/ipfs/QmedQraXHdtHTHmJrQuufcxctdUhBNWCPPKnit58piDoPH"],"license":"UNLICENSED"},"src/IMirror.sol":{"keccak256":"0x2b43176b08617d83a2940156abcfcbcc44e9f764501b35b5b81ddbfb80a7e904","urls":["bzz-raw://5cf6c062db5bc4daa511f2b4c1ba3899dbf2b43e6addf8f0e81539bd67471b53","dweb:/ipfs/QmVNrK3QkTC2F4a9Yu6kJb9hu12YXAQDKi2jhZAkZAhgab"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xa774e6ad8cad715a5dda22c1a328bb06b71e54629352d3e027502d1c80ea0a8e","urls":["bzz-raw://403f2ebf24110c6d767ddbd0d4fc1f5f55d94fdc656272cf08b68d95f06d7d1d","dweb:/ipfs/QmPkCszf5rWqQHj99J62cdJyn4qpHsKbqyi36pXaDVEeMY"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0x52380e66a972ed612ecb2a350a4e4e2ad0b490f5f22d3fc5f4da6293e1f14ae0","urls":["bzz-raw://6c316499ab60018089226dffd9c2555ee41df970103754c4b8e1fdd2b1c7d6a1","dweb:/ipfs/QmNruxDqGYWFoERjUujThdcR5YvovyL6CTwDjbCajhr31E"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0xd18681ac5ba7080707ceb08782d5b414ab3587f458967992321de856e6112c90","urls":["bzz-raw://8190203871c6f19bf6a2343023c2e0029994481f225e192cfe97b1e2758177c5","dweb:/ipfs/QmVv13WAam4f5iTGtSUraVHNNTCeGP4mU9ALn1c3MNtnj1"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0x4ed891c99c612ab3aa6c740a62fce18921e6e5ea4454acbf85c55e674d4fa77c","urls":["bzz-raw://a8736bf7c0228ef51626284c1da0b9d1cda396a38d1c3aec5e9bac54627e6f80","dweb:/ipfs/QmdEMYjzn5a7Crm5RXZSZoX4RFZ9GHzAvkuKHu6TtyKvxk"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":75084,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":75087,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"1","type":"t_uint256"},{"astId":75090,"contract":"src/Mirror.sol:Mirror","label":"exited","offset":0,"slot":"2","type":"t_bool"},{"astId":75093,"contract":"src/Mirror.sol:Mirror","label":"inheritor","offset":1,"slot":"2","type":"t_address"},{"astId":75096,"contract":"src/Mirror.sol:Mirror","label":"initializer","offset":0,"slot":"3","type":"t_address"},{"astId":75099,"contract":"src/Mirror.sol:Mirror","label":"isSmall","offset":20,"slot":"3","type":"t_bool"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":76248,"exportedSymbols":{"ERC1967Utils":[44618],"Gear":[80917],"Hashes":[40570],"ICallbacks":[71919],"IMirror":[72455],"IRouter":[72769],"IWrappedVara":[72780],"Memory":[40390],"Mirror":[76247],"StorageSlot":[47840]},"nodeType":"SourceUnit","src":"39:18158:153","nodes":[{"id":75054,"nodeType":"PragmaDirective","src":"39:24:153","nodes":[],"literals":["solidity","^","0.8",".28"]},{"id":75056,"nodeType":"ImportDirective","src":"65:73:153","nodes":[],"absolutePath":"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol","file":"frost-secp256k1-evm/utils/cryptography/Hashes.sol","nameLocation":"-1:-1:-1","scope":76248,"sourceUnit":40571,"symbolAliases":[{"foreign":{"id":75055,"name":"Hashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40570,"src":"73:6:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75058,"nodeType":"ImportDirective","src":"139:60:153","nodes":[],"absolutePath":"lib/frost-secp256k1-evm/src/utils/Memory.sol","file":"frost-secp256k1-evm/utils/Memory.sol","nameLocation":"-1:-1:-1","scope":76248,"sourceUnit":40391,"symbolAliases":[{"foreign":{"id":75057,"name":"Memory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40390,"src":"147:6:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75060,"nodeType":"ImportDirective","src":"200:84:153","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol","nameLocation":"-1:-1:-1","scope":76248,"sourceUnit":44619,"symbolAliases":[{"foreign":{"id":75059,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44618,"src":"208:12:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75062,"nodeType":"ImportDirective","src":"285:74:153","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":76248,"sourceUnit":47841,"symbolAliases":[{"foreign":{"id":75061,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"293:11:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75064,"nodeType":"ImportDirective","src":"360:44:153","nodes":[],"absolutePath":"src/ICallbacks.sol","file":"./ICallbacks.sol","nameLocation":"-1:-1:-1","scope":76248,"sourceUnit":71920,"symbolAliases":[{"foreign":{"id":75063,"name":"ICallbacks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71919,"src":"368:10:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75066,"nodeType":"ImportDirective","src":"405:38:153","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":76248,"sourceUnit":72456,"symbolAliases":[{"foreign":{"id":75065,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"413:7:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75068,"nodeType":"ImportDirective","src":"444:38:153","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":76248,"sourceUnit":72770,"symbolAliases":[{"foreign":{"id":75067,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72769,"src":"452:7:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75070,"nodeType":"ImportDirective","src":"483:48:153","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":76248,"sourceUnit":72781,"symbolAliases":[{"foreign":{"id":75069,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72780,"src":"491:12:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75072,"nodeType":"ImportDirective","src":"532:42:153","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":76248,"sourceUnit":80918,"symbolAliases":[{"foreign":{"id":75071,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"540:4:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76247,"nodeType":"ContractDefinition","src":"576:17620:153","nodes":[{"id":75078,"nodeType":"VariableDeclaration","src":"790:85:153","nodes":[],"constant":true,"documentation":{"id":75075,"nodeType":"StructuredDocumentation","src":"609:176:153","text":"@dev Special address to which Sails contract sends messages so that Mirror can decode events:\n https://github.com/gear-tech/sails/blob/master/rs/src/solidity.rs"},"mutability":"constant","name":"ETH_EVENT_ADDR","nameLocation":"816:14:153","scope":76247,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75076,"name":"address","nodeType":"ElementaryTypeName","src":"790:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307846466646664666664646666666464666464666464646464666664646466666666646664646466646","id":75077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"833:42:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF"},"visibility":"internal"},{"id":75081,"nodeType":"VariableDeclaration","src":"1026:31:153","nodes":[],"baseFunctions":[72383],"constant":false,"documentation":{"id":75079,"nodeType":"StructuredDocumentation","src":"882:139:153","text":"forge-lint: disable-next-item(screaming-snake-case-immutable)\n @dev Address of the router contract, which is the sole authority."},"functionSelector":"f887ea40","mutability":"immutable","name":"router","nameLocation":"1051:6:153","scope":76247,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75080,"name":"address","nodeType":"ElementaryTypeName","src":"1026:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":75084,"nodeType":"VariableDeclaration","src":"1107:24:153","nodes":[],"baseFunctions":[72388],"constant":false,"documentation":{"id":75082,"nodeType":"StructuredDocumentation","src":"1064:38:153","text":"@dev Program's current state hash."},"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"1122:9:153","scope":76247,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75083,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1107:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":75087,"nodeType":"VariableDeclaration","src":"1328:20:153","nodes":[],"baseFunctions":[72393],"constant":false,"documentation":{"id":75085,"nodeType":"StructuredDocumentation","src":"1138:185:153","text":"@dev Source for message ids unique generation.\n In-fact represents amount of messages received from Ethereum.\n Zeroed nonce is always represent init message."},"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"1343:5:153","scope":76247,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75086,"name":"uint256","nodeType":"ElementaryTypeName","src":"1328:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":75090,"nodeType":"VariableDeclaration","src":"1423:18:153","nodes":[],"baseFunctions":[72398],"constant":false,"documentation":{"id":75088,"nodeType":"StructuredDocumentation","src":"1355:63:153","text":"@dev The bool flag indicates whether the program is exited."},"functionSelector":"5ce6c327","mutability":"mutable","name":"exited","nameLocation":"1435:6:153","scope":76247,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75089,"name":"bool","nodeType":"ElementaryTypeName","src":"1423:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"id":75093,"nodeType":"VariableDeclaration","src":"1576:24:153","nodes":[],"baseFunctions":[72403],"constant":false,"documentation":{"id":75091,"nodeType":"StructuredDocumentation","src":"1496:75:153","text":"@dev The address of the inheritor, which is set by the program on exit."},"functionSelector":"36a52a18","mutability":"mutable","name":"inheritor","nameLocation":"1591:9:153","scope":76247,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75092,"name":"address","nodeType":"ElementaryTypeName","src":"1576:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":75096,"nodeType":"VariableDeclaration","src":"1671:26:153","nodes":[],"baseFunctions":[72408],"constant":false,"documentation":{"id":75094,"nodeType":"StructuredDocumentation","src":"1607:59:153","text":"@dev The address eligible to send first (init) message."},"functionSelector":"9ce110d7","mutability":"mutable","name":"initializer","nameLocation":"1686:11:153","scope":76247,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75095,"name":"address","nodeType":"ElementaryTypeName","src":"1671:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":75099,"nodeType":"VariableDeclaration","src":"1802:12:153","nodes":[],"constant":false,"documentation":{"id":75097,"nodeType":"StructuredDocumentation","src":"1704:93:153","text":"@dev The bool flag indicates whether to process arbitrary calls as `sendMessage` payload."},"mutability":"mutable","name":"isSmall","nameLocation":"1807:7:153","scope":76247,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75098,"name":"bool","nodeType":"ElementaryTypeName","src":"1802:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"id":75110,"nodeType":"FunctionDefinition","src":"1899:62:153","nodes":[],"body":{"id":75109,"nodeType":"Block","src":"1928:33:153","nodes":[],"statements":[{"expression":{"id":75107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75105,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75081,"src":"1938:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75106,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75102,"src":"1947:7:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1938:16:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75108,"nodeType":"ExpressionStatement","src":"1938:16:153"}]},"documentation":{"id":75100,"nodeType":"StructuredDocumentation","src":"1821:73:153","text":"@dev Minimal constructor that only sets the immutable router address."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":75103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75102,"mutability":"mutable","name":"_router","nameLocation":"1919:7:153","nodeType":"VariableDeclaration","scope":75110,"src":"1911:15:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75101,"name":"address","nodeType":"ElementaryTypeName","src":"1911:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1910:17:153"},"returnParameters":{"id":75104,"nodeType":"ParameterList","parameters":[],"src":"1928:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75118,"nodeType":"ModifierDefinition","src":"2080:83:153","nodes":[],"body":{"id":75117,"nodeType":"Block","src":"2112:51:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75113,"name":"_onlyAfterInitMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75129,"src":"2122:21:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2122:23:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75115,"nodeType":"ExpressionStatement","src":"2122:23:153"},{"id":75116,"nodeType":"PlaceholderStatement","src":"2155:1:153"}]},"documentation":{"id":75111,"nodeType":"StructuredDocumentation","src":"1967:108:153","text":"@dev Functions marked with this modifier can only be called if the init message has been created before."},"name":"onlyAfterInitMessage","nameLocation":"2089:20:153","parameters":{"id":75112,"nodeType":"ParameterList","parameters":[],"src":"2109:2:153"},"virtual":false,"visibility":"internal"},{"id":75129,"nodeType":"FunctionDefinition","src":"2169:129:153","nodes":[],"body":{"id":75128,"nodeType":"Block","src":"2216:82:153","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75122,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75087,"src":"2234:5:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":75123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2242:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2234:9:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a6572206861736e2774206372656174656420696e6974206d65737361676520796574","id":75125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2245:45:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_65d3f165ecb53a71c4baab7e3c64d50628aa4b4da22aa56421c8898d77a0af21","typeString":"literal_string \"initializer hasn't created init message yet\""},"value":"initializer hasn't created init message yet"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_65d3f165ecb53a71c4baab7e3c64d50628aa4b4da22aa56421c8898d77a0af21","typeString":"literal_string \"initializer hasn't created init message yet\""}],"id":75121,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2226:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2226:65:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75127,"nodeType":"ExpressionStatement","src":"2226:65:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyAfterInitMessage","nameLocation":"2178:21:153","parameters":{"id":75119,"nodeType":"ParameterList","parameters":[],"src":"2199:2:153"},"returnParameters":{"id":75120,"nodeType":"ParameterList","parameters":[],"src":"2216:0:153"},"scope":76247,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75137,"nodeType":"ModifierDefinition","src":"2450:109:153","nodes":[],"body":{"id":75136,"nodeType":"Block","src":"2495:64:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75132,"name":"_onlyAfterInitMessageOrInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75153,"src":"2505:34:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2505:36:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75134,"nodeType":"ExpressionStatement","src":"2505:36:153"},{"id":75135,"nodeType":"PlaceholderStatement","src":"2551:1:153"}]},"documentation":{"id":75130,"nodeType":"StructuredDocumentation","src":"2304:141:153","text":"@dev Functions marked with this modifier can only be called if the init message has been created before or the caller is the initializer."},"name":"onlyAfterInitMessageOrInitializer","nameLocation":"2459:33:153","parameters":{"id":75131,"nodeType":"ParameterList","parameters":[],"src":"2492:2:153"},"virtual":false,"visibility":"internal"},{"id":75153,"nodeType":"FunctionDefinition","src":"2565:240:153","nodes":[],"body":{"id":75152,"nodeType":"Block","src":"2625:180:153","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75141,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75087,"src":"2656:5:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":75142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2664:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2656:9:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75144,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2669:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2673:6:153","memberName":"sender","nodeType":"MemberAccess","src":"2669:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":75146,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75096,"src":"2683:11:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2669:25:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2656:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a6572206861736e2774206372656174656420696e6974206d657373616765207965743b20616e642063616c6c6572206973206e6f742074686520696e697469616c697a6572","id":75149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2708:80:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_13d09412efdd3ea901e05c34e20672234b60e241c9b8e583815ce03b750c4d5c","typeString":"literal_string \"initializer hasn't created init message yet; and caller is not the initializer\""},"value":"initializer hasn't created init message yet; and caller is not the initializer"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_13d09412efdd3ea901e05c34e20672234b60e241c9b8e583815ce03b750c4d5c","typeString":"literal_string \"initializer hasn't created init message yet; and caller is not the initializer\""}],"id":75140,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2635:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2635:163:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75151,"nodeType":"ExpressionStatement","src":"2635:163:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyAfterInitMessageOrInitializer","nameLocation":"2574:34:153","parameters":{"id":75138,"nodeType":"ParameterList","parameters":[],"src":"2608:2:153"},"returnParameters":{"id":75139,"nodeType":"ParameterList","parameters":[],"src":"2625:0:153"},"scope":76247,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75161,"nodeType":"ModifierDefinition","src":"2901:67:153","nodes":[],"body":{"id":75160,"nodeType":"Block","src":"2925:43:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75156,"name":"_onlyIfActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75171,"src":"2935:13:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2935:15:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75158,"nodeType":"ExpressionStatement","src":"2935:15:153"},{"id":75159,"nodeType":"PlaceholderStatement","src":"2960:1:153"}]},"documentation":{"id":75154,"nodeType":"StructuredDocumentation","src":"2811:85:153","text":"@dev Functions marked with this modifier can only be called if program is active."},"name":"onlyIfActive","nameLocation":"2910:12:153","parameters":{"id":75155,"nodeType":"ParameterList","parameters":[],"src":"2922:2:153"},"virtual":false,"visibility":"internal"},{"id":75171,"nodeType":"FunctionDefinition","src":"2974:93:153","nodes":[],"body":{"id":75170,"nodeType":"Block","src":"3013:54:153","nodes":[],"statements":[{"expression":{"arguments":[{"id":75166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3031:7:153","subExpression":{"id":75165,"name":"exited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75090,"src":"3032:6:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d20697320657869746564","id":75167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3040:19:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_3aae404e672693cb14d92bdba0e17bd007fcccc02cb2b908be00702b45a1be18","typeString":"literal_string \"program is exited\""},"value":"program is exited"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3aae404e672693cb14d92bdba0e17bd007fcccc02cb2b908be00702b45a1be18","typeString":"literal_string \"program is exited\""}],"id":75164,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3023:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3023:37:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75169,"nodeType":"ExpressionStatement","src":"3023:37:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyIfActive","nameLocation":"2983:13:153","parameters":{"id":75162,"nodeType":"ParameterList","parameters":[],"src":"2996:2:153"},"returnParameters":{"id":75163,"nodeType":"ParameterList","parameters":[],"src":"3013:0:153"},"scope":76247,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75179,"nodeType":"ModifierDefinition","src":"3163:67:153","nodes":[],"body":{"id":75178,"nodeType":"Block","src":"3187:43:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75174,"name":"_onlyIfExited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75188,"src":"3197:13:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3197:15:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75176,"nodeType":"ExpressionStatement","src":"3197:15:153"},{"id":75177,"nodeType":"PlaceholderStatement","src":"3222:1:153"}]},"documentation":{"id":75172,"nodeType":"StructuredDocumentation","src":"3073:85:153","text":"@dev Functions marked with this modifier can only be called if program is exited."},"name":"onlyIfExited","nameLocation":"3172:12:153","parameters":{"id":75173,"nodeType":"ParameterList","parameters":[],"src":"3184:2:153"},"virtual":false,"visibility":"internal"},{"id":75188,"nodeType":"FunctionDefinition","src":"3236:96:153","nodes":[],"body":{"id":75187,"nodeType":"Block","src":"3275:57:153","nodes":[],"statements":[{"expression":{"arguments":[{"id":75183,"name":"exited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75090,"src":"3293:6:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973206e6f7420657869746564","id":75184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3301:23:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_6183322af2e012ce19e64deaa6e7833882db40384ce02d654fbace8b596d2449","typeString":"literal_string \"program is not exited\""},"value":"program is not exited"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6183322af2e012ce19e64deaa6e7833882db40384ce02d654fbace8b596d2449","typeString":"literal_string \"program is not exited\""}],"id":75182,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3285:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3285:40:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75186,"nodeType":"ExpressionStatement","src":"3285:40:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyIfExited","nameLocation":"3245:13:153","parameters":{"id":75180,"nodeType":"ParameterList","parameters":[],"src":"3258:2:153"},"returnParameters":{"id":75181,"nodeType":"ParameterList","parameters":[],"src":"3275:0:153"},"scope":76247,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75196,"nodeType":"ModifierDefinition","src":"3421:63:153","nodes":[],"body":{"id":75195,"nodeType":"Block","src":"3443:41:153","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75191,"name":"_onlyRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75208,"src":"3453:11:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":75192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3453:13:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75193,"nodeType":"ExpressionStatement","src":"3453:13:153"},{"id":75194,"nodeType":"PlaceholderStatement","src":"3476:1:153"}]},"documentation":{"id":75189,"nodeType":"StructuredDocumentation","src":"3338:78:153","text":"@dev Functions marked with this modifier can only be called by the router."},"name":"onlyRouter","nameLocation":"3430:10:153","parameters":{"id":75190,"nodeType":"ParameterList","parameters":[],"src":"3440:2:153"},"virtual":false,"visibility":"internal"},{"id":75208,"nodeType":"FunctionDefinition","src":"3490:111:153","nodes":[],"body":{"id":75207,"nodeType":"Block","src":"3527:74:153","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75200,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3545:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3549:6:153","memberName":"sender","nodeType":"MemberAccess","src":"3545:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":75202,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75081,"src":"3559:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3545:20:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"63616c6c6572206973206e6f742074686520726f75746572","id":75204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3567:26:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_198bece7548b89eb58a1e57e2a5c5ba93b63a70943a48214dc1508db322b92d3","typeString":"literal_string \"caller is not the router\""},"value":"caller is not the router"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_198bece7548b89eb58a1e57e2a5c5ba93b63a70943a48214dc1508db322b92d3","typeString":"literal_string \"caller is not the router\""}],"id":75199,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3537:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3537:57:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75206,"nodeType":"ExpressionStatement","src":"3537:57:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_onlyRouter","nameLocation":"3499:11:153","parameters":{"id":75197,"nodeType":"ParameterList","parameters":[],"src":"3510:2:153"},"returnParameters":{"id":75198,"nodeType":"ParameterList","parameters":[],"src":"3527:0:153"},"scope":76247,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":75219,"nodeType":"ModifierDefinition","src":"3722:89:153","nodes":[],"body":{"id":75218,"nodeType":"Block","src":"3761:50:153","nodes":[],"statements":[{"expression":{"arguments":[{"id":75214,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75211,"src":"3787:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75213,"name":"_retrievingVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75247,"src":"3771:15:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3771:22:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75216,"nodeType":"ExpressionStatement","src":"3771:22:153"},{"id":75217,"nodeType":"PlaceholderStatement","src":"3803:1:153"}]},"documentation":{"id":75209,"nodeType":"StructuredDocumentation","src":"3607:110:153","text":"@dev Non-zero Vara value must be transferred from source to router in functions marked with this modifier."},"name":"retrievingVara","nameLocation":"3731:14:153","parameters":{"id":75212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75211,"mutability":"mutable","name":"value","nameLocation":"3754:5:153","nodeType":"VariableDeclaration","scope":75219,"src":"3746:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75210,"name":"uint128","nodeType":"ElementaryTypeName","src":"3746:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3745:15:153"},"virtual":false,"visibility":"internal"},{"id":75247,"nodeType":"FunctionDefinition","src":"3817:274:153","nodes":[],"body":{"id":75246,"nodeType":"Block","src":"3866:225:153","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75224,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75221,"src":"3880:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3889:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3880:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75245,"nodeType":"IfStatement","src":"3876:209:153","trueBody":{"id":75244,"nodeType":"Block","src":"3892:193:153","statements":[{"assignments":[75228],"declarations":[{"constant":false,"id":75228,"mutability":"mutable","name":"success","nameLocation":"3911:7:153","nodeType":"VariableDeclaration","scope":75244,"src":"3906:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75227,"name":"bool","nodeType":"ElementaryTypeName","src":"3906:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75238,"initialValue":{"arguments":[{"expression":{"id":75233,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3949:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3953:6:153","memberName":"sender","nodeType":"MemberAccess","src":"3949:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75235,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75081,"src":"3961:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75236,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75221,"src":"3969:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":75230,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75081,"src":"3928:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75229,"name":"_wvara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76162,"src":"3921:6:153","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_contract$_IWrappedVara_$72780_$","typeString":"function (address) view returns (contract IWrappedVara)"}},"id":75231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3921:14:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$72780","typeString":"contract IWrappedVara"}},"id":75232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3936:12:153","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":45586,"src":"3921:27:153","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":75237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3921:54:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3906:69:153"},{"expression":{"arguments":[{"id":75240,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75228,"src":"3997:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f756e74206f662057566172612066726f6d20736f7572636520746f20726f75746572","id":75241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4006:67:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_89834f4f5b676caeda9aeacc6e70651fe8c874cb9d7867ce1578400f765c69dd","typeString":"literal_string \"failed to transfer non-zero amount of WVara from source to router\""},"value":"failed to transfer non-zero amount of WVara from source to router"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_89834f4f5b676caeda9aeacc6e70651fe8c874cb9d7867ce1578400f765c69dd","typeString":"literal_string \"failed to transfer non-zero amount of WVara from source to router\""}],"id":75239,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3989:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3989:85:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75243,"nodeType":"ExpressionStatement","src":"3989:85:153"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrievingVara","nameLocation":"3826:15:153","parameters":{"id":75222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75221,"mutability":"mutable","name":"value","nameLocation":"3850:5:153","nodeType":"VariableDeclaration","scope":75247,"src":"3842:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75220,"name":"uint128","nodeType":"ElementaryTypeName","src":"3842:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3841:15:153"},"returnParameters":{"id":75223,"nodeType":"ParameterList","parameters":[],"src":"3866:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":75273,"nodeType":"FunctionDefinition","src":"4213:253:153","nodes":[],"body":{"id":75272,"nodeType":"Block","src":"4263:203:153","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75253,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75250,"src":"4277:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4286:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4277:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75271,"nodeType":"IfStatement","src":"4273:187:153","trueBody":{"id":75270,"nodeType":"Block","src":"4289:171:153","statements":[{"assignments":[75257,null],"declarations":[{"constant":false,"id":75257,"mutability":"mutable","name":"success","nameLocation":"4309:7:153","nodeType":"VariableDeclaration","scope":75270,"src":"4304:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75256,"name":"bool","nodeType":"ElementaryTypeName","src":"4304:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":75264,"initialValue":{"arguments":[{"hexValue":"","id":75262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4347:2:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":75258,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75081,"src":"4321:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4328:4:153","memberName":"call","nodeType":"MemberAccess","src":"4321:11:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":75260,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75250,"src":"4340:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"4321:25:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4321:29:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4303:47:153"},{"expression":{"arguments":[{"id":75266,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75257,"src":"4372:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f756e74206f662045746865722066726f6d20736f7572636520746f20726f75746572","id":75267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4381:67:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_3b53edf5673e45c6acd843a4ace7ad87406352242bf2ff953ca52c9e10a341e7","typeString":"literal_string \"failed to transfer non-zero amount of Ether from source to router\""},"value":"failed to transfer non-zero amount of Ether from source to router"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3b53edf5673e45c6acd843a4ace7ad87406352242bf2ff953ca52c9e10a341e7","typeString":"literal_string \"failed to transfer non-zero amount of Ether from source to router\""}],"id":75265,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4364:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4364:85:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75269,"nodeType":"ExpressionStatement","src":"4364:85:153"}]}}]},"documentation":{"id":75248,"nodeType":"StructuredDocumentation","src":"4097:111:153","text":"@dev Non-zero Ether value must be transferred from source to router in functions marked with this modifier."},"implemented":true,"kind":"function","modifiers":[],"name":"_retrievingEther","nameLocation":"4222:16:153","parameters":{"id":75251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75250,"mutability":"mutable","name":"value","nameLocation":"4247:5:153","nodeType":"VariableDeclaration","scope":75273,"src":"4239:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75249,"name":"uint128","nodeType":"ElementaryTypeName","src":"4239:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"4238:15:153"},"returnParameters":{"id":75252,"nodeType":"ParameterList","parameters":[],"src":"4263:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":75288,"nodeType":"FunctionDefinition","src":"4502:156:153","nodes":[],"body":{"id":75287,"nodeType":"Block","src":"4600:58:153","nodes":[],"statements":[{"expression":{"arguments":[{"id":75283,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75275,"src":"4630:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75284,"name":"_callReply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75277,"src":"4640:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":75282,"name":"_sendMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75600,"src":"4617:12:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_calldata_ptr_$_t_bool_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bool) returns (bytes32)"}},"id":75285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4617:34:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75281,"id":75286,"nodeType":"Return","src":"4610:41:153"}]},"baseFunctions":[72417],"functionSelector":"42129d00","implemented":true,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"4511:11:153","parameters":{"id":75278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75275,"mutability":"mutable","name":"_payload","nameLocation":"4538:8:153","nodeType":"VariableDeclaration","scope":75288,"src":"4523:23:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75274,"name":"bytes","nodeType":"ElementaryTypeName","src":"4523:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75277,"mutability":"mutable","name":"_callReply","nameLocation":"4553:10:153","nodeType":"VariableDeclaration","scope":75288,"src":"4548:15:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75276,"name":"bool","nodeType":"ElementaryTypeName","src":"4548:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4522:42:153"},"returnParameters":{"id":75281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75280,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75288,"src":"4591:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75279,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4591:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4590:9:153"},"scope":76247,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":75320,"nodeType":"FunctionDefinition","src":"4664:282:153","nodes":[],"body":{"id":75319,"nodeType":"Block","src":"4779:167:153","nodes":[],"statements":[{"assignments":[75300],"declarations":[{"constant":false,"id":75300,"mutability":"mutable","name":"_value","nameLocation":"4797:6:153","nodeType":"VariableDeclaration","scope":75319,"src":"4789:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75299,"name":"uint128","nodeType":"ElementaryTypeName","src":"4789:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75306,"initialValue":{"arguments":[{"expression":{"id":75303,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4814:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4818:5:153","memberName":"value","nodeType":"MemberAccess","src":"4814:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75302,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4806:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":75301,"name":"uint128","nodeType":"ElementaryTypeName","src":"4806:7:153","typeDescriptions":{}}},"id":75305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:18:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"4789:35:153"},{"expression":{"arguments":[{"id":75308,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75300,"src":"4852:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75307,"name":"_retrievingEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75273,"src":"4835:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4835:24:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75310,"nodeType":"ExpressionStatement","src":"4835:24:153"},{"eventCall":{"arguments":[{"id":75312,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75290,"src":"4898:10:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75313,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4910:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4914:6:153","memberName":"sender","nodeType":"MemberAccess","src":"4910:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75315,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75292,"src":"4922:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75316,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75300,"src":"4932:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75311,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72314,"src":"4875:22:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4875:64:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75318,"nodeType":"EmitStatement","src":"4870:69:153"}]},"baseFunctions":[72424],"functionSelector":"7a8e0cdd","implemented":true,"kind":"function","modifiers":[{"id":75295,"kind":"modifierInvocation","modifierName":{"id":75294,"name":"onlyIfActive","nameLocations":["4745:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75161,"src":"4745:12:153"},"nodeType":"ModifierInvocation","src":"4745:12:153"},{"id":75297,"kind":"modifierInvocation","modifierName":{"id":75296,"name":"onlyAfterInitMessage","nameLocations":["4758:20:153"],"nodeType":"IdentifierPath","referencedDeclaration":75118,"src":"4758:20:153"},"nodeType":"ModifierInvocation","src":"4758:20:153"}],"name":"sendReply","nameLocation":"4673:9:153","parameters":{"id":75293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75290,"mutability":"mutable","name":"_repliedTo","nameLocation":"4691:10:153","nodeType":"VariableDeclaration","scope":75320,"src":"4683:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75289,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4683:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75292,"mutability":"mutable","name":"_payload","nameLocation":"4718:8:153","nodeType":"VariableDeclaration","scope":75320,"src":"4703:23:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75291,"name":"bytes","nodeType":"ElementaryTypeName","src":"4703:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4682:45:153"},"returnParameters":{"id":75298,"nodeType":"ParameterList","parameters":[],"src":"4779:0:153"},"scope":76247,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":75336,"nodeType":"FunctionDefinition","src":"5019:151:153","nodes":[],"body":{"id":75335,"nodeType":"Block","src":"5102:68:153","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":75330,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75322,"src":"5140:10:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75331,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5152:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5156:6:153","memberName":"sender","nodeType":"MemberAccess","src":"5152:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":75329,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72321,"src":"5117:22:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":75333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5117:46:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75334,"nodeType":"EmitStatement","src":"5112:51:153"}]},"baseFunctions":[72429],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[{"id":75325,"kind":"modifierInvocation","modifierName":{"id":75324,"name":"onlyIfActive","nameLocations":["5068:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75161,"src":"5068:12:153"},"nodeType":"ModifierInvocation","src":"5068:12:153"},{"id":75327,"kind":"modifierInvocation","modifierName":{"id":75326,"name":"onlyAfterInitMessage","nameLocations":["5081:20:153"],"nodeType":"IdentifierPath","referencedDeclaration":75118,"src":"5081:20:153"},"nodeType":"ModifierInvocation","src":"5081:20:153"}],"name":"claimValue","nameLocation":"5028:10:153","parameters":{"id":75323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75322,"mutability":"mutable","name":"_claimedId","nameLocation":"5047:10:153","nodeType":"VariableDeclaration","scope":75336,"src":"5039:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75321,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5039:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5038:20:153"},"returnParameters":{"id":75328,"nodeType":"ParameterList","parameters":[],"src":"5102:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75351,"nodeType":"FunctionDefinition","src":"5176:154:153","nodes":[],"body":{"id":75350,"nodeType":"Block","src":"5269:61:153","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":75347,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75338,"src":"5316:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75346,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72331,"src":"5284:31:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5284:39:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75349,"nodeType":"EmitStatement","src":"5279:44:153"}]},"baseFunctions":[72434],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[{"id":75341,"kind":"modifierInvocation","modifierName":{"id":75340,"name":"onlyIfActive","nameLocations":["5233:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75161,"src":"5233:12:153"},"nodeType":"ModifierInvocation","src":"5233:12:153"},{"arguments":[{"id":75343,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75338,"src":"5261:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":75344,"kind":"modifierInvocation","modifierName":{"id":75342,"name":"retrievingVara","nameLocations":["5246:14:153"],"nodeType":"IdentifierPath","referencedDeclaration":75219,"src":"5246:14:153"},"nodeType":"ModifierInvocation","src":"5246:22:153"}],"name":"executableBalanceTopUp","nameLocation":"5185:22:153","parameters":{"id":75339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75338,"mutability":"mutable","name":"_value","nameLocation":"5216:6:153","nodeType":"VariableDeclaration","scope":75351,"src":"5208:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75337,"name":"uint128","nodeType":"ElementaryTypeName","src":"5208:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"5207:16:153"},"returnParameters":{"id":75345,"nodeType":"ParameterList","parameters":[],"src":"5269:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75373,"nodeType":"FunctionDefinition","src":"5336:321:153","nodes":[],"body":{"id":75372,"nodeType":"Block","src":"5398:259:153","nodes":[],"statements":[{"assignments":[75357],"declarations":[{"constant":false,"id":75357,"mutability":"mutable","name":"balance","nameLocation":"5416:7:153","nodeType":"VariableDeclaration","scope":75372,"src":"5408:15:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75356,"name":"uint256","nodeType":"ElementaryTypeName","src":"5408:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75363,"initialValue":{"expression":{"arguments":[{"id":75360,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5434:4:153","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$76247","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$76247","typeString":"contract Mirror"}],"id":75359,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5426:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75358,"name":"address","nodeType":"ElementaryTypeName","src":"5426:7:153","typeDescriptions":{}}},"id":75361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5426:13:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5440:7:153","memberName":"balance","nodeType":"MemberAccess","src":"5426:21:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5408:39:153"},{"expression":{"arguments":[{"id":75365,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75093,"src":"5622:9:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":75368,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75357,"src":"5641:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5633:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":75366,"name":"uint128","nodeType":"ElementaryTypeName","src":"5633:7:153","typeDescriptions":{}}},"id":75369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5633:16:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75364,"name":"_transferEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76189,"src":"5607:14:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":75370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5607:43:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75371,"nodeType":"ExpressionStatement","src":"5607:43:153"}]},"baseFunctions":[72437],"functionSelector":"e43f3433","implemented":true,"kind":"function","modifiers":[{"id":75354,"kind":"modifierInvocation","modifierName":{"id":75353,"name":"onlyIfExited","nameLocations":["5385:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75179,"src":"5385:12:153"},"nodeType":"ModifierInvocation","src":"5385:12:153"}],"name":"transferLockedValueToInheritor","nameLocation":"5345:30:153","parameters":{"id":75352,"nodeType":"ParameterList","parameters":[],"src":"5375:2:153"},"returnParameters":{"id":75355,"nodeType":"ParameterList","parameters":[],"src":"5398:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75437,"nodeType":"FunctionDefinition","src":"5715:598:153","nodes":[],"body":{"id":75436,"nodeType":"Block","src":"5813:500:153","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75385,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75096,"src":"5831:11:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5854:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75387,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5846:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75386,"name":"address","nodeType":"ElementaryTypeName","src":"5846:7:153","typeDescriptions":{}}},"id":75389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5846:10:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5831:25:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e6365","id":75391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5858:36:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_a22a998b3a781946b89501fcd4ccd018d3a95bd8711aff0547431faa4986b249","typeString":"literal_string \"initializer could only be set once\""},"value":"initializer could only be set once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a22a998b3a781946b89501fcd4ccd018d3a95bd8711aff0547431faa4986b249","typeString":"literal_string \"initializer could only be set once\""}],"id":75384,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5823:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5823:72:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75393,"nodeType":"ExpressionStatement","src":"5823:72:153"},{"expression":{"arguments":[{"id":75396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5914:8:153","subExpression":{"id":75395,"name":"isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75099,"src":"5915:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6973536d616c6c20636f756c64206f6e6c7920626520736574206f6e6365","id":75397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5924:32:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_8599ae4b81228782baec57304205e7ac62068ae2063af4820c33b969a978e3ab","typeString":"literal_string \"isSmall could only be set once\""},"value":"isSmall could only be set once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8599ae4b81228782baec57304205e7ac62068ae2063af4820c33b969a978e3ab","typeString":"literal_string \"isSmall could only be set once\""}],"id":75394,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5906:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5906:51:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75399,"nodeType":"ExpressionStatement","src":"5906:51:153"},{"assignments":[75404],"declarations":[{"constant":false,"id":75404,"mutability":"mutable","name":"implementationSlot","nameLocation":"6000:18:153","nodeType":"VariableDeclaration","scope":75436,"src":"5968:50:153","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":75403,"nodeType":"UserDefinedTypeName","pathNode":{"id":75402,"name":"StorageSlot.AddressSlot","nameLocations":["5968:11:153","5980:11:153"],"nodeType":"IdentifierPath","referencedDeclaration":47722,"src":"5968:23:153"},"referencedDeclaration":47722,"src":"5968:23:153","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"id":75410,"initialValue":{"arguments":[{"expression":{"id":75407,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44618,"src":"6060:12:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$44618_$","typeString":"type(library ERC1967Utils)"}},"id":75408,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6073:19:153","memberName":"IMPLEMENTATION_SLOT","nodeType":"MemberAccess","referencedDeclaration":44339,"src":"6060:32:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75405,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"6033:11:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":75406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6045:14:153","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":47751,"src":"6033:26:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$47722_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":75409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6033:60:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5968:125:153"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75412,"name":"implementationSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75404,"src":"6112:18:153","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":75413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6131:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47721,"src":"6112:24:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6148:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6140:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75414,"name":"address","nodeType":"ElementaryTypeName","src":"6140:7:153","typeDescriptions":{}}},"id":75417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:10:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6112:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"61626920696e7465726661636520636f756c64206f6e6c7920626520736574206f6e6365","id":75419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6152:38:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_277fa764d1ef61d0ebce06271b5b6adf1b20d90129ffd89158611b5c8a1de3e1","typeString":"literal_string \"abi interface could only be set once\""},"value":"abi interface could only be set once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_277fa764d1ef61d0ebce06271b5b6adf1b20d90129ffd89158611b5c8a1de3e1","typeString":"literal_string \"abi interface could only be set once\""}],"id":75411,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6104:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6104:87:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75421,"nodeType":"ExpressionStatement","src":"6104:87:153"},{"expression":{"id":75424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75422,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75096,"src":"6202:11:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75423,"name":"_initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75375,"src":"6216:12:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6202:26:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75425,"nodeType":"ExpressionStatement","src":"6202:26:153"},{"expression":{"id":75428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75426,"name":"isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75099,"src":"6238:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75427,"name":"_isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75379,"src":"6248:8:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6238:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75429,"nodeType":"ExpressionStatement","src":"6238:18:153"},{"expression":{"id":75434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75430,"name":"implementationSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75404,"src":"6266:18:153","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$47722_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":75432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6285:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47721,"src":"6266:24:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75433,"name":"_abiInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75377,"src":"6293:13:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6266:40:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75435,"nodeType":"ExpressionStatement","src":"6266:40:153"}]},"baseFunctions":[72446],"functionSelector":"e4bbb5a8","implemented":true,"kind":"function","modifiers":[{"id":75382,"kind":"modifierInvocation","modifierName":{"id":75381,"name":"onlyRouter","nameLocations":["5802:10:153"],"nodeType":"IdentifierPath","referencedDeclaration":75196,"src":"5802:10:153"},"nodeType":"ModifierInvocation","src":"5802:10:153"}],"name":"initialize","nameLocation":"5724:10:153","parameters":{"id":75380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75375,"mutability":"mutable","name":"_initializer","nameLocation":"5743:12:153","nodeType":"VariableDeclaration","scope":75437,"src":"5735:20:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75374,"name":"address","nodeType":"ElementaryTypeName","src":"5735:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75377,"mutability":"mutable","name":"_abiInterface","nameLocation":"5765:13:153","nodeType":"VariableDeclaration","scope":75437,"src":"5757:21:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75376,"name":"address","nodeType":"ElementaryTypeName","src":"5757:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75379,"mutability":"mutable","name":"_isSmall","nameLocation":"5785:8:153","nodeType":"VariableDeclaration","scope":75437,"src":"5780:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75378,"name":"bool","nodeType":"ElementaryTypeName","src":"5780:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5734:60:153"},"returnParameters":{"id":75383,"nodeType":"ParameterList","parameters":[],"src":"5813:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75549,"nodeType":"FunctionDefinition","src":"6319:1755:153","nodes":[],"body":{"id":75548,"nodeType":"Block","src":"6476:1598:153","nodes":[],"statements":[{"documentation":"@dev Verify that the transition belongs to this contract.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75448,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"6564:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6576:7:153","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":79985,"src":"6564:19:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":75452,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6595:4:153","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$76247","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$76247","typeString":"contract Mirror"}],"id":75451,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6587:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75450,"name":"address","nodeType":"ElementaryTypeName","src":"6587:7:153","typeDescriptions":{}}},"id":75453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6587:13:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6564:36:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6163746f724964206d757374206265207468697320636f6e7472616374","id":75455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6602:31:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_ba7be785920a68bd302e7ea09bd7071e8b885ef81058f7ff907b22051b8150cd","typeString":"literal_string \"actorId must be this contract\""},"value":"actorId must be this contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ba7be785920a68bd302e7ea09bd7071e8b885ef81058f7ff907b22051b8150cd","typeString":"literal_string \"actorId must be this contract\""}],"id":75447,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6556:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6556:78:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75457,"nodeType":"ExpressionStatement","src":"6556:78:153"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75458,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"6744:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6756:14:153","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79994,"src":"6744:26:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6774:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6744:31:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"expression":{"id":75462,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"6779:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6791:26:153","memberName":"valueToReceiveNegativeSign","nodeType":"MemberAccess","referencedDeclaration":79996,"src":"6779:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6744:73:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":"@dev Transfer value to router if valueToReceive is non-zero and has negative sign.","id":75481,"nodeType":"IfStatement","src":"6740:264:153","trueBody":{"id":75480,"nodeType":"Block","src":"6819:185:153","statements":[{"assignments":[75466,null],"declarations":[{"constant":false,"id":75466,"mutability":"mutable","name":"success","nameLocation":"6839:7:153","nodeType":"VariableDeclaration","scope":75480,"src":"6834:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75465,"name":"bool","nodeType":"ElementaryTypeName","src":"6834:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":75474,"initialValue":{"arguments":[{"hexValue":"","id":75472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6898:2:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":75467,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75081,"src":"6851:6:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6858:4:153","memberName":"call","nodeType":"MemberAccess","src":"6851:11:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":75469,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"6870:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6882:14:153","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79994,"src":"6870:26:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"6851:46:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6851:50:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6833:68:153"},{"expression":{"arguments":[{"id":75476,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75466,"src":"6923:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e736665722076616c756520746f20726f7574657220647572696e67207374617465207472616e736974696f6e","id":75477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6932:60:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_4f1b70cb4ae30b894d9f44646f03399a3eda171c3cace09d1e4a0511f6dc825a","typeString":"literal_string \"failed to transfer value to router during state transition\""},"value":"failed to transfer value to router during state transition"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4f1b70cb4ae30b894d9f44646f03399a3eda171c3cace09d1e4a0511f6dc825a","typeString":"literal_string \"failed to transfer value to router during state transition\""}],"id":75475,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6915:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6915:78:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75479,"nodeType":"ExpressionStatement","src":"6915:78:153"}]}},{"assignments":[75484],"declarations":[{"constant":false,"id":75484,"mutability":"mutable","name":"messagesHashesHash","nameLocation":"7067:18:153","nodeType":"VariableDeclaration","scope":75548,"src":"7059:26:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75483,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7059:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"documentation":"@dev Send all outgoing messages.","id":75489,"initialValue":{"arguments":[{"expression":{"id":75486,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7102:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7114:8:153","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":80004,"src":"7102:20:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79964_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_Message_$79964_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}],"id":75485,"name":"_sendMessages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75701,"src":"7088:13:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_Message_$79964_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.Message calldata[] calldata) returns (bytes32)"}},"id":75488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7088:35:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7059:64:153"},{"assignments":[75492],"declarations":[{"constant":false,"id":75492,"mutability":"mutable","name":"valueClaimsHash","nameLocation":"7186:15:153","nodeType":"VariableDeclaration","scope":75548,"src":"7178:23:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75491,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7178:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"documentation":"@dev Send value for each claim.","id":75497,"initialValue":{"arguments":[{"expression":{"id":75494,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7217:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7229:11:153","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":80000,"src":"7217:23:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80041_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80041_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}],"id":75493,"name":"_claimValues","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76108,"src":"7204:12:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_ValueClaim_$80041_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.ValueClaim calldata[] calldata) returns (bytes32)"}},"id":75496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7204:37:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7178:63:153"},{"condition":{"expression":{"id":75498,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7298:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7310:6:153","memberName":"exited","nodeType":"MemberAccess","referencedDeclaration":79989,"src":"7298:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":"@dev Set inheritor if exited.","falseBody":{"id":75517,"nodeType":"Block","src":"7385:109:153","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75507,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7407:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7419:9:153","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":79991,"src":"7407:21:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7440:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75510,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7432:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75509,"name":"address","nodeType":"ElementaryTypeName","src":"7432:7:153","typeDescriptions":{}}},"id":75512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7432:10:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7407:35:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e68657269746f72206d757374206265207a65726f206966206e6f7420657869746564","id":75514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7444:38:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_c8c7685c35744010c2e0b71ab762a8448df425a85a7969d97ae43c48a66f978c","typeString":"literal_string \"inheritor must be zero if not exited\""},"value":"inheritor must be zero if not exited"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c8c7685c35744010c2e0b71ab762a8448df425a85a7969d97ae43c48a66f978c","typeString":"literal_string \"inheritor must be zero if not exited\""}],"id":75506,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7399:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7399:84:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75516,"nodeType":"ExpressionStatement","src":"7399:84:153"}]},"id":75518,"nodeType":"IfStatement","src":"7294:200:153","trueBody":{"id":75505,"nodeType":"Block","src":"7318:61:153","statements":[{"expression":{"arguments":[{"expression":{"id":75501,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7346:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7358:9:153","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":79991,"src":"7346:21:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75500,"name":"_setInheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76127,"src":"7332:13:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":75503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7332:36:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75504,"nodeType":"ExpressionStatement","src":"7332:36:153"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75519,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75084,"src":"7559:9:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75520,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7572:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7584:12:153","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":79987,"src":"7572:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7559:37:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":"@dev Update the state hash if changed.","id":75529,"nodeType":"IfStatement","src":"7555:110:153","trueBody":{"id":75528,"nodeType":"Block","src":"7598:67:153","statements":[{"expression":{"arguments":[{"expression":{"id":75524,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7629:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7641:12:153","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":79987,"src":"7629:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":75523,"name":"_updateStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76141,"src":"7612:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":75526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7612:42:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75527,"nodeType":"ExpressionStatement","src":"7612:42:153"}]}},{"documentation":"@dev Return hash of performed state transition.","expression":{"arguments":[{"expression":{"id":75532,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7780:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7792:7:153","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":79985,"src":"7780:19:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":75534,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7813:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7825:12:153","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":79987,"src":"7813:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75536,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7851:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7863:6:153","memberName":"exited","nodeType":"MemberAccess","referencedDeclaration":79989,"src":"7851:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":75538,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7883:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7895:9:153","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":79991,"src":"7883:21:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":75540,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7918:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7930:14:153","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79994,"src":"7918:26:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":75542,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75440,"src":"7958:11:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":75543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7970:26:153","memberName":"valueToReceiveNegativeSign","nodeType":"MemberAccess","referencedDeclaration":79996,"src":"7958:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":75544,"name":"valueClaimsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75492,"src":"8010:15:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75545,"name":"messagesHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75484,"src":"8039:18:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75530,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"7742:4:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":75531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7747:19:153","memberName":"stateTransitionHash","nodeType":"MemberAccess","referencedDeclaration":80334,"src":"7742:24:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_bool_$_t_address_$_t_uint128_$_t_bool_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,bool,address,uint128,bool,bytes32,bytes32) pure returns (bytes32)"}},"id":75546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7742:325:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75446,"id":75547,"nodeType":"Return","src":"7735:332:153"}]},"baseFunctions":[72454],"functionSelector":"084f443a","implemented":true,"kind":"function","modifiers":[{"id":75443,"kind":"modifierInvocation","modifierName":{"id":75442,"name":"onlyRouter","nameLocations":["6435:10:153"],"nodeType":"IdentifierPath","referencedDeclaration":75196,"src":"6435:10:153"},"nodeType":"ModifierInvocation","src":"6435:10:153"}],"name":"performStateTransition","nameLocation":"6328:22:153","parameters":{"id":75441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75440,"mutability":"mutable","name":"_transition","nameLocation":"6381:11:153","nodeType":"VariableDeclaration","scope":75549,"src":"6351:41:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":75439,"nodeType":"UserDefinedTypeName","pathNode":{"id":75438,"name":"Gear.StateTransition","nameLocations":["6351:4:153","6356:15:153"],"nodeType":"IdentifierPath","referencedDeclaration":80005,"src":"6351:20:153"},"referencedDeclaration":80005,"src":"6351:20:153","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"src":"6350:43:153"},"returnParameters":{"id":75446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75445,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75549,"src":"6463:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75444,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6463:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6462:9:153"},"scope":76247,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":75600,"nodeType":"FunctionDefinition","src":"8080:441:153","nodes":[],"body":{"id":75599,"nodeType":"Block","src":"8253:268:153","nodes":[],"statements":[{"assignments":[75563],"declarations":[{"constant":false,"id":75563,"mutability":"mutable","name":"_value","nameLocation":"8271:6:153","nodeType":"VariableDeclaration","scope":75599,"src":"8263:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75562,"name":"uint128","nodeType":"ElementaryTypeName","src":"8263:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75569,"initialValue":{"arguments":[{"expression":{"id":75566,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8288:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8292:5:153","memberName":"value","nodeType":"MemberAccess","src":"8288:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8280:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":75564,"name":"uint128","nodeType":"ElementaryTypeName","src":"8280:7:153","typeDescriptions":{}}},"id":75568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8280:18:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"8263:35:153"},{"expression":{"arguments":[{"id":75571,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75563,"src":"8326:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75570,"name":"_retrievingEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75273,"src":"8309:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8309:24:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75573,"nodeType":"ExpressionStatement","src":"8309:24:153"},{"assignments":[75575],"declarations":[{"constant":false,"id":75575,"mutability":"mutable","name":"id","nameLocation":"8352:2:153","nodeType":"VariableDeclaration","scope":75599,"src":"8344:10:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75574,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8344:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75587,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":75581,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8392:4:153","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$76247","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$76247","typeString":"contract Mirror"}],"id":75580,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8384:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75579,"name":"address","nodeType":"ElementaryTypeName","src":"8384:7:153","typeDescriptions":{}}},"id":75582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8384:13:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8399:7:153","subExpression":{"id":75583,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75087,"src":"8399:5:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75577,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8367:3:153","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8371:12:153","memberName":"encodePacked","nodeType":"MemberAccess","src":"8367:16:153","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":75585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8367:40:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":75576,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8357:9:153","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8357:51:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8344:64:153"},{"eventCall":{"arguments":[{"id":75589,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75575,"src":"8449:2:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75590,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8453:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8457:6:153","memberName":"sender","nodeType":"MemberAccess","src":"8453:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75592,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75551,"src":"8465:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75593,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75563,"src":"8475:6:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":75594,"name":"_callReply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75553,"src":"8483:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":75588,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72303,"src":"8424:24:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bool_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128,bool)"}},"id":75595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8424:70:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75596,"nodeType":"EmitStatement","src":"8419:75:153"},{"expression":{"id":75597,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75575,"src":"8512:2:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75561,"id":75598,"nodeType":"Return","src":"8505:9:153"}]},"implemented":true,"kind":"function","modifiers":[{"id":75556,"kind":"modifierInvocation","modifierName":{"id":75555,"name":"onlyIfActive","nameLocations":["8168:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75161,"src":"8168:12:153"},"nodeType":"ModifierInvocation","src":"8168:12:153"},{"id":75558,"kind":"modifierInvocation","modifierName":{"id":75557,"name":"onlyAfterInitMessageOrInitializer","nameLocations":["8189:33:153"],"nodeType":"IdentifierPath","referencedDeclaration":75137,"src":"8189:33:153"},"nodeType":"ModifierInvocation","src":"8189:33:153"}],"name":"_sendMessage","nameLocation":"8089:12:153","parameters":{"id":75554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75551,"mutability":"mutable","name":"_payload","nameLocation":"8117:8:153","nodeType":"VariableDeclaration","scope":75600,"src":"8102:23:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75550,"name":"bytes","nodeType":"ElementaryTypeName","src":"8102:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75553,"mutability":"mutable","name":"_callReply","nameLocation":"8132:10:153","nodeType":"VariableDeclaration","scope":75600,"src":"8127:15:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75552,"name":"bool","nodeType":"ElementaryTypeName","src":"8127:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8101:42:153"},"returnParameters":{"id":75561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75600,"src":"8240:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8240:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8239:9:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75701,"nodeType":"FunctionDefinition","src":"8729:1033:153","nodes":[],"body":{"id":75700,"nodeType":"Block","src":"8813:949:153","nodes":[],"statements":[{"assignments":[75610],"declarations":[{"constant":false,"id":75610,"mutability":"mutable","name":"len","nameLocation":"8831:3:153","nodeType":"VariableDeclaration","scope":75700,"src":"8823:11:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75609,"name":"uint256","nodeType":"ElementaryTypeName","src":"8823:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75613,"initialValue":{"expression":{"id":75611,"name":"_messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75604,"src":"8837:9:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79964_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":75612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8847:6:153","memberName":"length","nodeType":"MemberAccess","src":"8837:16:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8823:30:153"},{"assignments":[75615],"declarations":[{"constant":false,"id":75615,"mutability":"mutable","name":"messagesHashesLen","nameLocation":"8949:17:153","nodeType":"VariableDeclaration","scope":75700,"src":"8941:25:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75614,"name":"uint256","nodeType":"ElementaryTypeName","src":"8941:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75619,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75616,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75610,"src":"8969:3:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3332","id":75617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8975:2:153","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"8969:8:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8941:36:153"},{"assignments":[75621],"declarations":[{"constant":false,"id":75621,"mutability":"mutable","name":"messagesHashesMemPtr","nameLocation":"8995:20:153","nodeType":"VariableDeclaration","scope":75700,"src":"8987:28:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75620,"name":"uint256","nodeType":"ElementaryTypeName","src":"8987:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75626,"initialValue":{"arguments":[{"id":75624,"name":"messagesHashesLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75615,"src":"9034:17:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75622,"name":"Memory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40390,"src":"9018:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Memory_$40390_$","typeString":"type(library Memory)"}},"id":75623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9025:8:153","memberName":"allocate","nodeType":"MemberAccess","referencedDeclaration":40331,"src":"9018:15:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":75625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9018:34:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8987:65:153"},{"assignments":[75628],"declarations":[{"constant":false,"id":75628,"mutability":"mutable","name":"offset","nameLocation":"9071:6:153","nodeType":"VariableDeclaration","scope":75700,"src":"9063:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75627,"name":"uint256","nodeType":"ElementaryTypeName","src":"9063:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75630,"initialValue":{"hexValue":"30","id":75629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9080:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9063:18:153"},{"body":{"id":75688,"nodeType":"Block","src":"9126:534:153","statements":[{"assignments":[75645],"declarations":[{"constant":false,"id":75645,"mutability":"mutable","name":"message","nameLocation":"9162:7:153","nodeType":"VariableDeclaration","scope":75688,"src":"9140:29:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":75644,"nodeType":"UserDefinedTypeName","pathNode":{"id":75643,"name":"Gear.Message","nameLocations":["9140:4:153","9145:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79964,"src":"9140:12:153"},"referencedDeclaration":79964,"src":"9140:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"id":75649,"initialValue":{"baseExpression":{"id":75646,"name":"_messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75604,"src":"9172:9:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79964_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":75648,"indexExpression":{"id":75647,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75632,"src":"9182:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9172:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"nodeType":"VariableDeclarationStatement","src":"9140:44:153"},{"assignments":[75651],"declarations":[{"constant":false,"id":75651,"mutability":"mutable","name":"h","nameLocation":"9252:1:153","nodeType":"VariableDeclaration","scope":75688,"src":"9244:9:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75650,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9244:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75656,"initialValue":{"arguments":[{"id":75654,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75645,"src":"9273:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}],"expression":{"id":75652,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"9256:4:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":75653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9261:11:153","memberName":"messageHash","nodeType":"MemberAccess","referencedDeclaration":80274,"src":"9256:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$79964_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.Message memory) pure returns (bytes32)"}},"id":75655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9256:25:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9244:37:153"},{"expression":{"arguments":[{"id":75660,"name":"messagesHashesMemPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75621,"src":"9374:20:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":75661,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75628,"src":"9396:6:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":75664,"name":"h","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75651,"src":"9412:1:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":75663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9404:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":75662,"name":"uint256","nodeType":"ElementaryTypeName","src":"9404:7:153","typeDescriptions":{}}},"id":75665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9404:10:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75657,"name":"Memory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40390,"src":"9357:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Memory_$40390_$","typeString":"type(library Memory)"}},"id":75659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9364:9:153","memberName":"writeWord","nodeType":"MemberAccess","referencedDeclaration":40377,"src":"9357:16:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":75666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9357:58:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75667,"nodeType":"ExpressionStatement","src":"9357:58:153"},{"expression":{"id":75670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75668,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75628,"src":"9429:6:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":75669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9439:2:153","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"9429:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75671,"nodeType":"ExpressionStatement","src":"9429:12:153"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":75672,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75645,"src":"9492:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9500:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79961,"src":"9492:20:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79983_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":75674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9513:2:153","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":79980,"src":"9492:23:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9519:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9492:28:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":75686,"nodeType":"Block","src":"9591:59:153","statements":[{"expression":{"arguments":[{"id":75683,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75645,"src":"9627:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}],"id":75682,"name":"_sendReplyMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76043,"src":"9609:17:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$79964_calldata_ptr_$returns$__$","typeString":"function (struct Gear.Message calldata)"}},"id":75684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9609:26:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75685,"nodeType":"ExpressionStatement","src":"9609:26:153"}]},"id":75687,"nodeType":"IfStatement","src":"9488:162:153","trueBody":{"id":75681,"nodeType":"Block","src":"9522:63:153","statements":[{"expression":{"arguments":[{"id":75678,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75645,"src":"9562:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}],"id":75677,"name":"_sendMailboxedMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75755,"src":"9540:21:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$79964_calldata_ptr_$returns$__$","typeString":"function (struct Gear.Message calldata)"}},"id":75679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9540:30:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75680,"nodeType":"ExpressionStatement","src":"9540:30:153"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75635,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75632,"src":"9112:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":75636,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75610,"src":"9116:3:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9112:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75689,"initializationExpression":{"assignments":[75632],"declarations":[{"constant":false,"id":75632,"mutability":"mutable","name":"i","nameLocation":"9105:1:153","nodeType":"VariableDeclaration","scope":75689,"src":"9097:9:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75631,"name":"uint256","nodeType":"ElementaryTypeName","src":"9097:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75634,"initialValue":{"hexValue":"30","id":75633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9109:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9097:13:153"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":75639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9121:3:153","subExpression":{"id":75638,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75632,"src":"9121:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75640,"nodeType":"ExpressionStatement","src":"9121:3:153"},"nodeType":"ForStatement","src":"9092:568:153"},{"expression":{"arguments":[{"arguments":[{"id":75694,"name":"messagesHashesMemPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75621,"src":"9711:20:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":75695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9733:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":75696,"name":"messagesHashesLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75615,"src":"9736:17:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75692,"name":"Hashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40570,"src":"9685:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Hashes_$40570_$","typeString":"type(library Hashes)"}},"id":75693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9692:18:153","memberName":"efficientKeccak256","nodeType":"MemberAccess","referencedDeclaration":40557,"src":"9685:25:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":75697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9685:69:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9677:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75690,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9677:7:153","typeDescriptions":{}}},"id":75698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9677:78:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75608,"id":75699,"nodeType":"Return","src":"9670:85:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessages","nameLocation":"8738:13:153","parameters":{"id":75605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75604,"mutability":"mutable","name":"_messages","nameLocation":"8776:9:153","nodeType":"VariableDeclaration","scope":75701,"src":"8752:33:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79964_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message[]"},"typeName":{"baseType":{"id":75602,"nodeType":"UserDefinedTypeName","pathNode":{"id":75601,"name":"Gear.Message","nameLocations":["8752:4:153","8757:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79964,"src":"8752:12:153"},"referencedDeclaration":79964,"src":"8752:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_storage_ptr","typeString":"struct Gear.Message"}},"id":75603,"nodeType":"ArrayTypeName","src":"8752:14:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$79964_storage_$dyn_storage_ptr","typeString":"struct Gear.Message[]"}},"visibility":"internal"}],"src":"8751:35:153"},"returnParameters":{"id":75608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75607,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75701,"src":"8804:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75606,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8804:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8803:9:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75755,"nodeType":"FunctionDefinition","src":"9821:657:153","nodes":[],"body":{"id":75754,"nodeType":"Block","src":"9892:586:153","nodes":[],"statements":[{"condition":{"id":75711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9906:37:153","subExpression":{"arguments":[{"id":75709,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"9934:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}],"id":75708,"name":"_tryParseAndEmitSailsEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75938,"src":"9907:26:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$79964_calldata_ptr_$returns$_t_bool_$","typeString":"function (struct Gear.Message calldata) returns (bool)"}},"id":75710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9907:36:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75753,"nodeType":"IfStatement","src":"9902:570:153","trueBody":{"id":75752,"nodeType":"Block","src":"9945:527:153","statements":[{"condition":{"expression":{"id":75712,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"9963:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9972:4:153","memberName":"call","nodeType":"MemberAccess","referencedDeclaration":79963,"src":"9963:13:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75740,"nodeType":"IfStatement","src":"9959:407:153","trueBody":{"id":75739,"nodeType":"Block","src":"9978:388:153","statements":[{"assignments":[75715,null],"declarations":[{"constant":false,"id":75715,"mutability":"mutable","name":"success","nameLocation":"10002:7:153","nodeType":"VariableDeclaration","scope":75739,"src":"9997:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75714,"name":"bool","nodeType":"ElementaryTypeName","src":"9997:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":75724,"initialValue":{"arguments":[{"expression":{"id":75721,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"10054:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10063:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79956,"src":"10054:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"expression":{"id":75716,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"10014:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10023:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79954,"src":"10014:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10035:4:153","memberName":"call","nodeType":"MemberAccess","src":"10014:25:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":75719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10045:7:153","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"10014:39:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10014:57:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"9996:75:153"},{"condition":{"id":75726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10094:8:153","subExpression":{"id":75725,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75715,"src":"10095:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75738,"nodeType":"IfStatement","src":"10090:262:153","trueBody":{"id":75737,"nodeType":"Block","src":"10104:248:153","statements":[{"documentation":"@dev In case of failed call, we emit appropriate event to inform external users.","eventCall":{"arguments":[{"expression":{"id":75728,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"10254:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10263:2:153","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79952,"src":"10254:11:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75730,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"10267:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10276:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79954,"src":"10267:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":75732,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"10289:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10298:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"10289:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75727,"name":"MessageCallFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72351,"src":"10236:17:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint128)"}},"id":75734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10236:68:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75735,"nodeType":"EmitStatement","src":"10231:73:153"},{"functionReturnParameters":75707,"id":75736,"nodeType":"Return","src":"10327:7:153"}]}}]}},{"eventCall":{"arguments":[{"expression":{"id":75742,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"10393:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10402:2:153","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79952,"src":"10393:11:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75744,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"10406:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10415:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79954,"src":"10406:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":75746,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"10428:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10437:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79956,"src":"10428:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":75748,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"10446:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10455:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"10446:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75741,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72342,"src":"10385:7:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10385:76:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75751,"nodeType":"EmitStatement","src":"10380:81:153"}]}}]},"documentation":{"id":75702,"nodeType":"StructuredDocumentation","src":"9768:48:153","text":"@dev Value never sent since goes to mailbox."},"implemented":true,"kind":"function","modifiers":[],"name":"_sendMailboxedMessage","nameLocation":"9830:21:153","parameters":{"id":75706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75705,"mutability":"mutable","name":"_message","nameLocation":"9874:8:153","nodeType":"VariableDeclaration","scope":75755,"src":"9852:30:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":75704,"nodeType":"UserDefinedTypeName","pathNode":{"id":75703,"name":"Gear.Message","nameLocations":["9852:4:153","9857:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79964,"src":"9852:12:153"},"referencedDeclaration":79964,"src":"9852:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"src":"9851:32:153"},"returnParameters":{"id":75707,"nodeType":"ParameterList","parameters":[],"src":"9892:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75938,"nodeType":"FunctionDefinition","src":"10598:3641:153","nodes":[],"body":{"id":75937,"nodeType":"Block","src":"10689:3550:153","nodes":[],"statements":[{"assignments":[75765],"declarations":[{"constant":false,"id":75765,"mutability":"mutable","name":"payload","nameLocation":"10714:7:153","nodeType":"VariableDeclaration","scope":75937,"src":"10699:22:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75764,"name":"bytes","nodeType":"ElementaryTypeName","src":"10699:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":75768,"initialValue":{"expression":{"id":75766,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75759,"src":"10724:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10733:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79956,"src":"10724:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"nodeType":"VariableDeclarationStatement","src":"10699:41:153"},{"condition":{"id":75784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11317:86:153","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75769,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75759,"src":"11319:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11328:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79954,"src":"11319:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":75771,"name":"ETH_EVENT_ADDR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75078,"src":"11343:14:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11319:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75773,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75759,"src":"11361:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11370:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"11361:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11379:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11361:19:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11319:61:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75778,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75765,"src":"11384:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":75779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11392:6:153","memberName":"length","nodeType":"MemberAccess","src":"11384:14:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":75780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11401:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11384:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11319:83:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":75783,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11318:85:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75788,"nodeType":"IfStatement","src":"11313:129:153","trueBody":{"id":75787,"nodeType":"Block","src":"11405:37:153","statements":[{"expression":{"hexValue":"66616c7365","id":75785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11426:5:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75763,"id":75786,"nodeType":"Return","src":"11419:12:153"}]}},{"assignments":[75790],"declarations":[{"constant":false,"id":75790,"mutability":"mutable","name":"topicsLength","nameLocation":"11460:12:153","nodeType":"VariableDeclaration","scope":75937,"src":"11452:20:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75789,"name":"uint256","nodeType":"ElementaryTypeName","src":"11452:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75791,"nodeType":"VariableDeclarationStatement","src":"11452:20:153"},{"AST":{"nativeSrc":"11507:187:153","nodeType":"YulBlock","src":"11507:187:153","statements":[{"nativeSrc":"11630:54:153","nodeType":"YulAssignment","src":"11630:54:153","value":{"arguments":[{"kind":"number","nativeSrc":"11650:3:153","nodeType":"YulLiteral","src":"11650:3:153","type":"","value":"248"},{"arguments":[{"name":"payload.offset","nativeSrc":"11668:14:153","nodeType":"YulIdentifier","src":"11668:14:153"}],"functionName":{"name":"calldataload","nativeSrc":"11655:12:153","nodeType":"YulIdentifier","src":"11655:12:153"},"nativeSrc":"11655:28:153","nodeType":"YulFunctionCall","src":"11655:28:153"}],"functionName":{"name":"shr","nativeSrc":"11646:3:153","nodeType":"YulIdentifier","src":"11646:3:153"},"nativeSrc":"11646:38:153","nodeType":"YulFunctionCall","src":"11646:38:153"},"variableNames":[{"name":"topicsLength","nativeSrc":"11630:12:153","nodeType":"YulIdentifier","src":"11630:12:153"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":75765,"isOffset":true,"isSlot":false,"src":"11668:14:153","suffix":"offset","valueSize":1},{"declaration":75790,"isOffset":false,"isSlot":false,"src":"11630:12:153","valueSize":1}],"flags":["memory-safe"],"id":75792,"nodeType":"InlineAssembly","src":"11482:212:153"},{"condition":{"id":75801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11708:41:153","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75793,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75790,"src":"11710:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"31","id":75794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11726:1:153","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11710:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75796,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75790,"src":"11731:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"34","id":75797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11747:1:153","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11731:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11710:38:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":75800,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11709:40:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75805,"nodeType":"IfStatement","src":"11704:84:153","trueBody":{"id":75804,"nodeType":"Block","src":"11751:37:153","statements":[{"expression":{"hexValue":"66616c7365","id":75802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11772:5:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75763,"id":75803,"nodeType":"Return","src":"11765:12:153"}]}},{"assignments":[75807],"declarations":[{"constant":false,"id":75807,"mutability":"mutable","name":"topicsLengthInBytes","nameLocation":"11806:19:153","nodeType":"VariableDeclaration","scope":75937,"src":"11798:27:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75806,"name":"uint256","nodeType":"ElementaryTypeName","src":"11798:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75808,"nodeType":"VariableDeclarationStatement","src":"11798:27:153"},{"id":75817,"nodeType":"UncheckedBlock","src":"11835:78:153","statements":[{"expression":{"id":75815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75809,"name":"topicsLengthInBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75807,"src":"11859:19:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":75810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11881:1:153","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75811,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75790,"src":"11885:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3332","id":75812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11900:2:153","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11885:17:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11881:21:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11859:43:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75816,"nodeType":"ExpressionStatement","src":"11859:43:153"}]},{"condition":{"id":75823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11927:40:153","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75818,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75765,"src":"11929:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":75819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11937:6:153","memberName":"length","nodeType":"MemberAccess","src":"11929:14:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":75820,"name":"topicsLengthInBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75807,"src":"11947:19:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11929:37:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":75822,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11928:39:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75827,"nodeType":"IfStatement","src":"11923:83:153","trueBody":{"id":75826,"nodeType":"Block","src":"11969:37:153","statements":[{"expression":{"hexValue":"66616c7365","id":75824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11990:5:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75763,"id":75825,"nodeType":"Return","src":"11983:12:153"}]}},{"assignments":[75829],"declarations":[{"constant":false,"id":75829,"mutability":"mutable","name":"topic1","nameLocation":"12080:6:153","nodeType":"VariableDeclaration","scope":75937,"src":"12072:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75828,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12072:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75830,"nodeType":"VariableDeclarationStatement","src":"12072:14:153"},{"AST":{"nativeSrc":"12121:70:153","nodeType":"YulBlock","src":"12121:70:153","statements":[{"nativeSrc":"12135:46:153","nodeType":"YulAssignment","src":"12135:46:153","value":{"arguments":[{"arguments":[{"name":"payload.offset","nativeSrc":"12162:14:153","nodeType":"YulIdentifier","src":"12162:14:153"},{"kind":"number","nativeSrc":"12178:1:153","nodeType":"YulLiteral","src":"12178:1:153","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"12158:3:153","nodeType":"YulIdentifier","src":"12158:3:153"},"nativeSrc":"12158:22:153","nodeType":"YulFunctionCall","src":"12158:22:153"}],"functionName":{"name":"calldataload","nativeSrc":"12145:12:153","nodeType":"YulIdentifier","src":"12145:12:153"},"nativeSrc":"12145:36:153","nodeType":"YulFunctionCall","src":"12145:36:153"},"variableNames":[{"name":"topic1","nativeSrc":"12135:6:153","nodeType":"YulIdentifier","src":"12135:6:153"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":75765,"isOffset":true,"isSlot":false,"src":"12162:14:153","suffix":"offset","valueSize":1},{"declaration":75829,"isOffset":false,"isSlot":false,"src":"12135:6:153","valueSize":1}],"flags":["memory-safe"],"id":75831,"nodeType":"InlineAssembly","src":"12096:95:153"},{"condition":{"id":75877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12445:447:153","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75832,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75829,"src":"12447:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75833,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72290,"src":"12457:12:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":75834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12470:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12457:21:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12447:31:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75836,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75829,"src":"12482:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75837,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72303,"src":"12492:24:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bool_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128,bool)"}},"id":75838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12517:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12492:33:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12482:43:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:78:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75841,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75829,"src":"12549:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75842,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72314,"src":"12559:22:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12582:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12559:31:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12549:41:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:143:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75846,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75829,"src":"12594:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75847,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72321,"src":"12604:22:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":75848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12627:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12604:31:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12594:41:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:188:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75851,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75829,"src":"12659:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75852,"name":"OwnedBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72326,"src":"12669:26:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12696:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12669:35:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12659:45:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:257:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75856,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75829,"src":"12728:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75857,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72331,"src":"12738:31:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12770:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12738:40:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12728:50:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:331:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75861,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75829,"src":"12782:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75862,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72342,"src":"12792:7:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12800:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12792:16:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12782:26:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:361:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75866,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75829,"src":"12832:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75867,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72362,"src":"12842:5:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":75868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12848:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12842:14:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12832:24:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:409:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75871,"name":"topic1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75829,"src":"12860:6:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":75872,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72378,"src":"12870:12:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":75873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12883:8:153","memberName":"selector","nodeType":"MemberAccess","src":"12870:21:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12860:31:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12447:444:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":75876,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12446:446:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":" @dev SECURITY:\n Very important check because custom events can match our hashes!\n If we miss even 1 event that is emitted by Mirror, user will be able to fake protocol logic!","id":75881,"nodeType":"IfStatement","src":"12441:490:153","trueBody":{"id":75880,"nodeType":"Block","src":"12894:37:153","statements":[{"expression":{"hexValue":"66616c7365","id":75878,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12915:5:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75763,"id":75879,"nodeType":"Return","src":"12908:12:153"}]}},{"assignments":[75883],"declarations":[{"constant":false,"id":75883,"mutability":"mutable","name":"size","nameLocation":"12949:4:153","nodeType":"VariableDeclaration","scope":75937,"src":"12941:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75882,"name":"uint256","nodeType":"ElementaryTypeName","src":"12941:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75884,"nodeType":"VariableDeclarationStatement","src":"12941:12:153"},{"id":75892,"nodeType":"UncheckedBlock","src":"12963:78:153","statements":[{"expression":{"id":75890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75885,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75883,"src":"12987:4:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75886,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75765,"src":"12994:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":75887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13002:6:153","memberName":"length","nodeType":"MemberAccess","src":"12994:14:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":75888,"name":"topicsLengthInBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75807,"src":"13011:19:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12994:36:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12987:43:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75891,"nodeType":"ExpressionStatement","src":"12987:43:153"}]},{"assignments":[75894],"declarations":[{"constant":false,"id":75894,"mutability":"mutable","name":"memPtr","nameLocation":"13059:6:153","nodeType":"VariableDeclaration","scope":75937,"src":"13051:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75893,"name":"uint256","nodeType":"ElementaryTypeName","src":"13051:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75899,"initialValue":{"arguments":[{"id":75897,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75883,"src":"13084:4:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75895,"name":"Memory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40390,"src":"13068:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Memory_$40390_$","typeString":"type(library Memory)"}},"id":75896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13075:8:153","memberName":"allocate","nodeType":"MemberAccess","referencedDeclaration":40331,"src":"13068:15:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":75898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13068:21:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13051:38:153"},{"AST":{"nativeSrc":"13124:92:153","nodeType":"YulBlock","src":"13124:92:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"13151:6:153","nodeType":"YulIdentifier","src":"13151:6:153"},{"arguments":[{"name":"payload.offset","nativeSrc":"13163:14:153","nodeType":"YulIdentifier","src":"13163:14:153"},{"name":"topicsLengthInBytes","nativeSrc":"13179:19:153","nodeType":"YulIdentifier","src":"13179:19:153"}],"functionName":{"name":"add","nativeSrc":"13159:3:153","nodeType":"YulIdentifier","src":"13159:3:153"},"nativeSrc":"13159:40:153","nodeType":"YulFunctionCall","src":"13159:40:153"},{"name":"size","nativeSrc":"13201:4:153","nodeType":"YulIdentifier","src":"13201:4:153"}],"functionName":{"name":"calldatacopy","nativeSrc":"13138:12:153","nodeType":"YulIdentifier","src":"13138:12:153"},"nativeSrc":"13138:68:153","nodeType":"YulFunctionCall","src":"13138:68:153"},"nativeSrc":"13138:68:153","nodeType":"YulExpressionStatement","src":"13138:68:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75894,"isOffset":false,"isSlot":false,"src":"13151:6:153","valueSize":1},{"declaration":75765,"isOffset":true,"isSlot":false,"src":"13163:14:153","suffix":"offset","valueSize":1},{"declaration":75883,"isOffset":false,"isSlot":false,"src":"13201:4:153","valueSize":1},{"declaration":75807,"isOffset":false,"isSlot":false,"src":"13179:19:153","valueSize":1}],"flags":["memory-safe"],"id":75900,"nodeType":"InlineAssembly","src":"13099:117:153"},{"assignments":[75902],"declarations":[{"constant":false,"id":75902,"mutability":"mutable","name":"topic2","nameLocation":"13335:6:153","nodeType":"VariableDeclaration","scope":75937,"src":"13327:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75901,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13327:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75903,"nodeType":"VariableDeclarationStatement","src":"13327:14:153"},{"assignments":[75905],"declarations":[{"constant":false,"id":75905,"mutability":"mutable","name":"topic3","nameLocation":"13359:6:153","nodeType":"VariableDeclaration","scope":75937,"src":"13351:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75904,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13351:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75906,"nodeType":"VariableDeclarationStatement","src":"13351:14:153"},{"assignments":[75908],"declarations":[{"constant":false,"id":75908,"mutability":"mutable","name":"topic4","nameLocation":"13383:6:153","nodeType":"VariableDeclaration","scope":75937,"src":"13375:14:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75907,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13375:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75909,"nodeType":"VariableDeclarationStatement","src":"13375:14:153"},{"AST":{"nativeSrc":"13424:191:153","nodeType":"YulBlock","src":"13424:191:153","statements":[{"nativeSrc":"13438:47:153","nodeType":"YulAssignment","src":"13438:47:153","value":{"arguments":[{"arguments":[{"name":"payload.offset","nativeSrc":"13465:14:153","nodeType":"YulIdentifier","src":"13465:14:153"},{"kind":"number","nativeSrc":"13481:2:153","nodeType":"YulLiteral","src":"13481:2:153","type":"","value":"33"}],"functionName":{"name":"add","nativeSrc":"13461:3:153","nodeType":"YulIdentifier","src":"13461:3:153"},"nativeSrc":"13461:23:153","nodeType":"YulFunctionCall","src":"13461:23:153"}],"functionName":{"name":"calldataload","nativeSrc":"13448:12:153","nodeType":"YulIdentifier","src":"13448:12:153"},"nativeSrc":"13448:37:153","nodeType":"YulFunctionCall","src":"13448:37:153"},"variableNames":[{"name":"topic2","nativeSrc":"13438:6:153","nodeType":"YulIdentifier","src":"13438:6:153"}]},{"nativeSrc":"13498:47:153","nodeType":"YulAssignment","src":"13498:47:153","value":{"arguments":[{"arguments":[{"name":"payload.offset","nativeSrc":"13525:14:153","nodeType":"YulIdentifier","src":"13525:14:153"},{"kind":"number","nativeSrc":"13541:2:153","nodeType":"YulLiteral","src":"13541:2:153","type":"","value":"65"}],"functionName":{"name":"add","nativeSrc":"13521:3:153","nodeType":"YulIdentifier","src":"13521:3:153"},"nativeSrc":"13521:23:153","nodeType":"YulFunctionCall","src":"13521:23:153"}],"functionName":{"name":"calldataload","nativeSrc":"13508:12:153","nodeType":"YulIdentifier","src":"13508:12:153"},"nativeSrc":"13508:37:153","nodeType":"YulFunctionCall","src":"13508:37:153"},"variableNames":[{"name":"topic3","nativeSrc":"13498:6:153","nodeType":"YulIdentifier","src":"13498:6:153"}]},{"nativeSrc":"13558:47:153","nodeType":"YulAssignment","src":"13558:47:153","value":{"arguments":[{"arguments":[{"name":"payload.offset","nativeSrc":"13585:14:153","nodeType":"YulIdentifier","src":"13585:14:153"},{"kind":"number","nativeSrc":"13601:2:153","nodeType":"YulLiteral","src":"13601:2:153","type":"","value":"97"}],"functionName":{"name":"add","nativeSrc":"13581:3:153","nodeType":"YulIdentifier","src":"13581:3:153"},"nativeSrc":"13581:23:153","nodeType":"YulFunctionCall","src":"13581:23:153"}],"functionName":{"name":"calldataload","nativeSrc":"13568:12:153","nodeType":"YulIdentifier","src":"13568:12:153"},"nativeSrc":"13568:37:153","nodeType":"YulFunctionCall","src":"13568:37:153"},"variableNames":[{"name":"topic4","nativeSrc":"13558:6:153","nodeType":"YulIdentifier","src":"13558:6:153"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":75765,"isOffset":true,"isSlot":false,"src":"13465:14:153","suffix":"offset","valueSize":1},{"declaration":75765,"isOffset":true,"isSlot":false,"src":"13525:14:153","suffix":"offset","valueSize":1},{"declaration":75765,"isOffset":true,"isSlot":false,"src":"13585:14:153","suffix":"offset","valueSize":1},{"declaration":75902,"isOffset":false,"isSlot":false,"src":"13438:6:153","valueSize":1},{"declaration":75905,"isOffset":false,"isSlot":false,"src":"13498:6:153","valueSize":1},{"declaration":75908,"isOffset":false,"isSlot":false,"src":"13558:6:153","valueSize":1}],"flags":["memory-safe"],"id":75910,"nodeType":"InlineAssembly","src":"13399:216:153"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75911,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75790,"src":"13629:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":75912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13645:1:153","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13629:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75916,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75790,"src":"13765:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"32","id":75917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13781:1:153","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"13765:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75921,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75790,"src":"13909:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"33","id":75922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13925:1:153","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"13909:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75926,"name":"topicsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75790,"src":"14061:12:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"34","id":75927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14077:1:153","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"14061:17:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75931,"nodeType":"IfStatement","src":"14057:154:153","trueBody":{"id":75930,"nodeType":"Block","src":"14080:131:153","statements":[{"AST":{"nativeSrc":"14119:82:153","nodeType":"YulBlock","src":"14119:82:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"14142:6:153","nodeType":"YulIdentifier","src":"14142:6:153"},{"name":"size","nativeSrc":"14150:4:153","nodeType":"YulIdentifier","src":"14150:4:153"},{"name":"topic1","nativeSrc":"14156:6:153","nodeType":"YulIdentifier","src":"14156:6:153"},{"name":"topic2","nativeSrc":"14164:6:153","nodeType":"YulIdentifier","src":"14164:6:153"},{"name":"topic3","nativeSrc":"14172:6:153","nodeType":"YulIdentifier","src":"14172:6:153"},{"name":"topic4","nativeSrc":"14180:6:153","nodeType":"YulIdentifier","src":"14180:6:153"}],"functionName":{"name":"log4","nativeSrc":"14137:4:153","nodeType":"YulIdentifier","src":"14137:4:153"},"nativeSrc":"14137:50:153","nodeType":"YulFunctionCall","src":"14137:50:153"},"nativeSrc":"14137:50:153","nodeType":"YulExpressionStatement","src":"14137:50:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75894,"isOffset":false,"isSlot":false,"src":"14142:6:153","valueSize":1},{"declaration":75883,"isOffset":false,"isSlot":false,"src":"14150:4:153","valueSize":1},{"declaration":75829,"isOffset":false,"isSlot":false,"src":"14156:6:153","valueSize":1},{"declaration":75902,"isOffset":false,"isSlot":false,"src":"14164:6:153","valueSize":1},{"declaration":75905,"isOffset":false,"isSlot":false,"src":"14172:6:153","valueSize":1},{"declaration":75908,"isOffset":false,"isSlot":false,"src":"14180:6:153","valueSize":1}],"flags":["memory-safe"],"id":75929,"nodeType":"InlineAssembly","src":"14094:107:153"}]}},"id":75932,"nodeType":"IfStatement","src":"13905:306:153","trueBody":{"id":75925,"nodeType":"Block","src":"13928:123:153","statements":[{"AST":{"nativeSrc":"13967:74:153","nodeType":"YulBlock","src":"13967:74:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"13990:6:153","nodeType":"YulIdentifier","src":"13990:6:153"},{"name":"size","nativeSrc":"13998:4:153","nodeType":"YulIdentifier","src":"13998:4:153"},{"name":"topic1","nativeSrc":"14004:6:153","nodeType":"YulIdentifier","src":"14004:6:153"},{"name":"topic2","nativeSrc":"14012:6:153","nodeType":"YulIdentifier","src":"14012:6:153"},{"name":"topic3","nativeSrc":"14020:6:153","nodeType":"YulIdentifier","src":"14020:6:153"}],"functionName":{"name":"log3","nativeSrc":"13985:4:153","nodeType":"YulIdentifier","src":"13985:4:153"},"nativeSrc":"13985:42:153","nodeType":"YulFunctionCall","src":"13985:42:153"},"nativeSrc":"13985:42:153","nodeType":"YulExpressionStatement","src":"13985:42:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75894,"isOffset":false,"isSlot":false,"src":"13990:6:153","valueSize":1},{"declaration":75883,"isOffset":false,"isSlot":false,"src":"13998:4:153","valueSize":1},{"declaration":75829,"isOffset":false,"isSlot":false,"src":"14004:6:153","valueSize":1},{"declaration":75902,"isOffset":false,"isSlot":false,"src":"14012:6:153","valueSize":1},{"declaration":75905,"isOffset":false,"isSlot":false,"src":"14020:6:153","valueSize":1}],"flags":["memory-safe"],"id":75924,"nodeType":"InlineAssembly","src":"13942:99:153"}]}},"id":75933,"nodeType":"IfStatement","src":"13761:450:153","trueBody":{"id":75920,"nodeType":"Block","src":"13784:115:153","statements":[{"AST":{"nativeSrc":"13823:66:153","nodeType":"YulBlock","src":"13823:66:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"13846:6:153","nodeType":"YulIdentifier","src":"13846:6:153"},{"name":"size","nativeSrc":"13854:4:153","nodeType":"YulIdentifier","src":"13854:4:153"},{"name":"topic1","nativeSrc":"13860:6:153","nodeType":"YulIdentifier","src":"13860:6:153"},{"name":"topic2","nativeSrc":"13868:6:153","nodeType":"YulIdentifier","src":"13868:6:153"}],"functionName":{"name":"log2","nativeSrc":"13841:4:153","nodeType":"YulIdentifier","src":"13841:4:153"},"nativeSrc":"13841:34:153","nodeType":"YulFunctionCall","src":"13841:34:153"},"nativeSrc":"13841:34:153","nodeType":"YulExpressionStatement","src":"13841:34:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75894,"isOffset":false,"isSlot":false,"src":"13846:6:153","valueSize":1},{"declaration":75883,"isOffset":false,"isSlot":false,"src":"13854:4:153","valueSize":1},{"declaration":75829,"isOffset":false,"isSlot":false,"src":"13860:6:153","valueSize":1},{"declaration":75902,"isOffset":false,"isSlot":false,"src":"13868:6:153","valueSize":1}],"flags":["memory-safe"],"id":75919,"nodeType":"InlineAssembly","src":"13798:91:153"}]}},"id":75934,"nodeType":"IfStatement","src":"13625:586:153","trueBody":{"id":75915,"nodeType":"Block","src":"13648:107:153","statements":[{"AST":{"nativeSrc":"13687:58:153","nodeType":"YulBlock","src":"13687:58:153","statements":[{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"13710:6:153","nodeType":"YulIdentifier","src":"13710:6:153"},{"name":"size","nativeSrc":"13718:4:153","nodeType":"YulIdentifier","src":"13718:4:153"},{"name":"topic1","nativeSrc":"13724:6:153","nodeType":"YulIdentifier","src":"13724:6:153"}],"functionName":{"name":"log1","nativeSrc":"13705:4:153","nodeType":"YulIdentifier","src":"13705:4:153"},"nativeSrc":"13705:26:153","nodeType":"YulFunctionCall","src":"13705:26:153"},"nativeSrc":"13705:26:153","nodeType":"YulExpressionStatement","src":"13705:26:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":75894,"isOffset":false,"isSlot":false,"src":"13710:6:153","valueSize":1},{"declaration":75883,"isOffset":false,"isSlot":false,"src":"13718:4:153","valueSize":1},{"declaration":75829,"isOffset":false,"isSlot":false,"src":"13724:6:153","valueSize":1}],"flags":["memory-safe"],"id":75914,"nodeType":"InlineAssembly","src":"13662:83:153"}]}},{"expression":{"hexValue":"74727565","id":75935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14228:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":75763,"id":75936,"nodeType":"Return","src":"14221:11:153"}]},"documentation":{"id":75756,"nodeType":"StructuredDocumentation","src":"10484:109:153","text":"@dev Tries to parse and emit Sails Event. Returns `true` in case of success and `false` in case of error."},"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseAndEmitSailsEvent","nameLocation":"10607:26:153","parameters":{"id":75760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75759,"mutability":"mutable","name":"_message","nameLocation":"10656:8:153","nodeType":"VariableDeclaration","scope":75938,"src":"10634:30:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":75758,"nodeType":"UserDefinedTypeName","pathNode":{"id":75757,"name":"Gear.Message","nameLocations":["10634:4:153","10639:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79964,"src":"10634:12:153"},"referencedDeclaration":79964,"src":"10634:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"src":"10633:32:153"},"returnParameters":{"id":75763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75762,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75938,"src":"10683:4:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75761,"name":"bool","nodeType":"ElementaryTypeName","src":"10683:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10682:6:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76043,"nodeType":"FunctionDefinition","src":"14314:1288:153","nodes":[],"body":{"id":76042,"nodeType":"Block","src":"14381:1221:153","nodes":[],"statements":[{"condition":{"expression":{"id":75945,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"14395:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14404:4:153","memberName":"call","nodeType":"MemberAccess","referencedDeclaration":79963,"src":"14395:13:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":76040,"nodeType":"Block","src":"15406:190:153","statements":[{"expression":{"arguments":[{"expression":{"id":76021,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15435:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15444:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79954,"src":"15435:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76023,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15457:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15466:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"15457:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76020,"name":"_transferEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76189,"src":"15420:14:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":76025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15420:52:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76026,"nodeType":"ExpressionStatement","src":"15420:52:153"},{"eventCall":{"arguments":[{"expression":{"id":76028,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15498:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15507:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79956,"src":"15498:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":76030,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15516:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15525:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"15516:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":76032,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15532:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15541:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79961,"src":"15532:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79983_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15554:2:153","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":79980,"src":"15532:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":76035,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15558:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15567:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79961,"src":"15558:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79983_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15580:4:153","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":79982,"src":"15558:26:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":76027,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72362,"src":"15492:5:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":76038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15492:93:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76039,"nodeType":"EmitStatement","src":"15487:98:153"}]},"id":76041,"nodeType":"IfStatement","src":"14391:1205:153","trueBody":{"id":76019,"nodeType":"Block","src":"14410:990:153","statements":[{"assignments":[75948],"declarations":[{"constant":false,"id":75948,"mutability":"mutable","name":"isSuccessReply","nameLocation":"14429:14:153","nodeType":"VariableDeclaration","scope":76019,"src":"14424:19:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75947,"name":"bool","nodeType":"ElementaryTypeName","src":"14424:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75956,"initialValue":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":75955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":75949,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"14446:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14455:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79961,"src":"14446:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79983_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":75951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14468:4:153","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":79982,"src":"14446:26:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":75953,"indexExpression":{"hexValue":"30","id":75952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14473:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14446:29:153","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14479:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14446:34:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"14424:56:153"},{"assignments":[75958],"declarations":[{"constant":false,"id":75958,"mutability":"mutable","name":"payload","nameLocation":"14508:7:153","nodeType":"VariableDeclaration","scope":76019,"src":"14495:20:153","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":75957,"name":"bytes","nodeType":"ElementaryTypeName","src":"14495:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":75959,"nodeType":"VariableDeclarationStatement","src":"14495:20:153"},{"condition":{"id":75960,"name":"isSuccessReply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75948,"src":"14534:14:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":75983,"nodeType":"Block","src":"14615:348:153","statements":[{"expression":{"id":75981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75967,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75958,"src":"14785:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":75970,"name":"ICallbacks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":71919,"src":"14839:10:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICallbacks_$71919_$","typeString":"type(contract ICallbacks)"}},"id":75971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14850:12:153","memberName":"onErrorReply","nodeType":"MemberAccess","referencedDeclaration":71918,"src":"14839:23:153","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes4_$returns$__$","typeString":"function ICallbacks.onErrorReply(bytes32,bytes calldata,bytes4)"}},"id":75972,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14863:8:153","memberName":"selector","nodeType":"MemberAccess","src":"14839:32:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"expression":{"id":75973,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"14873:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14882:2:153","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79952,"src":"14873:11:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":75975,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"14886:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14895:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79956,"src":"14886:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"expression":{"id":75977,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"14904:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14913:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79961,"src":"14904:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79983_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":75979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14926:4:153","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":79982,"src":"14904:26:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":75968,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14795:3:153","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14799:18:153","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"14795:22:153","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":75980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14795:153:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"14785:163:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":75982,"nodeType":"ExpressionStatement","src":"14785:163:153"}]},"id":75984,"nodeType":"IfStatement","src":"14530:433:153","trueBody":{"id":75966,"nodeType":"Block","src":"14550:59:153","statements":[{"expression":{"id":75964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75961,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75958,"src":"14568:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":75962,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"14578:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14587:7:153","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":79956,"src":"14578:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"14568:26:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":75965,"nodeType":"ExpressionStatement","src":"14568:26:153"}]}},{"assignments":[75986,null],"declarations":[{"constant":false,"id":75986,"mutability":"mutable","name":"success","nameLocation":"14983:7:153","nodeType":"VariableDeclaration","scope":76019,"src":"14978:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75985,"name":"bool","nodeType":"ElementaryTypeName","src":"14978:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":75996,"initialValue":{"arguments":[{"id":75994,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75958,"src":"15058:7:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"expression":{"id":75987,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"14995:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15004:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79954,"src":"14995:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15016:4:153","memberName":"call","nodeType":"MemberAccess","src":"14995:25:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas","value"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":75990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15026:7:153","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"},{"expression":{"id":75991,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15042:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":75992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15051:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"15042:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"14995:62:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gasvalue","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":75995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14995:71:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"14977:89:153"},{"condition":{"id":75998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"15085:8:153","subExpression":{"id":75997,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75986,"src":"15086:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76018,"nodeType":"IfStatement","src":"15081:309:153","trueBody":{"id":76017,"nodeType":"Block","src":"15095:295:153","statements":[{"expression":{"arguments":[{"expression":{"id":76000,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15128:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15137:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":79954,"src":"15128:20:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76002,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15150:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15159:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"15150:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75999,"name":"_transferEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76189,"src":"15113:14:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":76004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15113:52:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76005,"nodeType":"ExpressionStatement","src":"15113:52:153"},{"documentation":"@dev In case of failed call, we emit appropriate event to inform external users.","eventCall":{"arguments":[{"expression":{"id":76007,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15306:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15315:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"15306:14:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":76009,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15322:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15331:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79961,"src":"15322:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79983_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15344:2:153","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":79980,"src":"15322:24:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":76012,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75942,"src":"15348:8:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15357:12:153","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":79961,"src":"15348:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$79983_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15370:4:153","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":79982,"src":"15348:26:153","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":76006,"name":"ReplyCallFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72371,"src":"15290:15:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (uint128,bytes32,bytes4)"}},"id":76015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15290:85:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76016,"nodeType":"EmitStatement","src":"15285:90:153"}]}}]}}]},"documentation":{"id":75939,"nodeType":"StructuredDocumentation","src":"14245:64:153","text":"@dev Non-zero value always sent since never goes to mailbox."},"implemented":true,"kind":"function","modifiers":[],"name":"_sendReplyMessage","nameLocation":"14323:17:153","parameters":{"id":75943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75942,"mutability":"mutable","name":"_message","nameLocation":"14363:8:153","nodeType":"VariableDeclaration","scope":76043,"src":"14341:30:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":75941,"nodeType":"UserDefinedTypeName","pathNode":{"id":75940,"name":"Gear.Message","nameLocations":["14341:4:153","14346:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":79964,"src":"14341:12:153"},"referencedDeclaration":79964,"src":"14341:12:153","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$79964_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"src":"14340:32:153"},"returnParameters":{"id":75944,"nodeType":"ParameterList","parameters":[],"src":"14381:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76108,"nodeType":"FunctionDefinition","src":"15705:514:153","nodes":[],"body":{"id":76107,"nodeType":"Block","src":"15789:430:153","nodes":[],"statements":[{"assignments":[76053],"declarations":[{"constant":false,"id":76053,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"15812:16:153","nodeType":"VariableDeclaration","scope":76107,"src":"15799:29:153","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76052,"name":"bytes","nodeType":"ElementaryTypeName","src":"15799:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76054,"nodeType":"VariableDeclarationStatement","src":"15799:29:153"},{"body":{"id":76101,"nodeType":"Block","src":"15884:284:153","statements":[{"assignments":[76070],"declarations":[{"constant":false,"id":76070,"mutability":"mutable","name":"claim","nameLocation":"15923:5:153","nodeType":"VariableDeclaration","scope":76101,"src":"15898:30:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80041_calldata_ptr","typeString":"struct Gear.ValueClaim"},"typeName":{"id":76069,"nodeType":"UserDefinedTypeName","pathNode":{"id":76068,"name":"Gear.ValueClaim","nameLocations":["15898:4:153","15903:10:153"],"nodeType":"IdentifierPath","referencedDeclaration":80041,"src":"15898:15:153"},"referencedDeclaration":80041,"src":"15898:15:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80041_storage_ptr","typeString":"struct Gear.ValueClaim"}},"visibility":"internal"}],"id":76074,"initialValue":{"baseExpression":{"id":76071,"name":"_claims","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76047,"src":"15931:7:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80041_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":76073,"indexExpression":{"id":76072,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76056,"src":"15939:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15931:10:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80041_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"15898:43:153"},{"expression":{"id":76085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76075,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76053,"src":"15956:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76079,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76053,"src":"15988:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76082,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76070,"src":"16027:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80041_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValueClaim_$80041_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}],"expression":{"id":76080,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"16006:4:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":76081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16011:15:153","memberName":"valueClaimBytes","nodeType":"MemberAccess","referencedDeclaration":80808,"src":"16006:20:153","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ValueClaim_$80041_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct Gear.ValueClaim memory) pure returns (bytes memory)"}},"id":76083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16006:27:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":76077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15975:5:153","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76076,"name":"bytes","nodeType":"ElementaryTypeName","src":"15975:5:153","typeDescriptions":{}}},"id":76078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15981:6:153","memberName":"concat","nodeType":"MemberAccess","src":"15975:12:153","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15975:59:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"15956:78:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76086,"nodeType":"ExpressionStatement","src":"15956:78:153"},{"expression":{"arguments":[{"expression":{"id":76088,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76070,"src":"16064:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80041_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16070:11:153","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":80038,"src":"16064:17:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76090,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76070,"src":"16083:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80041_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16089:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":80040,"src":"16083:11:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76087,"name":"_transferEther","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76189,"src":"16049:14:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":76092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16049:46:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76093,"nodeType":"ExpressionStatement","src":"16049:46:153"},{"eventCall":{"arguments":[{"expression":{"id":76095,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76070,"src":"16128:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80041_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16134:9:153","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":80036,"src":"16128:15:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76097,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76070,"src":"16145:5:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80041_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16151:5:153","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":80040,"src":"16145:11:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76094,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72378,"src":"16115:12:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":76099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16115:42:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76100,"nodeType":"EmitStatement","src":"16110:47:153"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76059,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76056,"src":"15859:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76060,"name":"_claims","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76047,"src":"15863:7:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80041_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":76061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15871:6:153","memberName":"length","nodeType":"MemberAccess","src":"15863:14:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15859:18:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76102,"initializationExpression":{"assignments":[76056],"declarations":[{"constant":false,"id":76056,"mutability":"mutable","name":"i","nameLocation":"15852:1:153","nodeType":"VariableDeclaration","scope":76102,"src":"15844:9:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76055,"name":"uint256","nodeType":"ElementaryTypeName","src":"15844:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76058,"initialValue":{"hexValue":"30","id":76057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15856:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15844:13:153"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15879:3:153","subExpression":{"id":76063,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76056,"src":"15879:1:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76065,"nodeType":"ExpressionStatement","src":"15879:3:153"},"nodeType":"ForStatement","src":"15839:329:153"},{"expression":{"arguments":[{"id":76104,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76053,"src":"16195:16:153","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76103,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16185:9:153","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16185:27:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76051,"id":76106,"nodeType":"Return","src":"16178:34:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_claimValues","nameLocation":"15714:12:153","parameters":{"id":76048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76047,"mutability":"mutable","name":"_claims","nameLocation":"15754:7:153","nodeType":"VariableDeclaration","scope":76108,"src":"15727:34:153","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80041_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim[]"},"typeName":{"baseType":{"id":76045,"nodeType":"UserDefinedTypeName","pathNode":{"id":76044,"name":"Gear.ValueClaim","nameLocations":["15727:4:153","15732:10:153"],"nodeType":"IdentifierPath","referencedDeclaration":80041,"src":"15727:15:153"},"referencedDeclaration":80041,"src":"15727:15:153","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$80041_storage_ptr","typeString":"struct Gear.ValueClaim"}},"id":76046,"nodeType":"ArrayTypeName","src":"15727:17:153","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$80041_storage_$dyn_storage_ptr","typeString":"struct Gear.ValueClaim[]"}},"visibility":"internal"}],"src":"15726:36:153"},"returnParameters":{"id":76051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76050,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76108,"src":"15780:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76049,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15780:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15779:9:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76127,"nodeType":"FunctionDefinition","src":"16280:267:153","nodes":[],"body":{"id":76126,"nodeType":"Block","src":"16344:203:153","nodes":[],"statements":[{"documentation":"@dev Set inheritor.","expression":{"id":76117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76115,"name":"exited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75090,"src":"16386:6:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":76116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16395:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"16386:13:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76118,"nodeType":"ExpressionStatement","src":"16386:13:153"},{"expression":{"id":76121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76119,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75093,"src":"16409:9:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76120,"name":"_inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76110,"src":"16421:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16409:22:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":76122,"nodeType":"ExpressionStatement","src":"16409:22:153"},{"documentation":"@dev Transfer all available balance to the inheritor.","expression":{"arguments":[],"expression":{"argumentTypes":[],"id":76123,"name":"transferLockedValueToInheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75373,"src":"16508:30:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":76124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16508:32:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76125,"nodeType":"ExpressionStatement","src":"16508:32:153"}]},"implemented":true,"kind":"function","modifiers":[{"id":76113,"kind":"modifierInvocation","modifierName":{"id":76112,"name":"onlyIfActive","nameLocations":["16331:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":75161,"src":"16331:12:153"},"nodeType":"ModifierInvocation","src":"16331:12:153"}],"name":"_setInheritor","nameLocation":"16289:13:153","parameters":{"id":76111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76110,"mutability":"mutable","name":"_inheritor","nameLocation":"16311:10:153","nodeType":"VariableDeclaration","scope":76127,"src":"16303:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76109,"name":"address","nodeType":"ElementaryTypeName","src":"16303:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16302:20:153"},"returnParameters":{"id":76114,"nodeType":"ParameterList","parameters":[],"src":"16344:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76141,"nodeType":"FunctionDefinition","src":"16553:235:153","nodes":[],"body":{"id":76140,"nodeType":"Block","src":"16607:181:153","nodes":[],"statements":[{"documentation":"@dev Set state hash.","expression":{"id":76134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76132,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75084,"src":"16650:9:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76133,"name":"_stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76129,"src":"16662:10:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16650:22:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":76135,"nodeType":"ExpressionStatement","src":"16650:22:153"},{"documentation":"@dev Emits an event signaling that the state has changed.","eventCall":{"arguments":[{"id":76137,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75084,"src":"16771:9:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76136,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72290,"src":"16758:12:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":76138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16758:23:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76139,"nodeType":"EmitStatement","src":"16753:28:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_updateStateHash","nameLocation":"16562:16:153","parameters":{"id":76130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76129,"mutability":"mutable","name":"_stateHash","nameLocation":"16587:10:153","nodeType":"VariableDeclaration","scope":76141,"src":"16579:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76128,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16579:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16578:20:153"},"returnParameters":{"id":76131,"nodeType":"ParameterList","parameters":[],"src":"16607:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76162,"nodeType":"FunctionDefinition","src":"16828:182:153","nodes":[],"body":{"id":76161,"nodeType":"Block","src":"16900:110:153","nodes":[],"statements":[{"assignments":[76150],"declarations":[{"constant":false,"id":76150,"mutability":"mutable","name":"wvaraAddr","nameLocation":"16918:9:153","nodeType":"VariableDeclaration","scope":76161,"src":"16910:17:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76149,"name":"address","nodeType":"ElementaryTypeName","src":"16910:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":76156,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":76152,"name":"routerAddr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76143,"src":"16938:10:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76151,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72769,"src":"16930:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$72769_$","typeString":"type(contract IRouter)"}},"id":76153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16930:19:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$72769","typeString":"contract IRouter"}},"id":76154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16950:11:153","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":72600,"src":"16930:31:153","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":76155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16930:33:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16910:53:153"},{"expression":{"arguments":[{"id":76158,"name":"wvaraAddr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76150,"src":"16993:9:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76157,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72780,"src":"16980:12:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$72780_$","typeString":"type(contract IWrappedVara)"}},"id":76159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16980:23:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$72780","typeString":"contract IWrappedVara"}},"functionReturnParameters":76148,"id":76160,"nodeType":"Return","src":"16973:30:153"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_wvara","nameLocation":"16837:6:153","parameters":{"id":76144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76143,"mutability":"mutable","name":"routerAddr","nameLocation":"16852:10:153","nodeType":"VariableDeclaration","scope":76162,"src":"16844:18:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76142,"name":"address","nodeType":"ElementaryTypeName","src":"16844:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16843:20:153"},"returnParameters":{"id":76148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76162,"src":"16886:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$72780","typeString":"contract IWrappedVara"},"typeName":{"id":76146,"nodeType":"UserDefinedTypeName","pathNode":{"id":76145,"name":"IWrappedVara","nameLocations":["16886:12:153"],"nodeType":"IdentifierPath","referencedDeclaration":72780,"src":"16886:12:153"},"referencedDeclaration":72780,"src":"16886:12:153","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$72780","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"src":"16885:14:153"},"scope":76247,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":76189,"nodeType":"FunctionDefinition","src":"17016:235:153","nodes":[],"body":{"id":76188,"nodeType":"Block","src":"17084:167:153","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":76171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76169,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76166,"src":"17098:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":76170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17107:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17098:10:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76187,"nodeType":"IfStatement","src":"17094:151:153","trueBody":{"id":76186,"nodeType":"Block","src":"17110:135:153","statements":[{"assignments":[76173,null],"declarations":[{"constant":false,"id":76173,"mutability":"mutable","name":"success","nameLocation":"17130:7:153","nodeType":"VariableDeclaration","scope":76186,"src":"17125:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":76172,"name":"bool","nodeType":"ElementaryTypeName","src":"17125:4:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":76180,"initialValue":{"arguments":[{"hexValue":"","id":76178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17173:2:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":76174,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76164,"src":"17142:11:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":76175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17154:4:153","memberName":"call","nodeType":"MemberAccess","src":"17142:16:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":76177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":76176,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76166,"src":"17166:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"17142:30:153","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":76179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17142:34:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"17124:52:153"},{"expression":{"arguments":[{"id":76182,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76173,"src":"17198:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e73666572204574686572","id":76183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17207:26:153","typeDescriptions":{"typeIdentifier":"t_stringliteral_00e6cde77ec9144bbd886e1f93f7d8152ae0c166b31b2570bdc9836ca6340138","typeString":"literal_string \"failed to transfer Ether\""},"value":"failed to transfer Ether"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_00e6cde77ec9144bbd886e1f93f7d8152ae0c166b31b2570bdc9836ca6340138","typeString":"literal_string \"failed to transfer Ether\""}],"id":76181,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17190:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17190:44:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76185,"nodeType":"ExpressionStatement","src":"17190:44:153"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_transferEther","nameLocation":"17025:14:153","parameters":{"id":76167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76164,"mutability":"mutable","name":"destination","nameLocation":"17048:11:153","nodeType":"VariableDeclaration","scope":76189,"src":"17040:19:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76163,"name":"address","nodeType":"ElementaryTypeName","src":"17040:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":76166,"mutability":"mutable","name":"value","nameLocation":"17069:5:153","nodeType":"VariableDeclaration","scope":76189,"src":"17061:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76165,"name":"uint128","nodeType":"ElementaryTypeName","src":"17061:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"17039:36:153"},"returnParameters":{"id":76168,"nodeType":"ParameterList","parameters":[],"src":"17084:0:153"},"scope":76247,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76246,"nodeType":"FunctionDefinition","src":"17257:937:153","nodes":[],"body":{"id":76245,"nodeType":"Block","src":"17285:909:153","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":76201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":76192,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17299:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17303:5:153","memberName":"value","nodeType":"MemberAccess","src":"17299:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":76194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17311:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17299:13:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76196,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17316:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17320:4:153","memberName":"data","nodeType":"MemberAccess","src":"17316:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":76198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17325:6:153","memberName":"length","nodeType":"MemberAccess","src":"17316:15:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":76199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17335:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17316:20:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17299:37:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76216,"nodeType":"IfStatement","src":"17295:176:153","trueBody":{"id":76215,"nodeType":"Block","src":"17338:133:153","statements":[{"assignments":[76203],"declarations":[{"constant":false,"id":76203,"mutability":"mutable","name":"value","nameLocation":"17360:5:153","nodeType":"VariableDeclaration","scope":76215,"src":"17352:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76202,"name":"uint128","nodeType":"ElementaryTypeName","src":"17352:7:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":76209,"initialValue":{"arguments":[{"expression":{"id":76206,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17376:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17380:5:153","memberName":"value","nodeType":"MemberAccess","src":"17376:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17368:7:153","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":76204,"name":"uint128","nodeType":"ElementaryTypeName","src":"17368:7:153","typeDescriptions":{}}},"id":76208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17368:18:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"17352:34:153"},{"eventCall":{"arguments":[{"id":76211,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76203,"src":"17433:5:153","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76210,"name":"OwnedBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72326,"src":"17406:26:153","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":76212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17406:33:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76213,"nodeType":"EmitStatement","src":"17401:38:153"},{"functionReturnParameters":76191,"id":76214,"nodeType":"Return","src":"17454:7:153"}]}},{"expression":{"arguments":[{"id":76219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"17629:8:153","subExpression":{"id":76218,"name":"isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75099,"src":"17630:7:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76217,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17621:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":76220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17621:17:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76221,"nodeType":"ExpressionStatement","src":"17621:17:153"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76223,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17863:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17867:4:153","memberName":"data","nodeType":"MemberAccess","src":"17863:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":76225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17872:6:153","memberName":"length","nodeType":"MemberAccess","src":"17863:15:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30783234","id":76226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17882:4:153","typeDescriptions":{"typeIdentifier":"t_rational_36_by_1","typeString":"int_const 36"},"value":"0x24"},"src":"17863:23:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76222,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17855:7:153","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":76228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17855:32:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76229,"nodeType":"ExpressionStatement","src":"17855:32:153"},{"assignments":[76231],"declarations":[{"constant":false,"id":76231,"mutability":"mutable","name":"callReply","nameLocation":"17906:9:153","nodeType":"VariableDeclaration","scope":76245,"src":"17898:17:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76230,"name":"uint256","nodeType":"ElementaryTypeName","src":"17898:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76232,"nodeType":"VariableDeclarationStatement","src":"17898:17:153"},{"AST":{"nativeSrc":"17951:55:153","nodeType":"YulBlock","src":"17951:55:153","statements":[{"nativeSrc":"17965:31:153","nodeType":"YulAssignment","src":"17965:31:153","value":{"arguments":[{"kind":"number","nativeSrc":"17991:4:153","nodeType":"YulLiteral","src":"17991:4:153","type":"","value":"0x04"}],"functionName":{"name":"calldataload","nativeSrc":"17978:12:153","nodeType":"YulIdentifier","src":"17978:12:153"},"nativeSrc":"17978:18:153","nodeType":"YulFunctionCall","src":"17978:18:153"},"variableNames":[{"name":"callReply","nativeSrc":"17965:9:153","nodeType":"YulIdentifier","src":"17965:9:153"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":76231,"isOffset":false,"isSlot":false,"src":"17965:9:153","valueSize":1}],"flags":["memory-safe"],"id":76233,"nodeType":"InlineAssembly","src":"17926:80:153"},{"assignments":[76235],"declarations":[{"constant":false,"id":76235,"mutability":"mutable","name":"messageId","nameLocation":"18024:9:153","nodeType":"VariableDeclaration","scope":76245,"src":"18016:17:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76234,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18016:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76243,"initialValue":{"arguments":[{"expression":{"id":76237,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18049:3:153","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18053:4:153","memberName":"data","nodeType":"MemberAccess","src":"18049:8:153","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76239,"name":"callReply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76231,"src":"18059:9:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":76240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18072:1:153","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18059:14:153","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76236,"name":"_sendMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75600,"src":"18036:12:153","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_calldata_ptr_$_t_bool_$returns$_t_bytes32_$","typeString":"function (bytes calldata,bool) returns (bytes32)"}},"id":76242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18036:38:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18016:58:153"},{"AST":{"nativeSrc":"18110:78:153","nodeType":"YulBlock","src":"18110:78:153","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"18131:4:153","nodeType":"YulLiteral","src":"18131:4:153","type":"","value":"0x00"},{"name":"messageId","nativeSrc":"18137:9:153","nodeType":"YulIdentifier","src":"18137:9:153"}],"functionName":{"name":"mstore","nativeSrc":"18124:6:153","nodeType":"YulIdentifier","src":"18124:6:153"},"nativeSrc":"18124:23:153","nodeType":"YulFunctionCall","src":"18124:23:153"},"nativeSrc":"18124:23:153","nodeType":"YulExpressionStatement","src":"18124:23:153"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"18167:4:153","nodeType":"YulLiteral","src":"18167:4:153","type":"","value":"0x00"},{"kind":"number","nativeSrc":"18173:4:153","nodeType":"YulLiteral","src":"18173:4:153","type":"","value":"0x20"}],"functionName":{"name":"return","nativeSrc":"18160:6:153","nodeType":"YulIdentifier","src":"18160:6:153"},"nativeSrc":"18160:18:153","nodeType":"YulFunctionCall","src":"18160:18:153"},"nativeSrc":"18160:18:153","nodeType":"YulExpressionStatement","src":"18160:18:153"}]},"evmVersion":"prague","externalReferences":[{"declaration":76235,"isOffset":false,"isSlot":false,"src":"18137:9:153","valueSize":1}],"flags":["memory-safe"],"id":76244,"nodeType":"InlineAssembly","src":"18085:103:153"}]},"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":76190,"nodeType":"ParameterList","parameters":[],"src":"17265:2:153"},"returnParameters":{"id":76191,"nodeType":"ParameterList","parameters":[],"src":"17285:0:153"},"scope":76247,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":75073,"name":"IMirror","nameLocations":["595:7:153"],"nodeType":"IdentifierPath","referencedDeclaration":72455,"src":"595:7:153"},"id":75074,"nodeType":"InheritanceSpecifier","src":"595:7:153"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[76247,72455],"name":"Mirror","nameLocation":"585:6:153","scope":76248,"usedErrors":[],"usedEvents":[72290,72303,72314,72321,72326,72331,72342,72351,72362,72371,72378]}],"license":"UNLICENSED"},"id":153} \ No newline at end of file diff --git a/ethexe/ethereum/Router.json b/ethexe/ethereum/Router.json index eb2e2894f8b..28cdd5c59fb 100644 --- a/ethexe/ethereum/Router.json +++ b/ethexe/ethereum/Router.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"areValidators","inputs":[{"name":"_validators","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum Gear.CodeState"}],"stateMutability":"view"},{"type":"function","name":"codesStates","inputs":[{"name":"_codesIds","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint8[]","internalType":"enum Gear.CodeState[]"}],"stateMutability":"view"},{"type":"function","name":"commitBatch","inputs":[{"name":"_batch","type":"tuple","internalType":"struct Gear.BatchCommitment","components":[{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"blockTimestamp","type":"uint48","internalType":"uint48"},{"name":"previousCommittedBatchHash","type":"bytes32","internalType":"bytes32"},{"name":"expiry","type":"uint8","internalType":"uint8"},{"name":"chainCommitment","type":"tuple[]","internalType":"struct Gear.ChainCommitment[]","components":[{"name":"transitions","type":"tuple[]","internalType":"struct Gear.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"exited","type":"bool","internalType":"bool"},{"name":"inheritor","type":"address","internalType":"address"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueToReceiveNegativeSign","type":"bool","internalType":"bool"},{"name":"valueClaims","type":"tuple[]","internalType":"struct Gear.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct Gear.Message[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct Gear.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]},{"name":"call","type":"bool","internalType":"bool"}]}]},{"name":"head","type":"bytes32","internalType":"bytes32"}]},{"name":"codeCommitments","type":"tuple[]","internalType":"struct Gear.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"rewardsCommitment","type":"tuple[]","internalType":"struct Gear.RewardsCommitment[]","components":[{"name":"operators","type":"tuple","internalType":"struct Gear.OperatorRewardsCommitment","components":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"root","type":"bytes32","internalType":"bytes32"}]},{"name":"stakers","type":"tuple","internalType":"struct Gear.StakerRewardsCommitment","components":[{"name":"distribution","type":"tuple[]","internalType":"struct Gear.StakerRewards[]","components":[{"name":"vault","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"totalAmount","type":"uint256","internalType":"uint256"},{"name":"token","type":"address","internalType":"address"}]},{"name":"timestamp","type":"uint48","internalType":"uint48"}]},{"name":"validatorsCommitment","type":"tuple[]","internalType":"struct Gear.ValidatorsCommitment[]","components":[{"name":"aggregatedPublicKey","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"name":"verifiableSecretSharingCommitment","type":"bytes","internalType":"bytes"},{"name":"validators","type":"address[]","internalType":"address[]"},{"name":"eraIndex","type":"uint256","internalType":"uint256"}]}]},{"name":"_signatureType","type":"uint8","internalType":"enum Gear.SignatureType"},{"name":"_signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeSettings","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.ComputationSettings","components":[{"name":"threshold","type":"uint64","internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","internalType":"uint128"}]}],"stateMutability":"view"},{"type":"function","name":"createProgram","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_overrideInitializer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"createProgramWithAbiInterface","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_overrideInitializer","type":"address","internalType":"address"},{"name":"_abiInterface","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"genesisTimestamp","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_middleware","type":"address","internalType":"address"},{"name":"_eraDuration","type":"uint256","internalType":"uint256"},{"name":"_electionDuration","type":"uint256","internalType":"uint256"},{"name":"_validationDelay","type":"uint256","internalType":"uint256"},{"name":"_aggregatedPublicKey","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"name":"_verifiableSecretSharingCommitment","type":"bytes","internalType":"bytes"},{"name":"_validators","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isValidator","inputs":[{"name":"_validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"latestCommittedBatchHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"latestCommittedBatchTimestamp","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"lookupGenesisHash","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"middleware","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorImpl","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"_programId","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCodeIds","inputs":[{"name":"_programsIds","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"newMirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdFraction","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"},{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"storageView","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IRouter.StorageView","components":[{"name":"genesisBlock","type":"tuple","internalType":"struct Gear.GenesisBlockInfo","components":[{"name":"hash","type":"bytes32","internalType":"bytes32"},{"name":"number","type":"uint32","internalType":"uint32"},{"name":"timestamp","type":"uint48","internalType":"uint48"}]},{"name":"latestCommittedBatch","type":"tuple","internalType":"struct Gear.CommittedBatchInfo","components":[{"name":"hash","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint48","internalType":"uint48"}]},{"name":"implAddresses","type":"tuple","internalType":"struct Gear.AddressBook","components":[{"name":"mirror","type":"address","internalType":"address"},{"name":"wrappedVara","type":"address","internalType":"address"},{"name":"middleware","type":"address","internalType":"address"}]},{"name":"validationSettings","type":"tuple","internalType":"struct Gear.ValidationSettingsView","components":[{"name":"thresholdNumerator","type":"uint128","internalType":"uint128"},{"name":"thresholdDenominator","type":"uint128","internalType":"uint128"},{"name":"validators0","type":"tuple","internalType":"struct Gear.ValidatorsView","components":[{"name":"aggregatedPublicKey","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"name":"verifiableSecretSharingCommitmentPointer","type":"address","internalType":"address"},{"name":"list","type":"address[]","internalType":"address[]"},{"name":"useFromTimestamp","type":"uint256","internalType":"uint256"}]},{"name":"validators1","type":"tuple","internalType":"struct Gear.ValidatorsView","components":[{"name":"aggregatedPublicKey","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"name":"verifiableSecretSharingCommitmentPointer","type":"address","internalType":"address"},{"name":"list","type":"address[]","internalType":"address[]"},{"name":"useFromTimestamp","type":"uint256","internalType":"uint256"}]}]},{"name":"computeSettings","type":"tuple","internalType":"struct Gear.ComputationSettings","components":[{"name":"threshold","type":"uint64","internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","internalType":"uint128"}]},{"name":"timelines","type":"tuple","internalType":"struct Gear.Timelines","components":[{"name":"era","type":"uint256","internalType":"uint256"},{"name":"election","type":"uint256","internalType":"uint256"},{"name":"validationDelay","type":"uint256","internalType":"uint256"}]},{"name":"programsCount","type":"uint256","internalType":"uint256"},{"name":"validatedCodesCount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"timelines","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.Timelines","components":[{"name":"era","type":"uint256","internalType":"uint256"},{"name":"election","type":"uint256","internalType":"uint256"},{"name":"validationDelay","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validators","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsAggregatedPublicKey","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsVerifiableSecretSharingCommitment","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"AnnouncesCommitted","inputs":[{"name":"head","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"BatchCommitted","inputs":[{"name":"hash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ComputationSettingsChanged","inputs":[{"name":"threshold","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProgramCreated","inputs":[{"name":"actorId","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[{"name":"slot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValidatorsCommittedForEra","inputs":[{"name":"eraIndex","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460aa575f516020614aa85f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b6040516149f990816100af8239f35b6001600160401b0319166001600160401b039081175f516020614aa85f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe608080604052600436101561010a575b50361561001a575f80fd5b5f5160206149b95f395f51905f525461003860018201541515612996565b6001600160801b033416156100ba57335f908152601a9190910160205260409020541561006157005b60405162461bcd60e51b815260206004820152602b60248201527f636f756c646e277420726563656976652045746865722066726f6d20756e6b6e60448201526a6f776e2070726f6772616d60a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f7a65726f2076616c7565207472616e73666572206973206e6f7420616c6c6f77604482015261195960f21b6064820152608490fd5b5f905f3560e01c9081627a32e7146127b4575080630c18d277146122bc578063120e3f1e1461213057806328e24b3d146121025780633683c4d214611e755780633bd109fa14611e265780633d43b41814611dd257806353f7fd48146118195780636c2eb35014611487578063715018a61461141e57806371a8cf2d146113f057806382bdeaad146112d857806384d22a4f1461127a57806388f50cf0146112415780638b1edf1e146111765780638da5cb5b146111415780638f381dbe146110fb5780639067088e146110b257806396a2ddfa146110845780639eb939a81461102d578063a5d53a4414610fbf578063b24fcac014610986578063baaf020114610885578063c13911e814610841578063c2eb812f14610515578063ca1e7819146104c5578063cacf66ab1461048d578063d456fd5114610457578063e3a6684f14610418578063e6fabc09146103df578063ed612f8c146103a7578063edc8722514610352578063f2fde38b14610325578063f4f20ac0146102ec5763facd743b0361000f57346102e95760203660031901126102e9576102ab61280a565b60036102c65f5160206149b95f395f51905f525442906144a9565b019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b80fd5b50346102e957806003193601126102e9575f5160206149b95f395f51905f5254600701546040516001600160a01b039091168152602090f35b50346102e95760203660031901126102e95761034f61034261280a565b61034a612ddf565b612d60565b80f35b50346102e957806003193601126102e957602061039f5f5160206149b95f395f51905f52546008600461038542846144a9565b0154910154906001600160801b038260801c92169061447e565b604051908152f35b50346102e957806003193601126102e957602060046103d55f5160206149b95f395f51905f525442906144a9565b0154604051908152f35b50346102e957806003193601126102e9575f5160206149b95f395f51905f5254600501546040516001600160a01b039091168152602090f35b50346102e957806003193601126102e957604060085f5160206149b95f395f51905f525401548151906001600160801b038116825260801c6020820152f35b50346102e957806003193601126102e957602065ffffffffffff60045f5160206149b95f395f51905f5254015416604051908152f35b50346102e957806003193601126102e957602065ffffffffffff60025f5160206149b95f395f51905f52540154821c16604051908152f35b50346102e957806003193601126102e9576105116104fd60046104f75f5160206149b95f395f51905f525442906144a9565b01612b55565b604051918291602083526020830190612871565b0390f35b50346102e957806003193601126102e9576040516105328161293e565b61053a612c8e565b815260405161054881612923565b5f8152602081015f9052602082015261055f612c8e565b604082015261056c612d2d565b606082015260405161057d81612923565b5f80825260208201526080820152610593612c8e565b60a08201528160c082015260e001525f5160206149b95f395f51905f52546105b9612d2d565b506105c66009820161471b565b906105d3600f820161471b565b600882015492604051936105e68561295a565b6001600160801b038116855260801c602085015260408401526060830152601b81015490601c8101546040519261061c8461293e565b604051610628816128f4565b60018401548152600284015463ffffffff8116602083015260201c65ffffffffffff16604082015284526040519461065f86612923565b60038401548652600484015465ffffffffffff166020870152602085019586526040519061068c826128f4565b60058501546001600160a01b0390811683526006860154811660208401526007860154166040808401919091528601918252606086019081526106d160158601612be0565b94608087019586526016016106e590612cac565b9160a0870192835260c0870193845260e087019485526040519788976020895251805160208a0152602081015163ffffffff1660408a01526040015165ffffffffffff16606089015251805160808901526020015165ffffffffffff1660a088015251600160a01b6001900381511660c0880152600160a01b6001900360208201511660e0880152600160a01b60019003906040015116610100870152516101208601610200905280516001600160801b031661022087015260208101516001600160801b031661024087015260408101516102608701608090526102a087016107ce916128ad565b90606001519061021f19878203016102808801526107eb916128ad565b935180516001600160401b0316610140870152602001516001600160801b031661016086015251805161018086015260208101516101a0860152604001516101c0850152516101e0840152516102008301520390f35b50346102e95760203660031901126102e95760ff604060209260195f5160206149b95f395f51905f525401600435825284522054166108836040518092612864565bf35b50346102e95760203660031901126102e9576004356001600160401b038111610982576108b6903690600401612834565b905f5160206149b95f395f51905f5254906108d083612aea565b916108de6040519384612975565b8383526108ea84612aea565b602084019490601f1901368637601a869201915b81811061094957868587604051928392602084019060208552518091526040840192915b818110610930575050500390f35b8251845285945060209384019390920191600101610922565b8061095f61095a6001938588612ba8565b612c0e565b828060a01b03165f528360205260405f205461097b8288612bcc565b52016108fe565b5080fd5b50346102e95760603660031901126102e9576004356001600160401b03811161098257806004019161010060031983360301126102e957600260243510156102e9576044356001600160401b038111610982576109e7903690600401612834565b9390917f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610fb05760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f5160206149b95f395f51905f525491610a5360018401541515612996565b825415610ed6575b60038301908154916044870135809303610e8357600485019765ffffffffffff89541696602489019765ffffffffffff610a948a612ce2565b1610610e0357610aa984889b96999a9b6131b2565b98606095879b8c9a60a482019860198c019c5b610ac68b8b613713565b9190501015610c8e578e610ada8b8b613713565b90911015610c7a578f60ff8f926040908f9360061b01928335948582526020522054166003811015610c6657600103610c035760408f918f928f936020830194610b2386613748565b15610beb57601c928782526020528481209050600260ff1982541617905501610b4c8154612dd1565b90555b610b5883613748565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208451878152a2360312610be75791610bde916020600194610bac60405191610ba483612923565b848352613755565b91829101526040519060208201928352151560f81b604082015260218152610bd5604182612975565b51902090613762565b9e019d8e610abc565b8c80fd5b905083918682526020522060ff198154169055610b4f565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b8e52602160045260248efd5b634e487b7160e01b8c52603260045260248cfd5b8a9950926020610d93998f948e9794610d889665ffffffffffff98858151910120610cb9858c6137b1565b91610cc4868d613cc4565b93610cda6064610cd38c612ce2565b9701612cd4565b9060405196898801983589528d60d01b9060d01b166040880152604687015260ff60f81b9060f81b1660668601526067850152608784015260a783015260c782015260c78152610d2b60e782612975565b5190208099610d3985612ce2565b8760405191610d4783612923565b8483521693849101525584198254161790557f7ebe42360bcb182fe0a88148b081e4557c89d09aa6af8307635ac2f83e2aaa656020604051898152a1612ce2565b1693602435916140d4565b15610dbe57807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b60405162461bcd60e51b815260206004820152604c60248201527f62617463682074696d657374616d70206d75737420626520677265617465722060448201527f6f7220657175616c20746f206c617465737420636f6d6d69747465642062617460648201526b063682074696d657374616d760a41b608482015260a490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d6974746564206261746368604482015264040d0c2e6d60db1b6064820152608490fd5b610eec610ee560648701612cd4565b823561311d565b15610f5c5765ffffffffffff610f0460248701612ce2565b164211610a5b5760405162461bcd60e51b815260206004820152602360248201527f62617463682074696d657374616d70206d75737420626520696e207468652070604482015262185cdd60ea1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b633ee5aeb560e01b8152600490fd5b50346102e957806003193601126102e95760406110005f5160206149b95f395f51905f52546002610ff860018060a01b039242906144a9565b0154166130ee565b6020825193849282845280519283918282870152018585015e828201840152601f01601f19168101030190f35b50346102e957806003193601126102e957611046612c8e565b50606061106360165f5160206149b95f395f51905f525401612cac565b61088360405180926040809180518452602081015160208501520151910152565b50346102e957806003193601126102e9576020601b5f5160206149b95f395f51905f52540154604051908152f35b50346102e95760203660031901126102e9576110cc61280a565b601a5f5160206149b95f395f51905f5254019060018060a01b03165f52602052602060405f2054604051908152f35b50346102e95760203660031901126102e957600435906001600160401b0382116102e95760206111376111313660048601612834565b90612c22565b6040519015158152f35b50346102e957806003193601126102e9575f5160206149995f395f51905f52546040516001600160a01b039091168152602090f35b50346102e957806003193601126102e9575f5160206149b95f395f51905f5254600181019081546111fc576002015463ffffffff16409081156111b7575580f35b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b50346102e957806003193601126102e9575f5160206149b95f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346102e957806003193601126102e957611293612a08565b5060406112b060155f5160206149b95f395f51905f525401612be0565b610883825180926001600160801b03602080926001600160401b038151168552015116910152565b50346102e95760203660031901126102e9576004356001600160401b03811161098257611309903690600401612834565b905f5160206149b95f395f51905f52549061132383612aea565b916113316040519384612975565b83835261133d84612aea565b602084019490601f19013686376019869201915b8181106113a657868587604051928392602084019060208552518091526040840192915b818110611383575050500390f35b91935091602080826113986001948851612864565b019401910191849392611375565b6113b1818386612ba8565b3587528260205260ff6040882054166113ca8287612bcc565b60038210156113dc5752600101611351565b634e487b7160e01b89526021600452602489fd5b50346102e957806003193601126102e957602060035f5160206149b95f395f51905f52540154604051908152f35b50346102e957806003193601126102e957611437612ddf565b5f5160206149995f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102e957806003193601126102e9575f5160206149d95f395f51905f525460ff8160401c16908115611804575b506117f5575f5160206149d95f395f51905f52805468ffffffffffffffffff1916680100000000000000021790555f5160206149995f395f51905f5254611510906001600160a01b03166115086144c5565b61034a6144c5565b5f5160206149b95f395f51905f5254604090815161152e8382612975565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611562612ddf565b5190205f1981019081116117e157916020917fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2938251908482019081528482526115ac8483612975565b60ff19915190201690815f5160206149b95f395f51905f52557f059eb9adf6e95b839d818142ed5bd5e498b6d95138e65c91525e93cc0f0339fc848451848152a16115f5612e12565b80516001840155600283019063ffffffff868201511669ffffffffffff00000000868454930151881b169169ffffffffffffffffffff191617179055600581016005830190808203611793575b5050600881016001600160801b038154169060088401916001600160801b0319835416178255546001600160801b0382549181191691161790556116cb61168942836144a9565b6116a06001600160a01b036002610ff842876144a9565b6116b660046116af42876144a9565b0192612a20565b906116c14293612b55565b9160098701612e5a565b601581016015830190808203611741575b5050601681016016830191818303611721575b5050505060ff60401b195f5160206149d95f395f51905f5254165f5160206149d95f395f51905f52555160028152a180f35b60189283925490556017810154601785015501549101555f8080806116ef565b806001600160401b03806001600160801b03935416166001600160401b031984541617835554851c16600160401b600160c01b03825491861b1690600160401b600160c01b0319161790555f806116dc565b5481546001600160a01b03199081166001600160a01b039283161790925560068381015490850180548416918316919091179055600780840154908501805490931691161790555f80611642565b634e487b7160e01b84526011600452602484fd5b63f92ee8a960e01b8152600490fd5b600291506001600160401b031610155f6114b6565b50346102e9576101603660031901126102e95761183461280a565b6024356001600160a01b0381169190829003611dce576118526127de565b61185a6127f4565b60c435916084359160a43560403660e3190112611dca5761012435946001600160401b038611611dc65736602387011215611dc6578560040135916001600160401b038311611dc2573660248489010111611dc257610144356001600160401b038111611dbe576118cf903690600401612834565b9690945f5160206149d95f395f51905f5254996001600160401b0360ff8c60401c16159b1680159081611db6575b6001149081611dac575b159081611da3575b50611d9457611951908b60016001600160401b03195f5160206149d95f395f51905f525416175f5160206149d95f395f51905f5255611d64575b6115086144c5565b6119596144c5565b4215611d0e578215611cb85782821115611c5757600a6119798484612a3e565b04841015611c125760409a8b516119908d82612975565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526119c4612ddf565b5190205f198101908111611bfe578c51602080820192835281528d9392916119ec8583612975565b60ff19915190201698895f5160206149b95f395f51905f525583518a815260207f059eb9adf6e95b839d818142ed5bd5e498b6d95138e65c91525e93cc0f0339fc91a1611a37612e12565b805160018c015560028b0190602081015163ffffffff1686835492015160201b69ffffffffffff00000000169169ffffffffffffffffffff191617179055835190611a81826128f4565b8282526001600160a01b03908116602083018190529381169490910184905260058a018054919092166001600160a01b031991821617909155600689018054821690921790915560078801805490911690911790557003000000000000000000000000000000026008870155611af5612a08565b508951611b0181612923565b639502f90081526509184e72a0006020909101526015860180546001600160c01b0319166d09184e72a000000000009502f900179055895183908b90611b46816128f4565b8381528460208201520152601686015560178501556018840155865194611b6c86612923565b60e4358652610104356020870152611b88913691602401612aa5565b9042933690611b9692612b01565b9160090193611ba494612e5a565b611bac575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f5160206149d95f395f51905f5254165f5160206149d95f395f51905f52555160018152a180f35b634e487b7160e01b8e52601160045260248efd5b60405162461bcd60e51b815260206004820152601b60248201527f76616c69646174696f6e2064656c617920697320746f6f2062696700000000006044820152606490fd5b60405162461bcd60e51b815260206004820152603360248201527f657261206475726174696f6e206d757374206265206772656174657220746861604482015272371032b632b1ba34b7b710323ab930ba34b7b760691b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f656c656374696f6e206475726174696f6e206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f63757272656e742074696d657374616d70206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b600160401b60ff60401b195f5160206149d95f395f51905f525416175f5160206149d95f395f51905f5255611949565b63f92ee8a960e01b8d5260048dfd5b9050155f61190f565b303b159150611907565b8c91506118fd565b8a80fd5b8980fd5b8880fd5b8780fd5b8280fd5b50346102e95760203660031901126102e957611dec61280a565b611df4612ddf565b5f5160206149b95f395f51905f525460050180546001600160a01b0319166001600160a01b0390921691909117905580f35b50346102e957806003193601126102e957611e3f612a08565b506040611e63611e5e5f5160206149b95f395f51905f525442906144a9565b612a20565b60208251918051835201516020820152f35b50346102e95760603660031901126102e957600435611e926127de565b5f5160206149b95f395f51905f5254611eb060018201541515612996565b8284526019810160205260ff60408520541660038110156120ee57600203612092576040516020810190848252602435604082015260408152611ef4606082612975565b51902060405160608101908082106001600160401b0383111761208e57605a916040527f3d605080600a3d3981f3608060405263e6fabc0960e01b5f5260205f6004817381523060601b6b5afa15604c575f80805136821760208201527f80378136915af43d5f803e156048573d5ff35b3d5ffd5b5f80fd000000000000604082015286f590811561208a576001600160a01b0382165f908152601a820160205260409020849055601b018054611faa90612dd1565b90556040516001600160a01b03821680825293907f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a2506001600160a01b0381166120855750335b5f5160206149b95f395f51905f5254600501546001600160a01b0316823b1561208157604051631c9776b560e31b81526001600160a01b039092166004830152602482015260016044820152828160648183865af1801561207657612061575b602082604051908152f35b61206c838092612975565b6109825781612056565b6040513d85823e3d90fd5b8380fd5b611ff6565b8480fd5b8680fd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b85526021600452602485fd5b50346102e957806003193601126102e957602060015f5160206149b95f395f51905f52540154604051908152f35b50346102e95760203660031901126102e9576004358149156122405760195f5160206149b95f395f51905f525461216c60018201541515612996565b018183528060205260ff604084205416600381101561222c576121cb5781835260209081526040808420805460ff19166001179055519182527f5c261a095dd5720475295dc06379921c003c22164ee6cae5cf83e76ce0a1b98591a180f35b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b634e487b7160e01b84526021600452602484fd5b60405162461bcd60e51b815260206004820152604860248201527f626c6f622063616e277420626520666f756e642c20726f75746572206578706560448201527f63746564204549502d34383434207472616e73616374696f6e2077697468205760648201526720a9a690313637b160c11b608482015260a490fd5b34612796576080366003190112612796576004356122d86127de565b906122e16127f4565b915f5160206149b95f395f51905f525461230060018201541515612996565b825f526019810160205260ff60405f20541660038110156127a057600203612092576040516020810190848252602435604082015260408152612344606082612975565b5190206040516102c08101908082106001600160401b03831117612796576102b0916040527f60808060405261029e90816100128239f3fe608060405260043610610254575f81527f3560e01c806336a52a18146100ab57806342129d00146100a65780635ce6c32760208201527f146100a1578063701da98e1461009c578063704ed542146100975780637a8e0c60408201527fdd1461009257806391d5a64c1461008d5780639ce110d714610088578063affe60608201527fd0e0146100835763e43f3433036102545761023f565b610222565b6101fa565b60808201527f6101e4565b6101b1565b610181565b610165565b610143565b610106565b346160a08201527ed4575f3660031901126100d45760025460081c6001600160a01b031660809060c08201527f8152602090f35b5f80fd5b9181601f840112156100d45782359167ffffffffff60e08201527fffffff83116100d457602083818601950101116100d457565b604036600319016101008201527f126100d45760043567ffffffffffffffff81116100d4576101329036906004016101208201527f6100d8565b505060243580151514610254575f80fd5b346100d4575f366003196101408201527f01126100d457602060ff600254166040519015158152f35b346100d4575f36606101608201527f031901126100d45760205f54604051908152f35b346100d457602036600319016101808201527f126100d4576004356fffffffffffffffffffffffffffffffff811614610254576101a08201527f5f80fd5b60403660031901126100d45760243567ffffffffffffffff811161006101c08201527fd4576101dd9036906004016100d8565b5050610254565b346100d457602036606101e08201527f0319011215610254575f80fd5b346100d4575f3660031901126100d4576003546102008201527f6040516001600160a01b039091168152602090f35b346100d4575f36600319016102208201527f126100d4576020600154604051908152f35b346100d4575f36600319011215616102408201523060601c7f0254575f80fd5b63e6fabc0960e01b5f5260205f60048173000000000000000017610260820152735afa156100d4575f808051368280378136915af43060a01b176102808201526f3d5f803e1561029a573d5ff35b3d5ffd60801b6102a08201525ff5908115612796576001600160a01b0382165f908152601a820160205260409020849055601b0180546126db90612dd1565b90556040516001600160a01b03821680825293907f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a2506001600160a01b03811661279a575033915b813b1561279657604051631c9776b560e31b81526001600160a01b039384166004820152921660248301525f604483018190528260648183855af191821561278b5760209261277b575b50604051908152f35b5f61278591612975565b5f612772565b6040513d5f823e3d90fd5b5f80fd5b91612728565b634e487b7160e01b5f52602160045260245ffd5b34612796575f36600319011261279657602090601c5f5160206149b95f395f51905f525401548152f35b604435906001600160a01b038216820361279657565b606435906001600160a01b038216820361279657565b600435906001600160a01b038216820361279657565b35906001600160a01b038216820361279657565b9181601f84011215612796578235916001600160401b038311612796576020808501948460051b01011161279657565b9060038210156127a05752565b90602080835192838152019201905f5b81811061288e5750505090565b82516001600160a01b0316845260209384019390920191600101612881565b9060208251805183520151602082015260018060a01b036020830151166040820152608060606128eb604085015160a08386015260a0850190612871565b93015191015290565b606081019081106001600160401b0382111761290f57604052565b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b0382111761290f57604052565b61010081019081106001600160401b0382111761290f57604052565b608081019081106001600160401b0382111761290f57604052565b90601f801991011681019081106001600160401b0382111761290f57604052565b1561299d57565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b60405190612a1582612923565b5f6020838281520152565b90604051612a2d81612923565b602060018294805484520154910152565b91908203918211612a4b57565b634e487b7160e01b5f52601160045260245ffd5b8115612a69570490565b634e487b7160e01b5f52601260045260245ffd5b919082604091031261279657604051612a9581612923565b6020808294803584520135910152565b9291926001600160401b03821161290f5760405191612ace601f8201601f191660200184612975565b829481845281830111612796578281602093845f960137010152565b6001600160401b03811161290f5760051b60200190565b929190612b0d81612aea565b93612b1b6040519586612975565b602085838152019160051b810192831161279657905b828210612b3d57505050565b60208091612b4a84612820565b815201910190612b31565b90604051918281549182825260208201905f5260205f20925f5b818110612b86575050612b8492500383612975565b565b84546001600160a01b0316835260019485019487945060209093019201612b6f565b9190811015612bb85760051b0190565b634e487b7160e01b5f52603260045260245ffd5b8051821015612bb85760209160051b010190565b90604051612bed81612923565b91546001600160401b038116835260401c6001600160801b03166020830152565b356001600160a01b03811681036127965790565b612c3b5f5160206149b95f395f51905f525442906144a9565b600301905f5b838110612c515750505050600190565b612c5f61095a828685612ba8565b6001600160a01b03165f9081526020849052604090205460ff1615612c8657600101612c41565b505050505f90565b60405190612c9b826128f4565b5f6040838281528260208201520152565b90604051612cb9816128f4565b60406002829480548452600181015460208501520154910152565b3560ff811681036127965790565b3565ffffffffffff811681036127965790565b60405190612d028261295a565b5f606083604051612d1281612923565b83815283602082015281528260208201528160408201520152565b60405190612d3a8261295a565b815f81525f6020820152612d4c612cf5565b60408201526060612d5b612cf5565b910152565b6001600160a01b03168015612dbe575f5160206149995f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f198114612a4b5760010190565b5f5160206149995f395f51905f52546001600160a01b03163303612dff57565b63118cdaa760e01b5f523360045260245ffd5b612e1a612c8e565b50604051612e27816128f4565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b81810292918115918404141715612a4b57565b9291908051906020810191825170014551231950b75fc4402da1732fc9bebe19821091826130dd575b5050156130895751845551600184015560405190612ec66021836020808201945f86528051918291018484015e81015f838201520301601f198101845283612975565b612f03602b604051809360208201956a600b5981380380925939f360a81b87525180918484015e81015f838201520301601f198101835282612975565b51905ff06001600160a01b03811615613050576002830180546001600160a01b0319166001600160a01b039092169190911790555f5b600483018054821015612f77575f90815260208082208301546001600160a01b0316825260038501905260409020805460ff19169055600101612f39565b5050925f5b8451811015612fc0576001906001600160a01b03612f9a8288612bcc565b5116828060a01b03165f526003840160205260405f208260ff1982541617905501612f7c565b5092600482018151916001600160401b03831161290f57600160401b831161290f57815483835580841061302a575b50602001905f5260205f205f5b83811061300d575050505060050155565b82516001600160a01b031681830155602090920191600101612ffc565b825f528360205f2091820191015b8181106130455750612fef565b5f8155600101613038565b60405162461bcd60e51b81526020600482015260116024820152701111541313d65351539517d19052531151607a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602660248201527f46524f53542061676772656761746564207075626c6963206b657920697320696044820152651b9d985b1a5960d21b6064820152608490fd5b6130e792506148f3565b5f80612e83565b803b905f19820190828211612a4b5760019060405193603e601f19910116840160405282845260208401903c90565b435f1981019392908411612a4b5760ff1643811061316d57505f925b83811015613149575b505f925050565b804082810361315b5750600193505050565b15613168575f1901613139565b613142565b6131779043612a3e565b92613139565b903590601e198136030182121561279657018035906001600160401b03821161279657602001918160051b3603831361279657565b906080810160016131c3828461317d565b9050116136b1576131d4818361317d565b90501561368a576131e49161317d565b15612bb857803590603e1981360301821215612796570191613206838061317d565b92906060925f95601a60fe19843603019401945b86881015613627578760051b8401358581121561279657840161323c81612c0e565b6001600160a01b03165f90815260208890526040902054156135ca575f608082016001600160801b0361326e826144f0565b161515806135b7575b6135a6575b6001600160a01b0361328d84612c0e565b604051630427a21d60e11b81526020600482015294911691610124850191906001600160801b039061330c906001600160a01b036132ca85612820565b166024890152602084013560448901526132e660408501613755565b151560648901526001600160a01b0361330160608601612820565b166084890152614504565b1660a486015261331e60a08201613755565b151560c486015236819003601e190160c082013581811215612796578201602081359101936001600160401b03821161279657606082023603851361279657819061010060e48a015252610144870193905f905b80821061355c5750505060e0820135908112156127965701803560208201926001600160401b038211612796578160051b9081360385136127965791879594936023198785030161010488015281845260208085019385010194935f9160fe19813603015b84841061344f5750505050505050602093916001600160801b03848093039316905af190811561278b575f9161341d575b5061341590600192613762565b97019661321a565b90506020813d8211613447575b8161343760209383612975565b8101031261279657516001613408565b3d915061342a565b919395979850919395601f19848203018752873582811215612796578301602081013582526001600160a01b0361348860408301612820565b1660208301526060810135603e193683900301811215612796578101602081013591906040016001600160401b03831161279657823603811361279657829060e060408601528160e08601526101008501375f61010083850101526001600160801b036134f760808301614504565b16606084015260a0810135608084015260c081013563ffffffff60e01b8116809103612796578360209361353960e086956101009560a060019a015201613755565b151560c0830152601f80199101160101990197019401918a9897969593916133d7565b90919460608060019288358152838060a01b0361357b60208b01612820565b1660208201526001600160801b0361359560408b01614504565b166040820152019601920190613372565b90506135b1816144f0565b9061327c565b506135c460a08401613748565b15613277565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b93509450945050602091508181519101209101357fd04cd9af813f6f0b56e9411a6ee6a84eb5ac35a96f0c33d2e3a07d65baa8f4186020604051838152a16040519060208201928352604082015260408152613684606082612975565b51902090565b5050507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b60405162461bcd60e51b815260206004820152603460248201527f636861696e436f6d6d69746d656e7420636f756c6420636f6e7461696e206174604482015273081b5bdcdd081bdb994818dbdb5b5a5d1b595b9d60621b6064820152608490fd5b903590601e198136030182121561279657018035906001600160401b03821161279657602001918160061b3603831361279657565b3580151581036127965790565b3590811515820361279657565b602080612b84928195946040519682889351918291018585015e8201908382015203018085520183612975565b903590605e1981360301821215612796570190565b91908201809211612a4b57565b60c0820160016137c1828561317d565b905011613c28576137d2818461317d565b90501561368a576137e3908361317d565b15612bb857803590607e19813603018212156127965701916060830190602061380b83612ce2565b91019065ffffffffffff8061381f84612ce2565b1691161015613bc95761383182612ce2565b65ffffffffffff80600286015460201c16911610613b6e5761387765ffffffffffff61387061386a8261386387612ce2565b1687614518565b93612ce2565b1684614518565b1115613b15576007820154600690920180548435946001600160a01b0394851694604082019391925f916020911660446138bd836138b5898961378f565b01358b6137a4565b604051948593849263095ea7b360e01b84528c600485015260248401525af1801561278b57613ade575b505460405163394f179b60e11b81526001600160a01b03909116600482015260248101959095526020818101356044870152856064815f885af194851561278b575f95613aa6575b509061393a9161378f565b9161394482612ce2565b9260405193637fbe95b560e01b85526040600486015260a48501918035601e1982360301811215612796578101602081359101936001600160401b038211612796578160061b360385136127965760606044890152819052869360c485019392915f5b818110613a6e57505050836020959365ffffffffffff829484895f96013560648601526139dd604060018060a01b039201612820565b16608485015216602483015203925af191821561278b575f92613a38575b50613a0590612ce2565b6040519160208301938452604083015265ffffffffffff60d01b9060d01b16606082015260468152613684606682612975565b9091506020813d602011613a66575b81613a5460209383612975565b81010312612796575190613a056139fb565b3d9150613a47565b919550919293604080600192838060a01b03613a898a612820565b1681526020890135602082015201960191019188959493926139a7565b919094506020823d602011613ad6575b81613ac360209383612975565b810103126127965790519361393a61392f565b3d9150613ab6565b6020813d602011613b0d575b81613af760209383612975565b81010312612796575180151581146138e7575f80fd5b3d9150613aea565b60405162461bcd60e51b815260206004820152602b60248201527f7265776172647320636f6d6d69746d656e74206d75737420746172676574207060448201526a726576696f75732065726160a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f7265776172647320636f6d6d69746d656e742074696d657374616d702070726560448201526c64617465732067656e6573697360981b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f7265776172647320636f6d6d69746d656e742074696d657374616d70206d75736044820152701d08189948199bdc881d1a19481c185cdd607a1b6064820152608490fd5b608460405162461bcd60e51b815260206004820152604060248201527f7265776172647320636f6d6d69746d656e74206d75737420626520656d70747960448201527f206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d656e746064820152fd5b903590601e198136030182121561279657018035906001600160401b0382116127965760200191813603831361279657565b9060e081016001613cd5828461317d565b90501161405d57613ce6818361317d565b90501561368a57613cf69161317d565b15612bb857803590609e198136030182121561279657016060810190613d1c828261317d565b90501561400a5765ffffffffffff600284015460201c1691613d3e8342612a3e565b613d4d60168601548092612a5f565b9360808401359460018101809111612a4b578503613fb257613d7285613d7893612e47565b906137a4565b93613d87601782015486612a3e565b4210613f6d57613d9690614540565b934260058601541015613f0d57613deb906040840195613ddd613de5613dbc8988613c92565b9190613dc8888a61317d565b949091613dd5368c612a7d565b943691612aa5565b933691612b01565b92612e5a565b7fa1a3b42179ad30022438a1ea333b38eaf4a7329beee5e2b8111c0dcd4e08821c6020604051858152a160a0823603126127965760405193613e2c8561295a565b613e363684612a7d565b8552356001600160401b03811161279657820136601f8201121561279657613e65903690602081359101612aa5565b602085015235906001600160401b038211612796570136601f8201121561279657613e97903690602081359101612b01565b91826040820152816060820152519160208351930151906040519283926020840195865260408401526060830160208351919301905f5b818110613eeb575050508152038082526136849060200182612975565b82516001600160a01b0316855286955060209485019490920191600101613ece565b60405162461bcd60e51b815260206004820152603260248201527f6c6f6f6b73206c696b652076616c696461746f727320666f72206e65787420656044820152711c9848185c9948185b1c9958591e481cd95d60721b6064820152608490fd5b60405162461bcd60e51b815260206004820152601b60248201527f656c656374696f6e206973206e6f7420796574207374617274656400000000006044820152606490fd5b60405162461bcd60e51b815260206004820152602a60248201527f636f6d6d69746d656e742065726120696e646578206973206e6f74206e657874604482015269040cae4c240d2dcc8caf60b31b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f6e65772076616c696461746f7273206c697374206d757374206e6f7420626520604482015264656d70747960d81b6064820152608490fd5b60405162461bcd60e51b815260206004820152604360248201527f76616c696461746f727320636f6d6d69746d656e74206d75737420626520656d60448201527f707479206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d606482015262195b9d60ea1b608482015260a490fd5b909493919365ffffffffffff600283015460201c166140f34284614518565b61410b61410560168601548093612e47565b836137a4565b918284108080614468575b156143f6575083106143b15761412c90836137a4565b106143605761413c905b826144a9565b94601960f81b5f523060601b60025260165260365f209360028110156127a0578061424c575050600181036142075715612bb85761417d8161418492613c92565b3691612aa5565b9160608351036141b2578260206141af9401516060604083015192015192600181549101549061455b565b90565b60405162461bcd60e51b815260206004820152602760248201527f46524f5354207369676e6174757265206c656e677468206d75737420626520396044820152663620627974657360c81b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f46524f5354207369676e6174757265206d7573742062652073696e676c6500006044820152606490fd5b91939160011461425f5750505050505f90565b61428490600860048796970154910154906001600160801b038260801c92169061447e565b925f9260035f9201915b86811015614355576142bd6142b46142ae61417d8460051b860186613c92565b86614859565b90929192614893565b6001600160a01b0381165f9081526020859052604090205460ff166142e8575b506001905b0161428e565b6001600160a01b03165f9081527ff02b465737fa6045c2ff53fb2df43c66916ac2166fa303264668fb2f6a1d8c0060205260409020805c1561432d57506001906142e2565b94600161433b92965d612dd1565b93858514614349575f6142dd565b50505050505050600190565b505050505050505f90565b60405162461bcd60e51b8152602060048201526024808201527f74696d657374616d70206973206f6c646572207468616e2070726576696f75736044820152632065726160e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f742076616c6964617465206265666f72652067656e6573697300006044820152606490fd5b93929150504282116144195761413c92614411575b50614136565b90505f61440b565b60405162461bcd60e51b815260206004820152602160248201527f74696d657374616d702063616e6e6f7420626520696e207468652066757475726044820152606560f81b6064820152608490fd5b506144776018870154856137a4565b4210614116565b6001600160801b038092160291166144968183612a5f565b918115612a695706156141af5760010190565b906144b49082614770565b156144bf57600f0190565b60090190565b60ff5f5160206149d95f395f51905f525460401c16156144e157565b631afcd79f60e31b5f5260045ffd5b356001600160801b03811681036127965790565b35906001600160801b038216820361279657565b60166145376141af9365ffffffffffff600285015460201c1690612a3e565b91015490612a5f565b61454a4282614770565b156145555760090190565b600f0190565b929391949061456a85876148f3565b156147115782156147115770014551231950b75fc4402da1732fc9bebe19831015614711576001169061010e6040519161012083018381106001600160401b038211176127965760405260883684376002600188160160888401538760898401526002840160a984015360aa830186905260ca8301527e300046524f53542d736563703235366b312d4b454343414b3235362d76316360ea8301526303430b6160e51b61010a830152812060cc820181815290600260ec84016001815360428420809318845253604270014551231950b75fc4402da1732fc9bebe19922060801c6001600160401b0360801b8260801b16179070014551231950b75fc4402da1732fc9bebe1990600160c01b9060401c090880156143555784601b6080945f9660209870014551231950b75fc4402da1732fc9bebe19910970014551231950b75fc4402da1732fc9bebe19038552018684015280604084015270014551231950b75fc4402da1732fc9bebe19910970014551231950b75fc4402da1732fc9bebe1903606082015282805260015afa505f51915f5260205260018060a01b0360405f20161490565b5050505050505f90565b614723612cf5565b5060028101546005820154604051929091614763916004916001600160a01b031661474d8661295a565b61475682612a20565b8652602086015201612b55565b6040830152606082015290565b906014600e8301549201548083146148155781818410931191821591111591819061480e575b156147ab57826147a557505090565b14919050565b60405162461bcd60e51b815260206004820152603560248201527f636f756c64206e6f74206964656e746966792076616c696461746f727320666f6044820152740722074686520676976656e2074696d657374616d7605c1b6064820152608490fd5b5081614796565b606460405162461bcd60e51b815260206004820152602060248201527f657261732074696d657374616d70206d757374206e6f7420626520657175616c6044820152fd5b8151919060418303614889576148829250602082015190606060408401519301515f1a90614916565b9192909190565b50505f9160029190565b60048110156127a057806148a5575050565b600181036148bc5763f645eedf60e01b5f5260045ffd5b600281036148d7575063fce698f760e01b5f5260045260245ffd5b6003146148e15750565b6335e2f38360e21b5f5260045260245ffd5b6401000003d01990600790829081818009900908906401000003d0199080091490565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161498d579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561278b575f516001600160a01b0381161561498357905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"829:23108:157:-:0;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;;;;;;7894:76:30;;-1:-1:-1;;;;;;;;;;;829:23108:157;;7983:34:30;7979:146;;-1:-1:-1;829:23108:157;;;;;;;;;7979:146:30;-1:-1:-1;;;;;;829:23108:157;-1:-1:-1;;;;;829:23108:157;;;-1:-1:-1;;;;;;;;;;;829:23108:157;;;8085:29:30;;829:23108:157;;8085:29:30;7979:146;;;;7894:76;7936:23;;;-1:-1:-1;7936:23:30;;-1:-1:-1;7936:23:30;829:23108:157;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561010a575b50361561001a575f80fd5b5f5160206149b95f395f51905f525461003860018201541515612996565b6001600160801b033416156100ba57335f908152601a9190910160205260409020541561006157005b60405162461bcd60e51b815260206004820152602b60248201527f636f756c646e277420726563656976652045746865722066726f6d20756e6b6e60448201526a6f776e2070726f6772616d60a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f7a65726f2076616c7565207472616e73666572206973206e6f7420616c6c6f77604482015261195960f21b6064820152608490fd5b5f905f3560e01c9081627a32e7146127b4575080630c18d277146122bc578063120e3f1e1461213057806328e24b3d146121025780633683c4d214611e755780633bd109fa14611e265780633d43b41814611dd257806353f7fd48146118195780636c2eb35014611487578063715018a61461141e57806371a8cf2d146113f057806382bdeaad146112d857806384d22a4f1461127a57806388f50cf0146112415780638b1edf1e146111765780638da5cb5b146111415780638f381dbe146110fb5780639067088e146110b257806396a2ddfa146110845780639eb939a81461102d578063a5d53a4414610fbf578063b24fcac014610986578063baaf020114610885578063c13911e814610841578063c2eb812f14610515578063ca1e7819146104c5578063cacf66ab1461048d578063d456fd5114610457578063e3a6684f14610418578063e6fabc09146103df578063ed612f8c146103a7578063edc8722514610352578063f2fde38b14610325578063f4f20ac0146102ec5763facd743b0361000f57346102e95760203660031901126102e9576102ab61280a565b60036102c65f5160206149b95f395f51905f525442906144a9565b019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b80fd5b50346102e957806003193601126102e9575f5160206149b95f395f51905f5254600701546040516001600160a01b039091168152602090f35b50346102e95760203660031901126102e95761034f61034261280a565b61034a612ddf565b612d60565b80f35b50346102e957806003193601126102e957602061039f5f5160206149b95f395f51905f52546008600461038542846144a9565b0154910154906001600160801b038260801c92169061447e565b604051908152f35b50346102e957806003193601126102e957602060046103d55f5160206149b95f395f51905f525442906144a9565b0154604051908152f35b50346102e957806003193601126102e9575f5160206149b95f395f51905f5254600501546040516001600160a01b039091168152602090f35b50346102e957806003193601126102e957604060085f5160206149b95f395f51905f525401548151906001600160801b038116825260801c6020820152f35b50346102e957806003193601126102e957602065ffffffffffff60045f5160206149b95f395f51905f5254015416604051908152f35b50346102e957806003193601126102e957602065ffffffffffff60025f5160206149b95f395f51905f52540154821c16604051908152f35b50346102e957806003193601126102e9576105116104fd60046104f75f5160206149b95f395f51905f525442906144a9565b01612b55565b604051918291602083526020830190612871565b0390f35b50346102e957806003193601126102e9576040516105328161293e565b61053a612c8e565b815260405161054881612923565b5f8152602081015f9052602082015261055f612c8e565b604082015261056c612d2d565b606082015260405161057d81612923565b5f80825260208201526080820152610593612c8e565b60a08201528160c082015260e001525f5160206149b95f395f51905f52546105b9612d2d565b506105c66009820161471b565b906105d3600f820161471b565b600882015492604051936105e68561295a565b6001600160801b038116855260801c602085015260408401526060830152601b81015490601c8101546040519261061c8461293e565b604051610628816128f4565b60018401548152600284015463ffffffff8116602083015260201c65ffffffffffff16604082015284526040519461065f86612923565b60038401548652600484015465ffffffffffff166020870152602085019586526040519061068c826128f4565b60058501546001600160a01b0390811683526006860154811660208401526007860154166040808401919091528601918252606086019081526106d160158601612be0565b94608087019586526016016106e590612cac565b9160a0870192835260c0870193845260e087019485526040519788976020895251805160208a0152602081015163ffffffff1660408a01526040015165ffffffffffff16606089015251805160808901526020015165ffffffffffff1660a088015251600160a01b6001900381511660c0880152600160a01b6001900360208201511660e0880152600160a01b60019003906040015116610100870152516101208601610200905280516001600160801b031661022087015260208101516001600160801b031661024087015260408101516102608701608090526102a087016107ce916128ad565b90606001519061021f19878203016102808801526107eb916128ad565b935180516001600160401b0316610140870152602001516001600160801b031661016086015251805161018086015260208101516101a0860152604001516101c0850152516101e0840152516102008301520390f35b50346102e95760203660031901126102e95760ff604060209260195f5160206149b95f395f51905f525401600435825284522054166108836040518092612864565bf35b50346102e95760203660031901126102e9576004356001600160401b038111610982576108b6903690600401612834565b905f5160206149b95f395f51905f5254906108d083612aea565b916108de6040519384612975565b8383526108ea84612aea565b602084019490601f1901368637601a869201915b81811061094957868587604051928392602084019060208552518091526040840192915b818110610930575050500390f35b8251845285945060209384019390920191600101610922565b8061095f61095a6001938588612ba8565b612c0e565b828060a01b03165f528360205260405f205461097b8288612bcc565b52016108fe565b5080fd5b50346102e95760603660031901126102e9576004356001600160401b03811161098257806004019161010060031983360301126102e957600260243510156102e9576044356001600160401b038111610982576109e7903690600401612834565b9390917f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610fb05760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f5160206149b95f395f51905f525491610a5360018401541515612996565b825415610ed6575b60038301908154916044870135809303610e8357600485019765ffffffffffff89541696602489019765ffffffffffff610a948a612ce2565b1610610e0357610aa984889b96999a9b6131b2565b98606095879b8c9a60a482019860198c019c5b610ac68b8b613713565b9190501015610c8e578e610ada8b8b613713565b90911015610c7a578f60ff8f926040908f9360061b01928335948582526020522054166003811015610c6657600103610c035760408f918f928f936020830194610b2386613748565b15610beb57601c928782526020528481209050600260ff1982541617905501610b4c8154612dd1565b90555b610b5883613748565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208451878152a2360312610be75791610bde916020600194610bac60405191610ba483612923565b848352613755565b91829101526040519060208201928352151560f81b604082015260218152610bd5604182612975565b51902090613762565b9e019d8e610abc565b8c80fd5b905083918682526020522060ff198154169055610b4f565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b8e52602160045260248efd5b634e487b7160e01b8c52603260045260248cfd5b8a9950926020610d93998f948e9794610d889665ffffffffffff98858151910120610cb9858c6137b1565b91610cc4868d613cc4565b93610cda6064610cd38c612ce2565b9701612cd4565b9060405196898801983589528d60d01b9060d01b166040880152604687015260ff60f81b9060f81b1660668601526067850152608784015260a783015260c782015260c78152610d2b60e782612975565b5190208099610d3985612ce2565b8760405191610d4783612923565b8483521693849101525584198254161790557f7ebe42360bcb182fe0a88148b081e4557c89d09aa6af8307635ac2f83e2aaa656020604051898152a1612ce2565b1693602435916140d4565b15610dbe57807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b60405162461bcd60e51b815260206004820152604c60248201527f62617463682074696d657374616d70206d75737420626520677265617465722060448201527f6f7220657175616c20746f206c617465737420636f6d6d69747465642062617460648201526b063682074696d657374616d760a41b608482015260a490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d6974746564206261746368604482015264040d0c2e6d60db1b6064820152608490fd5b610eec610ee560648701612cd4565b823561311d565b15610f5c5765ffffffffffff610f0460248701612ce2565b164211610a5b5760405162461bcd60e51b815260206004820152602360248201527f62617463682074696d657374616d70206d75737420626520696e207468652070604482015262185cdd60ea1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b633ee5aeb560e01b8152600490fd5b50346102e957806003193601126102e95760406110005f5160206149b95f395f51905f52546002610ff860018060a01b039242906144a9565b0154166130ee565b6020825193849282845280519283918282870152018585015e828201840152601f01601f19168101030190f35b50346102e957806003193601126102e957611046612c8e565b50606061106360165f5160206149b95f395f51905f525401612cac565b61088360405180926040809180518452602081015160208501520151910152565b50346102e957806003193601126102e9576020601b5f5160206149b95f395f51905f52540154604051908152f35b50346102e95760203660031901126102e9576110cc61280a565b601a5f5160206149b95f395f51905f5254019060018060a01b03165f52602052602060405f2054604051908152f35b50346102e95760203660031901126102e957600435906001600160401b0382116102e95760206111376111313660048601612834565b90612c22565b6040519015158152f35b50346102e957806003193601126102e9575f5160206149995f395f51905f52546040516001600160a01b039091168152602090f35b50346102e957806003193601126102e9575f5160206149b95f395f51905f5254600181019081546111fc576002015463ffffffff16409081156111b7575580f35b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b50346102e957806003193601126102e9575f5160206149b95f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346102e957806003193601126102e957611293612a08565b5060406112b060155f5160206149b95f395f51905f525401612be0565b610883825180926001600160801b03602080926001600160401b038151168552015116910152565b50346102e95760203660031901126102e9576004356001600160401b03811161098257611309903690600401612834565b905f5160206149b95f395f51905f52549061132383612aea565b916113316040519384612975565b83835261133d84612aea565b602084019490601f19013686376019869201915b8181106113a657868587604051928392602084019060208552518091526040840192915b818110611383575050500390f35b91935091602080826113986001948851612864565b019401910191849392611375565b6113b1818386612ba8565b3587528260205260ff6040882054166113ca8287612bcc565b60038210156113dc5752600101611351565b634e487b7160e01b89526021600452602489fd5b50346102e957806003193601126102e957602060035f5160206149b95f395f51905f52540154604051908152f35b50346102e957806003193601126102e957611437612ddf565b5f5160206149995f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102e957806003193601126102e9575f5160206149d95f395f51905f525460ff8160401c16908115611804575b506117f5575f5160206149d95f395f51905f52805468ffffffffffffffffff1916680100000000000000021790555f5160206149995f395f51905f5254611510906001600160a01b03166115086144c5565b61034a6144c5565b5f5160206149b95f395f51905f5254604090815161152e8382612975565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611562612ddf565b5190205f1981019081116117e157916020917fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2938251908482019081528482526115ac8483612975565b60ff19915190201690815f5160206149b95f395f51905f52557f059eb9adf6e95b839d818142ed5bd5e498b6d95138e65c91525e93cc0f0339fc848451848152a16115f5612e12565b80516001840155600283019063ffffffff868201511669ffffffffffff00000000868454930151881b169169ffffffffffffffffffff191617179055600581016005830190808203611793575b5050600881016001600160801b038154169060088401916001600160801b0319835416178255546001600160801b0382549181191691161790556116cb61168942836144a9565b6116a06001600160a01b036002610ff842876144a9565b6116b660046116af42876144a9565b0192612a20565b906116c14293612b55565b9160098701612e5a565b601581016015830190808203611741575b5050601681016016830191818303611721575b5050505060ff60401b195f5160206149d95f395f51905f5254165f5160206149d95f395f51905f52555160028152a180f35b60189283925490556017810154601785015501549101555f8080806116ef565b806001600160401b03806001600160801b03935416166001600160401b031984541617835554851c16600160401b600160c01b03825491861b1690600160401b600160c01b0319161790555f806116dc565b5481546001600160a01b03199081166001600160a01b039283161790925560068381015490850180548416918316919091179055600780840154908501805490931691161790555f80611642565b634e487b7160e01b84526011600452602484fd5b63f92ee8a960e01b8152600490fd5b600291506001600160401b031610155f6114b6565b50346102e9576101603660031901126102e95761183461280a565b6024356001600160a01b0381169190829003611dce576118526127de565b61185a6127f4565b60c435916084359160a43560403660e3190112611dca5761012435946001600160401b038611611dc65736602387011215611dc6578560040135916001600160401b038311611dc2573660248489010111611dc257610144356001600160401b038111611dbe576118cf903690600401612834565b9690945f5160206149d95f395f51905f5254996001600160401b0360ff8c60401c16159b1680159081611db6575b6001149081611dac575b159081611da3575b50611d9457611951908b60016001600160401b03195f5160206149d95f395f51905f525416175f5160206149d95f395f51905f5255611d64575b6115086144c5565b6119596144c5565b4215611d0e578215611cb85782821115611c5757600a6119798484612a3e565b04841015611c125760409a8b516119908d82612975565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526119c4612ddf565b5190205f198101908111611bfe578c51602080820192835281528d9392916119ec8583612975565b60ff19915190201698895f5160206149b95f395f51905f525583518a815260207f059eb9adf6e95b839d818142ed5bd5e498b6d95138e65c91525e93cc0f0339fc91a1611a37612e12565b805160018c015560028b0190602081015163ffffffff1686835492015160201b69ffffffffffff00000000169169ffffffffffffffffffff191617179055835190611a81826128f4565b8282526001600160a01b03908116602083018190529381169490910184905260058a018054919092166001600160a01b031991821617909155600689018054821690921790915560078801805490911690911790557003000000000000000000000000000000026008870155611af5612a08565b508951611b0181612923565b639502f90081526509184e72a0006020909101526015860180546001600160c01b0319166d09184e72a000000000009502f900179055895183908b90611b46816128f4565b8381528460208201520152601686015560178501556018840155865194611b6c86612923565b60e4358652610104356020870152611b88913691602401612aa5565b9042933690611b9692612b01565b9160090193611ba494612e5a565b611bac575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f5160206149d95f395f51905f5254165f5160206149d95f395f51905f52555160018152a180f35b634e487b7160e01b8e52601160045260248efd5b60405162461bcd60e51b815260206004820152601b60248201527f76616c69646174696f6e2064656c617920697320746f6f2062696700000000006044820152606490fd5b60405162461bcd60e51b815260206004820152603360248201527f657261206475726174696f6e206d757374206265206772656174657220746861604482015272371032b632b1ba34b7b710323ab930ba34b7b760691b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f656c656374696f6e206475726174696f6e206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f63757272656e742074696d657374616d70206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b600160401b60ff60401b195f5160206149d95f395f51905f525416175f5160206149d95f395f51905f5255611949565b63f92ee8a960e01b8d5260048dfd5b9050155f61190f565b303b159150611907565b8c91506118fd565b8a80fd5b8980fd5b8880fd5b8780fd5b8280fd5b50346102e95760203660031901126102e957611dec61280a565b611df4612ddf565b5f5160206149b95f395f51905f525460050180546001600160a01b0319166001600160a01b0390921691909117905580f35b50346102e957806003193601126102e957611e3f612a08565b506040611e63611e5e5f5160206149b95f395f51905f525442906144a9565b612a20565b60208251918051835201516020820152f35b50346102e95760603660031901126102e957600435611e926127de565b5f5160206149b95f395f51905f5254611eb060018201541515612996565b8284526019810160205260ff60408520541660038110156120ee57600203612092576040516020810190848252602435604082015260408152611ef4606082612975565b51902060405160608101908082106001600160401b0383111761208e57605a916040527f3d605080600a3d3981f3608060405263e6fabc0960e01b5f5260205f6004817381523060601b6b5afa15604c575f80805136821760208201527f80378136915af43d5f803e156048573d5ff35b3d5ffd5b5f80fd000000000000604082015286f590811561208a576001600160a01b0382165f908152601a820160205260409020849055601b018054611faa90612dd1565b90556040516001600160a01b03821680825293907f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a2506001600160a01b0381166120855750335b5f5160206149b95f395f51905f5254600501546001600160a01b0316823b1561208157604051631c9776b560e31b81526001600160a01b039092166004830152602482015260016044820152828160648183865af1801561207657612061575b602082604051908152f35b61206c838092612975565b6109825781612056565b6040513d85823e3d90fd5b8380fd5b611ff6565b8480fd5b8680fd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b85526021600452602485fd5b50346102e957806003193601126102e957602060015f5160206149b95f395f51905f52540154604051908152f35b50346102e95760203660031901126102e9576004358149156122405760195f5160206149b95f395f51905f525461216c60018201541515612996565b018183528060205260ff604084205416600381101561222c576121cb5781835260209081526040808420805460ff19166001179055519182527f5c261a095dd5720475295dc06379921c003c22164ee6cae5cf83e76ce0a1b98591a180f35b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b634e487b7160e01b84526021600452602484fd5b60405162461bcd60e51b815260206004820152604860248201527f626c6f622063616e277420626520666f756e642c20726f75746572206578706560448201527f63746564204549502d34383434207472616e73616374696f6e2077697468205760648201526720a9a690313637b160c11b608482015260a490fd5b34612796576080366003190112612796576004356122d86127de565b906122e16127f4565b915f5160206149b95f395f51905f525461230060018201541515612996565b825f526019810160205260ff60405f20541660038110156127a057600203612092576040516020810190848252602435604082015260408152612344606082612975565b5190206040516102c08101908082106001600160401b03831117612796576102b0916040527f60808060405261029e90816100128239f3fe608060405260043610610254575f81527f3560e01c806336a52a18146100ab57806342129d00146100a65780635ce6c32760208201527f146100a1578063701da98e1461009c578063704ed542146100975780637a8e0c60408201527fdd1461009257806391d5a64c1461008d5780639ce110d714610088578063affe60608201527fd0e0146100835763e43f3433036102545761023f565b610222565b6101fa565b60808201527f6101e4565b6101b1565b610181565b610165565b610143565b610106565b346160a08201527ed4575f3660031901126100d45760025460081c6001600160a01b031660809060c08201527f8152602090f35b5f80fd5b9181601f840112156100d45782359167ffffffffff60e08201527fffffff83116100d457602083818601950101116100d457565b604036600319016101008201527f126100d45760043567ffffffffffffffff81116100d4576101329036906004016101208201527f6100d8565b505060243580151514610254575f80fd5b346100d4575f366003196101408201527f01126100d457602060ff600254166040519015158152f35b346100d4575f36606101608201527f031901126100d45760205f54604051908152f35b346100d457602036600319016101808201527f126100d4576004356fffffffffffffffffffffffffffffffff811614610254576101a08201527f5f80fd5b60403660031901126100d45760243567ffffffffffffffff811161006101c08201527fd4576101dd9036906004016100d8565b5050610254565b346100d457602036606101e08201527f0319011215610254575f80fd5b346100d4575f3660031901126100d4576003546102008201527f6040516001600160a01b039091168152602090f35b346100d4575f36600319016102208201527f126100d4576020600154604051908152f35b346100d4575f36600319011215616102408201523060601c7f0254575f80fd5b63e6fabc0960e01b5f5260205f60048173000000000000000017610260820152735afa156100d4575f808051368280378136915af43060a01b176102808201526f3d5f803e1561029a573d5ff35b3d5ffd60801b6102a08201525ff5908115612796576001600160a01b0382165f908152601a820160205260409020849055601b0180546126db90612dd1565b90556040516001600160a01b03821680825293907f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a2506001600160a01b03811661279a575033915b813b1561279657604051631c9776b560e31b81526001600160a01b039384166004820152921660248301525f604483018190528260648183855af191821561278b5760209261277b575b50604051908152f35b5f61278591612975565b5f612772565b6040513d5f823e3d90fd5b5f80fd5b91612728565b634e487b7160e01b5f52602160045260245ffd5b34612796575f36600319011261279657602090601c5f5160206149b95f395f51905f525401548152f35b604435906001600160a01b038216820361279657565b606435906001600160a01b038216820361279657565b600435906001600160a01b038216820361279657565b35906001600160a01b038216820361279657565b9181601f84011215612796578235916001600160401b038311612796576020808501948460051b01011161279657565b9060038210156127a05752565b90602080835192838152019201905f5b81811061288e5750505090565b82516001600160a01b0316845260209384019390920191600101612881565b9060208251805183520151602082015260018060a01b036020830151166040820152608060606128eb604085015160a08386015260a0850190612871565b93015191015290565b606081019081106001600160401b0382111761290f57604052565b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b0382111761290f57604052565b61010081019081106001600160401b0382111761290f57604052565b608081019081106001600160401b0382111761290f57604052565b90601f801991011681019081106001600160401b0382111761290f57604052565b1561299d57565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b60405190612a1582612923565b5f6020838281520152565b90604051612a2d81612923565b602060018294805484520154910152565b91908203918211612a4b57565b634e487b7160e01b5f52601160045260245ffd5b8115612a69570490565b634e487b7160e01b5f52601260045260245ffd5b919082604091031261279657604051612a9581612923565b6020808294803584520135910152565b9291926001600160401b03821161290f5760405191612ace601f8201601f191660200184612975565b829481845281830111612796578281602093845f960137010152565b6001600160401b03811161290f5760051b60200190565b929190612b0d81612aea565b93612b1b6040519586612975565b602085838152019160051b810192831161279657905b828210612b3d57505050565b60208091612b4a84612820565b815201910190612b31565b90604051918281549182825260208201905f5260205f20925f5b818110612b86575050612b8492500383612975565b565b84546001600160a01b0316835260019485019487945060209093019201612b6f565b9190811015612bb85760051b0190565b634e487b7160e01b5f52603260045260245ffd5b8051821015612bb85760209160051b010190565b90604051612bed81612923565b91546001600160401b038116835260401c6001600160801b03166020830152565b356001600160a01b03811681036127965790565b612c3b5f5160206149b95f395f51905f525442906144a9565b600301905f5b838110612c515750505050600190565b612c5f61095a828685612ba8565b6001600160a01b03165f9081526020849052604090205460ff1615612c8657600101612c41565b505050505f90565b60405190612c9b826128f4565b5f6040838281528260208201520152565b90604051612cb9816128f4565b60406002829480548452600181015460208501520154910152565b3560ff811681036127965790565b3565ffffffffffff811681036127965790565b60405190612d028261295a565b5f606083604051612d1281612923565b83815283602082015281528260208201528160408201520152565b60405190612d3a8261295a565b815f81525f6020820152612d4c612cf5565b60408201526060612d5b612cf5565b910152565b6001600160a01b03168015612dbe575f5160206149995f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f198114612a4b5760010190565b5f5160206149995f395f51905f52546001600160a01b03163303612dff57565b63118cdaa760e01b5f523360045260245ffd5b612e1a612c8e565b50604051612e27816128f4565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b81810292918115918404141715612a4b57565b9291908051906020810191825170014551231950b75fc4402da1732fc9bebe19821091826130dd575b5050156130895751845551600184015560405190612ec66021836020808201945f86528051918291018484015e81015f838201520301601f198101845283612975565b612f03602b604051809360208201956a600b5981380380925939f360a81b87525180918484015e81015f838201520301601f198101835282612975565b51905ff06001600160a01b03811615613050576002830180546001600160a01b0319166001600160a01b039092169190911790555f5b600483018054821015612f77575f90815260208082208301546001600160a01b0316825260038501905260409020805460ff19169055600101612f39565b5050925f5b8451811015612fc0576001906001600160a01b03612f9a8288612bcc565b5116828060a01b03165f526003840160205260405f208260ff1982541617905501612f7c565b5092600482018151916001600160401b03831161290f57600160401b831161290f57815483835580841061302a575b50602001905f5260205f205f5b83811061300d575050505060050155565b82516001600160a01b031681830155602090920191600101612ffc565b825f528360205f2091820191015b8181106130455750612fef565b5f8155600101613038565b60405162461bcd60e51b81526020600482015260116024820152701111541313d65351539517d19052531151607a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602660248201527f46524f53542061676772656761746564207075626c6963206b657920697320696044820152651b9d985b1a5960d21b6064820152608490fd5b6130e792506148f3565b5f80612e83565b803b905f19820190828211612a4b5760019060405193603e601f19910116840160405282845260208401903c90565b435f1981019392908411612a4b5760ff1643811061316d57505f925b83811015613149575b505f925050565b804082810361315b5750600193505050565b15613168575f1901613139565b613142565b6131779043612a3e565b92613139565b903590601e198136030182121561279657018035906001600160401b03821161279657602001918160051b3603831361279657565b906080810160016131c3828461317d565b9050116136b1576131d4818361317d565b90501561368a576131e49161317d565b15612bb857803590603e1981360301821215612796570191613206838061317d565b92906060925f95601a60fe19843603019401945b86881015613627578760051b8401358581121561279657840161323c81612c0e565b6001600160a01b03165f90815260208890526040902054156135ca575f608082016001600160801b0361326e826144f0565b161515806135b7575b6135a6575b6001600160a01b0361328d84612c0e565b604051630427a21d60e11b81526020600482015294911691610124850191906001600160801b039061330c906001600160a01b036132ca85612820565b166024890152602084013560448901526132e660408501613755565b151560648901526001600160a01b0361330160608601612820565b166084890152614504565b1660a486015261331e60a08201613755565b151560c486015236819003601e190160c082013581811215612796578201602081359101936001600160401b03821161279657606082023603851361279657819061010060e48a015252610144870193905f905b80821061355c5750505060e0820135908112156127965701803560208201926001600160401b038211612796578160051b9081360385136127965791879594936023198785030161010488015281845260208085019385010194935f9160fe19813603015b84841061344f5750505050505050602093916001600160801b03848093039316905af190811561278b575f9161341d575b5061341590600192613762565b97019661321a565b90506020813d8211613447575b8161343760209383612975565b8101031261279657516001613408565b3d915061342a565b919395979850919395601f19848203018752873582811215612796578301602081013582526001600160a01b0361348860408301612820565b1660208301526060810135603e193683900301811215612796578101602081013591906040016001600160401b03831161279657823603811361279657829060e060408601528160e08601526101008501375f61010083850101526001600160801b036134f760808301614504565b16606084015260a0810135608084015260c081013563ffffffff60e01b8116809103612796578360209361353960e086956101009560a060019a015201613755565b151560c0830152601f80199101160101990197019401918a9897969593916133d7565b90919460608060019288358152838060a01b0361357b60208b01612820565b1660208201526001600160801b0361359560408b01614504565b166040820152019601920190613372565b90506135b1816144f0565b9061327c565b506135c460a08401613748565b15613277565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b93509450945050602091508181519101209101357fd04cd9af813f6f0b56e9411a6ee6a84eb5ac35a96f0c33d2e3a07d65baa8f4186020604051838152a16040519060208201928352604082015260408152613684606082612975565b51902090565b5050507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b60405162461bcd60e51b815260206004820152603460248201527f636861696e436f6d6d69746d656e7420636f756c6420636f6e7461696e206174604482015273081b5bdcdd081bdb994818dbdb5b5a5d1b595b9d60621b6064820152608490fd5b903590601e198136030182121561279657018035906001600160401b03821161279657602001918160061b3603831361279657565b3580151581036127965790565b3590811515820361279657565b602080612b84928195946040519682889351918291018585015e8201908382015203018085520183612975565b903590605e1981360301821215612796570190565b91908201809211612a4b57565b60c0820160016137c1828561317d565b905011613c28576137d2818461317d565b90501561368a576137e3908361317d565b15612bb857803590607e19813603018212156127965701916060830190602061380b83612ce2565b91019065ffffffffffff8061381f84612ce2565b1691161015613bc95761383182612ce2565b65ffffffffffff80600286015460201c16911610613b6e5761387765ffffffffffff61387061386a8261386387612ce2565b1687614518565b93612ce2565b1684614518565b1115613b15576007820154600690920180548435946001600160a01b0394851694604082019391925f916020911660446138bd836138b5898961378f565b01358b6137a4565b604051948593849263095ea7b360e01b84528c600485015260248401525af1801561278b57613ade575b505460405163394f179b60e11b81526001600160a01b03909116600482015260248101959095526020818101356044870152856064815f885af194851561278b575f95613aa6575b509061393a9161378f565b9161394482612ce2565b9260405193637fbe95b560e01b85526040600486015260a48501918035601e1982360301811215612796578101602081359101936001600160401b038211612796578160061b360385136127965760606044890152819052869360c485019392915f5b818110613a6e57505050836020959365ffffffffffff829484895f96013560648601526139dd604060018060a01b039201612820565b16608485015216602483015203925af191821561278b575f92613a38575b50613a0590612ce2565b6040519160208301938452604083015265ffffffffffff60d01b9060d01b16606082015260468152613684606682612975565b9091506020813d602011613a66575b81613a5460209383612975565b81010312612796575190613a056139fb565b3d9150613a47565b919550919293604080600192838060a01b03613a898a612820565b1681526020890135602082015201960191019188959493926139a7565b919094506020823d602011613ad6575b81613ac360209383612975565b810103126127965790519361393a61392f565b3d9150613ab6565b6020813d602011613b0d575b81613af760209383612975565b81010312612796575180151581146138e7575f80fd5b3d9150613aea565b60405162461bcd60e51b815260206004820152602b60248201527f7265776172647320636f6d6d69746d656e74206d75737420746172676574207060448201526a726576696f75732065726160a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f7265776172647320636f6d6d69746d656e742074696d657374616d702070726560448201526c64617465732067656e6573697360981b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f7265776172647320636f6d6d69746d656e742074696d657374616d70206d75736044820152701d08189948199bdc881d1a19481c185cdd607a1b6064820152608490fd5b608460405162461bcd60e51b815260206004820152604060248201527f7265776172647320636f6d6d69746d656e74206d75737420626520656d70747960448201527f206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d656e746064820152fd5b903590601e198136030182121561279657018035906001600160401b0382116127965760200191813603831361279657565b9060e081016001613cd5828461317d565b90501161405d57613ce6818361317d565b90501561368a57613cf69161317d565b15612bb857803590609e198136030182121561279657016060810190613d1c828261317d565b90501561400a5765ffffffffffff600284015460201c1691613d3e8342612a3e565b613d4d60168601548092612a5f565b9360808401359460018101809111612a4b578503613fb257613d7285613d7893612e47565b906137a4565b93613d87601782015486612a3e565b4210613f6d57613d9690614540565b934260058601541015613f0d57613deb906040840195613ddd613de5613dbc8988613c92565b9190613dc8888a61317d565b949091613dd5368c612a7d565b943691612aa5565b933691612b01565b92612e5a565b7fa1a3b42179ad30022438a1ea333b38eaf4a7329beee5e2b8111c0dcd4e08821c6020604051858152a160a0823603126127965760405193613e2c8561295a565b613e363684612a7d565b8552356001600160401b03811161279657820136601f8201121561279657613e65903690602081359101612aa5565b602085015235906001600160401b038211612796570136601f8201121561279657613e97903690602081359101612b01565b91826040820152816060820152519160208351930151906040519283926020840195865260408401526060830160208351919301905f5b818110613eeb575050508152038082526136849060200182612975565b82516001600160a01b0316855286955060209485019490920191600101613ece565b60405162461bcd60e51b815260206004820152603260248201527f6c6f6f6b73206c696b652076616c696461746f727320666f72206e65787420656044820152711c9848185c9948185b1c9958591e481cd95d60721b6064820152608490fd5b60405162461bcd60e51b815260206004820152601b60248201527f656c656374696f6e206973206e6f7420796574207374617274656400000000006044820152606490fd5b60405162461bcd60e51b815260206004820152602a60248201527f636f6d6d69746d656e742065726120696e646578206973206e6f74206e657874604482015269040cae4c240d2dcc8caf60b31b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f6e65772076616c696461746f7273206c697374206d757374206e6f7420626520604482015264656d70747960d81b6064820152608490fd5b60405162461bcd60e51b815260206004820152604360248201527f76616c696461746f727320636f6d6d69746d656e74206d75737420626520656d60448201527f707479206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d606482015262195b9d60ea1b608482015260a490fd5b909493919365ffffffffffff600283015460201c166140f34284614518565b61410b61410560168601548093612e47565b836137a4565b918284108080614468575b156143f6575083106143b15761412c90836137a4565b106143605761413c905b826144a9565b94601960f81b5f523060601b60025260165260365f209360028110156127a0578061424c575050600181036142075715612bb85761417d8161418492613c92565b3691612aa5565b9160608351036141b2578260206141af9401516060604083015192015192600181549101549061455b565b90565b60405162461bcd60e51b815260206004820152602760248201527f46524f5354207369676e6174757265206c656e677468206d75737420626520396044820152663620627974657360c81b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f46524f5354207369676e6174757265206d7573742062652073696e676c6500006044820152606490fd5b91939160011461425f5750505050505f90565b61428490600860048796970154910154906001600160801b038260801c92169061447e565b925f9260035f9201915b86811015614355576142bd6142b46142ae61417d8460051b860186613c92565b86614859565b90929192614893565b6001600160a01b0381165f9081526020859052604090205460ff166142e8575b506001905b0161428e565b6001600160a01b03165f9081527ff02b465737fa6045c2ff53fb2df43c66916ac2166fa303264668fb2f6a1d8c0060205260409020805c1561432d57506001906142e2565b94600161433b92965d612dd1565b93858514614349575f6142dd565b50505050505050600190565b505050505050505f90565b60405162461bcd60e51b8152602060048201526024808201527f74696d657374616d70206973206f6c646572207468616e2070726576696f75736044820152632065726160e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f742076616c6964617465206265666f72652067656e6573697300006044820152606490fd5b93929150504282116144195761413c92614411575b50614136565b90505f61440b565b60405162461bcd60e51b815260206004820152602160248201527f74696d657374616d702063616e6e6f7420626520696e207468652066757475726044820152606560f81b6064820152608490fd5b506144776018870154856137a4565b4210614116565b6001600160801b038092160291166144968183612a5f565b918115612a695706156141af5760010190565b906144b49082614770565b156144bf57600f0190565b60090190565b60ff5f5160206149d95f395f51905f525460401c16156144e157565b631afcd79f60e31b5f5260045ffd5b356001600160801b03811681036127965790565b35906001600160801b038216820361279657565b60166145376141af9365ffffffffffff600285015460201c1690612a3e565b91015490612a5f565b61454a4282614770565b156145555760090190565b600f0190565b929391949061456a85876148f3565b156147115782156147115770014551231950b75fc4402da1732fc9bebe19831015614711576001169061010e6040519161012083018381106001600160401b038211176127965760405260883684376002600188160160888401538760898401526002840160a984015360aa830186905260ca8301527e300046524f53542d736563703235366b312d4b454343414b3235362d76316360ea8301526303430b6160e51b61010a830152812060cc820181815290600260ec84016001815360428420809318845253604270014551231950b75fc4402da1732fc9bebe19922060801c6001600160401b0360801b8260801b16179070014551231950b75fc4402da1732fc9bebe1990600160c01b9060401c090880156143555784601b6080945f9660209870014551231950b75fc4402da1732fc9bebe19910970014551231950b75fc4402da1732fc9bebe19038552018684015280604084015270014551231950b75fc4402da1732fc9bebe19910970014551231950b75fc4402da1732fc9bebe1903606082015282805260015afa505f51915f5260205260018060a01b0360405f20161490565b5050505050505f90565b614723612cf5565b5060028101546005820154604051929091614763916004916001600160a01b031661474d8661295a565b61475682612a20565b8652602086015201612b55565b6040830152606082015290565b906014600e8301549201548083146148155781818410931191821591111591819061480e575b156147ab57826147a557505090565b14919050565b60405162461bcd60e51b815260206004820152603560248201527f636f756c64206e6f74206964656e746966792076616c696461746f727320666f6044820152740722074686520676976656e2074696d657374616d7605c1b6064820152608490fd5b5081614796565b606460405162461bcd60e51b815260206004820152602060248201527f657261732074696d657374616d70206d757374206e6f7420626520657175616c6044820152fd5b8151919060418303614889576148829250602082015190606060408401519301515f1a90614916565b9192909190565b50505f9160029190565b60048110156127a057806148a5575050565b600181036148bc5763f645eedf60e01b5f5260045ffd5b600281036148d7575063fce698f760e01b5f5260045260245ffd5b6003146148e15750565b6335e2f38360e21b5f5260045260245ffd5b6401000003d01990600790829081818009900908906401000003d0199080091490565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161498d579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561278b575f516001600160a01b0381161561498357905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"829:23108:157:-:0;;;;;;;;;;-1:-1:-1;829:23108:157;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;23563:107;23571:19;;;829:23108;23571:38;;23563:107;:::i;:::-;-1:-1:-1;;;;;23705:9:157;829:23108;23733:9;829:23108;;23810:10;-1:-1:-1;829:23108:157;;;23838:28;;;;;829:23108;;;;;;23838:42;829:23108;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;:::i;:::-;7723:40;14248:37:161;-1:-1:-1;;;;;;;;;;;829:23108:157;14269:15:161;14248:37;;:::i;:::-;7723:40:157;:52;1052:614:22;829:23108:157;;;;;-1:-1:-1;829:23108:157;;;;;;-1:-1:-1;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;6816:34;;829:23108;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;2357:1:29;829:23108:157;;:::i;:::-;2303:62:29;;:::i;:::-;2357:1;:::i;:::-;829:23108:157;;;;;;;;;;;;;;;;8436:211;-1:-1:-1;;;;;;;;;;;829:23108:157;8533:25;829:23108;14248:37:161;14269:15;14248:37;;:::i;:::-;8474:38:157;829:23108;8533:25;;829:23108;;-1:-1:-1;;;;;829:23108:157;;;;;8436:211;;:::i;:::-;829:23108;;;;;;;;;;;;;;;;;;;;;14248:37:161;-1:-1:-1;;;;;;;;;;;829:23108:157;14269:15:161;14248:37;;:::i;:::-;8245:41:157;829:23108;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;6586:23;;829:23108;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;7933:25;-1:-1:-1;;;;;;;;;;;829:23108:157;7933:25;829:23108;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;6464:40;829:23108;;;;;;;;;;;;;;;;;;;;;;;6201:32;-1:-1:-1;;;;;;;;;;;829:23108:157;6201:32;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;14248:37:161;-1:-1:-1;;;;;;;;;;;829:23108:157;14269:15:161;14248:37;;:::i;:::-;8117:41:157;829:23108;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;:::i;:::-;-1:-1:-1;829:23108:157;;;;;-1:-1:-1;829:23108:157;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;-1:-1:-1;829:23108:157;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;;;:::i;:::-;-1:-1:-1;17993:28:161;18000:20;;;17993:28;:::i;:::-;18079:20;18072:28;18079:20;;;18072:28;:::i;:::-;5492:25:157;;;829:23108;;;;;;;;:::i;:::-;-1:-1:-1;;;;;829:23108:157;;;;;;;18117:241:161;;829:23108:157;;18117:241:161;;829:23108:157;;18117:241:161;;829:23108:157;5881:33;;;829:23108;5949:39;;;;829:23108;;;;;;;:::i;:::-;;;;;;:::i;:::-;18000:20:161;5575:19:157;;829:23108;;;5881:33;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5630:27;;;829:23108;;;;;;;;;;;;;;5535:464;;829:23108;;;;;;;;;:::i;:::-;5686:20;;;829:23108;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;18079:20:161;829:23108:157;;;;;;;;;;;;5535:464;;829:23108;;;;5535:464;;829:23108;;;;5789:22;;;829:23108;:::i;:::-;5535:464;829:23108;5535:464;;829:23108;;;5836:16;;829:23108;;;:::i;:::-;5535:464;829:23108;5535:464;;829:23108;;;;5535:464;;829:23108;;;;5535:464;;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1052:614:22;829:23108:157;;1052:614:22;829:23108:157;;;;;;;;;1052:614:22;829:23108:157;;1052:614:22;829:23108:157;;;;;;;;;;;1052:614:22;829:23108:157;;1052:614:22;829:23108:157;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;;;8886:22;-1:-1:-1;;;;;;;;;;;829:23108:157;8886:22;829:23108;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;829:23108:157;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;829:23108:157;;;;9759:28;9691:13;9759:28;;9686:129;9706:23;;;;;;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;829:23108:157;;;;;;;;;9759:28;829:23108;;;9731:3;9788:15;;;9759:28;9788:15;;;;:::i;:::-;;:::i;:::-;829:23108;;;;;;-1:-1:-1;829:23108:157;;;;;-1:-1:-1;829:23108:157;;9750:54;;;;:::i;:::-;829:23108;;9691:13;;829:23108;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;:::i;:::-;3327:69:73;;;757:66:37;3327:69:73;1737:93:37;;1948:4;757:66;3556:68:73;-1:-1:-1;;;;;;;;;;;829:23108:157;12447:19;12439:107;1948:4:37;12447:19:157;;829:23108;12447:38;;12439:107;:::i;:::-;829:23108;;12710:20;12706:259;;829:23108;13078:27;;;829:23108;;;13114:33;829:23108;13114:33;;829:23108;13078:69;;;829:23108;;;13242:37;;829:23108;;;;;13283:21;829:23108;13283:21;;;829:23108;13283:21;;;:::i;:::-;829:23108;-1:-1:-1;829:23108:157;;13448:28;;;;;;;;;:::i;:::-;16209:34;829:23108;16259:13;;16278:22;;;;;;16436:19;;;;16254:826;16309:3;16278:22;;;;:::i;:::-;16274:33;;;;;;;16371:22;;;;;:::i;:::-;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13078:27;829:23108;;;;;1948:4:37;16436:79:157;829:23108;;;16621:17;;;;;;829:23108;16621:17;;;;;;:::i;:::-;;;;16744:39;829:23108;;;;;;;;;;;;;;;;;;;;16744:39;:41;829:23108;;16744:41;:::i;:::-;829:23108;;16617:270;16939:17;;;:::i;:::-;829:23108;;16906:51;829:23108;;;;;;16906:51;829:23108;;;;;;16996:73;829:23108;;1948:4:37;829:23108:157;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;8366:57:161;829:23108:157;8366:57:161;;829:23108:157;;;;;;;;;;;;8366:57:161;;;;;;:::i;:::-;829:23108:157;8356:68:161;;16996:73:157;;:::i;:::-;16309:3;829:23108;16259:13;;;;829:23108;;;;16617:270;829:23108;;;;;;;;;;;;;;;;;16617:270;;829:23108;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;16274:33;;;;;829:23108;14217:146;16274:33;;;;;;14328:21;16274:33;829:23108;16274:33;829:23108;;;;;17097:32;13588:30;;;;:::i;:::-;13664:33;;;;;:::i;:::-;13797:21;13879:13;;13797:21;;;:::i;:::-;13879:13;;;:::i;:::-;829:23108;;;6827:303:161;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6827:303:161;;;;;;:::i;:::-;829:23108:157;6804:336:161;;14122:21:157;;;;;:::i;:::-;829:23108;;;;;;;:::i;:::-;;;;;14086:58;;;;829:23108;;;;;;;;;;14159:26;829:23108;;;;;;14159:26;14328:21;:::i;:::-;829:23108;;;;14217:146;;:::i;:::-;1285:66;;;3556:68:73;757:66:37;3556:68:73;829:23108:157;;1285:66;829:23108;;-1:-1:-1;;;1285:66:157;;829:23108;;1285:66;;;;829:23108;1285:66;;829:23108;1285:66;829:23108;;;1285:66;13879:13;;1285:66;829:23108;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;12706:259;12754:56;12796:13;;;;;:::i;:::-;829:23108;;12754:56;:::i;:::-;829:23108;;;;12893:21;829:23108;12893:21;;;:::i;:::-;829:23108;12875:15;:39;12706:259;829:23108;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;12796:13:157;829:23108;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;12796:13:157;829:23108;;;;;;1737:93:37;-1:-1:-1;;;1789:30:37;;829:23108:157;;1789:30:37;829:23108:157;;;;;;;;;;;;;;7153:91;-1:-1:-1;;;;;;;;;;;829:23108:157;7166:77;14248:37:161;1052:614:22;829:23108:157;;;;14269:15:161;;14248:37;;:::i;:::-;7166:77:157;829:23108;;7153:91;:::i;:::-;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10184:19;-1:-1:-1;;;;;;;;;;;829:23108:157;10184:19;829:23108;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9920:36;-1:-1:-1;;;;;;;;;;;829:23108:157;9920:36;829:23108;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;:::i;:::-;9410:31;-1:-1:-1;;;;;;;;;;;829:23108:157;9410:31;:43;1052:614:22;829:23108:157;;;;;-1:-1:-1;829:23108:157;;;;;-1:-1:-1;829:23108:157;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;10475:19;;;829:23108;;;;;10585:26;;829:23108;;;10575:37;;10631:25;;829:23108;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;6699:35;;829:23108;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;8758:25;-1:-1:-1;;;;;;;;;;;829:23108:157;8758:25;829:23108;:::i;:::-;;;;;;-1:-1:-1;;;;;829:23108:157;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;829:23108:157;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;829:23108:157;;;;9237:19;9172:13;9237:19;;9167:120;9187:20;;;;;;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;9209:3;9263:12;;;;;:::i;:::-;829:23108;;;;;;;;;;;;9228:48;;;;:::i;:::-;829:23108;;;;;;;;;9172:13;;829:23108;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;6329:30;-1:-1:-1;;;;;;;;;;;829:23108:157;6329:30;829:23108;;;;;;;;;;;;;;;;;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;829:23108:157;;-1:-1:-1;;;;;;829:23108:157;;;;;;;-1:-1:-1;;;;;829:23108:157;3975:40:29;829:23108:157;;3975:40:29;829:23108:157;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;;;;;;6429:44:30;;;;;829:23108:157;6425:105:30;;;-1:-1:-1;;;;;;;;;;;829:23108:157;;-1:-1:-1;;829:23108:157;;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;6959:1:30;;-1:-1:-1;;;;;829:23108:157;6891:76:30;;:::i;:::-;;;:::i;6959:1::-;-1:-1:-1;;;;;;;;;;;829:23108:157;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:29;;:::i;:::-;829:23108:157;23306:27;;-1:-1:-1;;829:23108:157;;;;;;;;;;6654:20:30;829:23108:157;;;23287:52;;;;829:23108;;;23287:52;;;;;;;:::i;:::-;829:23108;;;;23277:63;;:89;829:23108;;-1:-1:-1;;;;;;;;;;;829:23108:157;23445:24;829:23108;;;;;;23445:24;3816:17;;:::i;:::-;829:23108;;6591:4:30;3791:22:157;;829:23108;3555:1;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;;3985:23;;;;3959;;829:23108;;;;;;;4133:28;;;;;-1:-1:-1;;;;;829:23108:157;;;4083:28;4133;4083;;846:1:161;-1:-1:-1;;;;;846:1:161;;;;;;;829:23108:157;-1:-1:-1;;;;;912:1:161;;846;;;912;;;;;;4571:339:157;14248:37:161;14269:15;14248:37;;:::i;:::-;4725:91:157;-1:-1:-1;;;;;3555:1:157;14248:37:161;14269:15;14248:37;;:::i;4725:91:157:-;829:23108;;14248:37:161;14269:15;14248:37;;:::i;:::-;4830:41:157;829:23108;;:::i;:::-;14269:15:161;829:23108:157;14269:15:161;829:23108:157;;:::i;:::-;4601:40;;;;4571:339;:::i;:::-;5007:25;;;;4979;;829:23108;;;;;;;5112:19;;;;;;5090;;829:23108;;;;;;;;;;;-1:-1:-1;;;829:23108:157;-1:-1:-1;;;;;;;;;;;829:23108:157;;-1:-1:-1;;;;;;;;;;;829:23108:157;;3555:1;829:23108;;6654:20:30;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;-1:-1:-1;;;;;829:23108:157;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;-1:-1:-1;;;;;;;912:1:161;;829:23108:157;;;;912:1:161;-1:-1:-1;;;;;;;912:1:161;;;;;829:23108:157;;;;;;;;-1:-1:-1;;;;;;829:23108:157;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;-1:-1:-1;;;829:23108:157;;;;;;;;6425:105:30;-1:-1:-1;;;6496:23:30;;829:23108:157;;6496:23:30;6429:44;3555:1:157;829:23108;;-1:-1:-1;;;;;829:23108:157;6448:25:30;;6429:44;;;829:23108:157;;;;;;;-1:-1:-1;;829:23108:157;;;;;;:::i;:::-;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;829:23108:157;;-1:-1:-1;;;;;829:23108:157;;;;;4301:16:30;829:23108:157;;4724:16:30;;:34;;;;829:23108:157;;4788:16:30;:50;;;;829:23108:157;4853:13:30;:30;;;;829:23108:157;4849:91:30;;;6959:1;829:23108:157;;;-1:-1:-1;;;;;829:23108:157;-1:-1:-1;;;;;;;;;;;829:23108:157;;;-1:-1:-1;;;;;;;;;;;829:23108:157;4977:67:30;;829:23108:157;6891:76:30;;:::i;6959:1::-;6891:76;;:::i;:::-;2085:15:157;:19;829:23108;;2167:21;;829:23108;;2251:32;;;829:23108;;;2564:2;2528:32;;;;:::i;:::-;829:23108;2508:58;;829:23108;;;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:29;;:::i;:::-;829:23108:157;23306:27;;-1:-1:-1;;829:23108:157;;;;;;;;;;23287:52;;;829:23108;;;23287:52;;829:23108;;;;23287:52;829:23108;;23287:52;:::i;:::-;829:23108;;;;23277:63;;:89;829:23108;;-1:-1:-1;;;;;;;;;;;829:23108:157;;;;;;;23445:24;;;2728:17;;:::i;:::-;829:23108;;;2706:19;;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;829:23108:157;;;;2778:52;;829:23108;;;;;;2778:52;;;;829:23108;;;2755:20;;;829:23108;;;;;;-1:-1:-1;;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;912:1:161;2840:25:157;;;912:1:161;829:23108:157;;:::i;:::-;;;;;;;:::i;:::-;724:13:161;829:23108:157;;1006:18:161;829:23108:157;8543:89:161;;;829:23108:157;3028:22;;;829:23108;;-1:-1:-1;;;;;;912:1:161;;;;;829:23108:157;;;;;;;;;:::i;:::-;;;;3115:65;829:23108;3115:65;;829:23108;3115:65;829:23108;3096:16;;;829:23108;;912:1:161;;829:23108:157;912:1:161;;;829:23108:157;;;;;;;:::i;:::-;;;912:1:161;;;829:23108:157;;912:1:161;;;;;829:23108:157;;;;912:1:161;:::i;:::-;2085:15:157;;829:23108;;912:1:161;;;;:::i;:::-;3262:37:157;;;3232:213;;;;:::i;:::-;5064:101:30;;829:23108:157;;;5064:101:30;829:23108:157;5140:14:30;829:23108:157;-1:-1:-1;;;829:23108:157;-1:-1:-1;;;;;;;;;;;829:23108:157;;-1:-1:-1;;;;;;;;;;;829:23108:157;;;;;5140:14:30;829:23108:157;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;4977:67:30;-1:-1:-1;;;;;;829:23108:157;-1:-1:-1;;;;;;;;;;;829:23108:157;;;-1:-1:-1;;;;;;;;;;;829:23108:157;4977:67:30;;4849:91;-1:-1:-1;;;4906:23:30;;829:23108:157;4906:23:30;;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:30;;4724:34;;;-1:-1:-1;4724:34:30;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;:::i;:::-;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;829:23108:157;10303:23;;829:23108;;-1:-1:-1;;;;;;829:23108:157;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14248:37:161;-1:-1:-1;;;;;;;;;;;829:23108:157;14269:15:161;14248:37;;:::i;:::-;829:23108:157;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;829:23108:157;14619:107;829:23108;14627:19;;829:23108;14627:38;;14619:107;:::i;:::-;829:23108;;;14758:19;;;829:23108;;;;;;;;;;;;;;14796:24;14758:62;829:23108;;;;;15078:32;;829:23108;;;;;;;;;;;15078:32;;;829:23108;15078:32;;:::i;:::-;829:23108;15068:43;;829:23108;1052:614:22;829:23108:157;1052:614:22;;;;;;-1:-1:-1;;;;;1052:614:22;;;;;446:4:160;1052:614:22;829:23108:157;1052:614:22;921:66:160;3266:83:22;;15201:4:157;829:23108;;1067:66:160;1066:105;829:23108:157;3266:83:22;;;1222:66:160;829:23108:157;3266:83:22;;;1300:150:160;;;;;;;-1:-1:-1;;;;;829:23108:157;;-1:-1:-1;829:23108:157;;;15285:28;;;829:23108;;;;;;;;15342:33;;829:23108;;15342:35;;;:::i;:::-;829:23108;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;15393:32;;829:23108;;15393:32;-1:-1:-1;;;;;;829:23108:157;;1052:614:22;;11683:10:157;;11646:70;-1:-1:-1;;;;;;;;;;;829:23108:157;6586:23;;829:23108;-1:-1:-1;;;;;829:23108:157;11606:131;;;;;829:23108;;-1:-1:-1;;;11606:131:157;;-1:-1:-1;;;;;829:23108:157;;;;11606:131;;829:23108;;;;;1052:614:22;829:23108:157;;;;11606:131;829:23108;11606:131;829:23108;11606:131;;;;;;;;;;11646:70;829:23108;;;;;;;;11606:131;;;;;;:::i;:::-;829:23108;;11606:131;;;;829:23108;;;;;;;;;11606:131;829:23108;;;11646:70;;;1300:150:160;;;;1052:614:22;;;;829:23108:157;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;6087:22;-1:-1:-1;;;;;;;;;;;829:23108:157;6087:22;829:23108;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;10853:11;;:16;829:23108;;11140:19;-1:-1:-1;;;;;;;;;;;829:23108:157;11001:107;829:23108;11009:19;;829:23108;11009:38;;11001:107;:::i;:::-;11140:19;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;;;;11375:32;;;829:23108;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;;;:::i;:::-;;;;:::i;:::-;11990:37;-1:-1:-1;;;;;;;;;;;829:23108:157;14619:107;14627:19;;;829:23108;14627:38;;14619:107;:::i;:::-;829:23108;;;14758:19;;;829:23108;;;;;;;;;;;;;;14796:24;14758:62;829:23108;;;;;15078:32;;829:23108;;;;;;;;;;;15078:32;;;;;;:::i;:::-;829:23108;15068:43;;829:23108;1052:614:22;;;;;;;;-1:-1:-1;;;;;1052:614:22;;;;;441:6:159;1052:614:22;829:23108:157;1052:614:22;654:66:159;3266:83:22;;764:66:159;829:23108:157;3266:83:22;;;874:66:159;829:23108:157;3266:83:22;;;984:66:159;15078:32:157;3266:83:22;;;1094:66:159;829:23108:157;3266:83:22;;;1204:66:159;1196:6;3266:83:22;;;1314:66:159;1306:6;3266:83:22;;;1424:66:159;829:23108:157;3266:83:22;;;1534:66:159;1526:6;3266:83:22;;;1644:66:159;1636:6;3266:83:22;;;1754:66:159;1746:6;3266:83:22;;;1864:66:159;1856:6;3266:83:22;;;1974:66:159;1966:6;3266:83:22;;;2084:66:159;2076:6;3266:83:22;;;2194:66:159;2186:6;3266:83:22;;;2304:66:159;2296:6;3266:83:22;;;2414:66:159;2406:6;3266:83:22;;;2524:66:159;2516:6;3266:83:22;;;2634:66:159;2626:6;3266:83:22;;;15262:4:157;15078:32;829:23108;2782:66:159;2781:107;2761:6;3266:83:22;;;3042:66:159;15262:4:157;1196:6:159;829:23108:157;2980:129:159;2958:6;3266:83:22;;;3164:66:159;;;3156:6;3266:83:22;;;829:23108:157;3242:150:159;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;15285:28;;;829:23108;;;;;;;;15342:33;;829:23108;;15342:35;;;:::i;:::-;829:23108;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;15393:32;;829:23108;;15393:32;-1:-1:-1;;;;;;829:23108:157;;1052:614:22;;12115:10:157;;12078:70;;12038:133;;;;;829:23108;;-1:-1:-1;;;12038:133:157;;-1:-1:-1;;;;;829:23108:157;;;;12038:133;;829:23108;;;;;;;-1:-1:-1;829:23108:157;;;;;;;;;-1:-1:-1;12038:133:157;;;;;;;;829:23108;12038:133;;;12078:70;829:23108;;;;;;;12038:133;829:23108;12038:133;;;:::i;:::-;829:23108;12038:133;;;829:23108;;;;;;;;;12038:133;829:23108;;;12078:70;;;;829:23108;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;10047:42;-1:-1:-1;;;;;;;;;;;829:23108:157;10047:42;829:23108;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;829:23108:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;829:23108:157;;;;;;:::o;:::-;;;-1:-1:-1;;;;;829:23108:157;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;829:23108:157;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1052:614:22;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;:::o;:::-;;;;-1:-1:-1;829:23108:157;;;;;-1:-1:-1;829:23108:157;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;829:23108:157;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;912:1:161;;;;;;;;;;;829:23108:157;;;;:::i;:::-;912:1:161;;;829:23108:157;;;912:1:161;;;829:23108:157;912:1:161;;;:::o;:::-;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;:::i;:::-;912:1:161;;;;;;;;;;;;;829:23108:157;912:1:161;;-1:-1:-1;912:1:161;;;;;;:::o;:::-;-1:-1:-1;;;;;912:1:161;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;829:23108:157;;;;;;;:::i;:::-;912:1:161;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;829:23108:157;;;;;:::i;:::-;912:1:161;;;;;;;;829:23108:157;;;;;;;;;;;;;;;;-1:-1:-1;829:23108:157;;-1:-1:-1;829:23108:157;;-1:-1:-1;829:23108:157;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;-1:-1:-1;829:23108:157;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;829:23108:157;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;:::o;:::-;;-1:-1:-1;;;;;829:23108:157;;;;;;;:::o;7257:375::-;14248:37:161;-1:-1:-1;;;;;;;;;;;829:23108:157;14269:15:161;14248:37;;:::i;:::-;7509:22:157;;;829:23108;7461:22;;;;;;7614:11;;;;829:23108;7257:375;:::o;7485:3::-;7532:14;;;;;;:::i;:::-;-1:-1:-1;;;;;829:23108:157;-1:-1:-1;829:23108:157;;;;;;;;;;;;;7508:39;7504:90;;829:23108;;7446:13;;7504:90;7567:12;;;;829:23108;7567:12;:::o;829:23108::-;;;;;;;:::i;:::-;-1:-1:-1;829:23108:157;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;829:23108:157;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;-1:-1:-1;829:23108:157;;-1:-1:-1;829:23108:157;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;:::o;3405:215:29:-;-1:-1:-1;;;;;829:23108:157;3489:22:29;;3485:91;;-1:-1:-1;;;;;;;;;;;829:23108:157;;-1:-1:-1;;;;;;829:23108:157;;;;;;;-1:-1:-1;;;;;829:23108:157;3975:40:29;-1:-1:-1;;3975:40:29;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;829:23108:157;;3509:1:29;3534:31;829:23108:157;-1:-1:-1;;829:23108:157;;;;;;;:::o;2658:162:29:-;-1:-1:-1;;;;;;;;;;;829:23108:157;-1:-1:-1;;;;;829:23108:157;966:10:34;2717:23:29;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:29;966:10:34;2763:40:29;829:23108:157;;-1:-1:-1;2763:40:29;9058:196:161;829:23108:157;;:::i;:::-;;;;;;;:::i;:::-;9177:1:161;829:23108:157;;;9196:12:161;829:23108:157;9145:102:161;;;829:23108:157;;9229:15:161;829:23108:157;;9145:102:161;;829:23108:157;9058:196:161;:::o;829:23108:157:-;;;;;;;;;;;;;;;;:::o;21418:1428::-;;;;912:1:161;;22118:25:157;;;;912:1:161;;;1146:66:27;;1837:24:26;;:71;;;;21418:1428:157;829:23108;;;;;912:1:161;829:23108:157;;912:1:161;829:23108:157;;;;;;876:31:163;;829:23108:157;876:31:163;22118:25:157;876:31:163;;;829:23108:157;-1:-1:-1;829:23108:157;;;;;;;;;;;;;;-1:-1:-1;829:23108:157;;;;876:31:163;;829:23108:157;;876:31:163;;;;;;:::i;:::-;946:2074;829:23108:157;;;946:2074:163;;22118:25:157;946:2074:163;;829:23108:157;;;;;;;;;;;;;;;-1:-1:-1;829:23108:157;;;;946:2074:163;;829:23108:157;;946:2074:163;;;;;;:::i;:::-;3031:265;;-1:-1:-1;3031:265:163;-1:-1:-1;;;;;829:23108:157;;3314:21:163;829:23108:157;;22285:52;;;829:23108;;-1:-1:-1;;;;;;829:23108:157;-1:-1:-1;;;;;829:23108:157;;;;;;;;;-1:-1:-1;22448:3:157;22423:16;;;829:23108;;22419:27;;;;;-1:-1:-1;829:23108:157;;;22118:25;829:23108;;;;;;-1:-1:-1;;;;;829:23108:157;;;;22521:15;;829:23108;;;;;;;-1:-1:-1;;829:23108:157;;;;;22404:13;;22419:27;;;;-1:-1:-1;22623:3:157;829:23108;;22596:25;;;;;829:23108;;-1:-1:-1;;;;;22663:17:157;829:23108;22663:17;;:::i;:::-;829:23108;;;;;;;;-1:-1:-1;829:23108:157;;22694:15;;829:23108;;;-1:-1:-1;829:23108:157;;;;;;;;;;;22581:13;;22596:25;;;22423:16;22748;;829:23108;;;-1:-1:-1;;;;;829:23108:157;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;22576:163;829:23108;22118:25;829:23108;;-1:-1:-1;829:23108:157;22118:25;-1:-1:-1;829:23108:157;-1:-1:-1;829:23108:157;;;;;;22791:28;;;;;;829:23108;21418:1428::o;829:23108::-;;;-1:-1:-1;;;;;829:23108:157;;;;;22118:25;829:23108;;;;;;;;;;-1:-1:-1;829:23108:157;;22118:25;-1:-1:-1;829:23108:157;;;;;;;;;;;;;;;;-1:-1:-1;829:23108:157;;;;;;;;;-1:-1:-1;;;829:23108:157;;22118:25;829:23108;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;22118:25;829:23108;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;1837:71:26;1865:43;;;;:::i;:::-;1837:71;;;;3551:161:163;3671:19;;;-1:-1:-1;;829:23108:157;;;;;;;;411:1:163;4514:807;;;829:23108:157;4514:807:163;829:23108:157;;4514:807:163;;;;;;;;;;;;;;;3551:161;:::o;7717:518:161:-;7828:12;-1:-1:-1;;829:23108:157;;;7717:518:161;;829:23108:157;;;;;;7828:12:161;7868:22;;7828:12;;7868:50;829:23108:157;7868:50:161;;7952:8;;;;;;7928:278;-1:-1:-1;829:23108:157;;-1:-1:-1;;7717:518:161:o;7933:17::-;7991:12;;8021:11;;;;;-1:-1:-1;7843:1:161;;-1:-1:-1;;;8052:11:161:o;8017:119::-;8088:8;8084:52;;-1:-1:-1;;829:23108:157;7933:17:161;;8084:52;8116:5;;7868:50;7897:21;7828:12;;7897:21;:::i;:::-;7868:50;;;829:23108:157;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;:::o;15463:620::-;;15591:22;;;15624:1;15591:22;;;;:::i;:::-;:34;;;829:23108;;15697:22;;;;:::i;:::-;:34;;;15693:85;;15832:22;;;:::i;:::-;829:23108;;;;;;;;;;;;;;;;;;15922:23;;;;;:::i;:::-;20640:30;;829:23108;20686:13;829:23108;;20843:28;829:23108;;;;;;20843:28;;20681:679;20726:3;20701:23;;;;;;829:23108;;;;;;;;;;;;;;20872:18;;;:::i;:::-;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;20843:53;829:23108;;;15591:22;21012:25;;-1:-1:-1;;;;;21012:25:157;;;:::i;:::-;829:23108;21012:30;;:72;;;20726:3;21008:144;;20726:3;-1:-1:-1;;;;;21199:18:157;;;:::i;:::-;829:23108;;-1:-1:-1;;;21191:76:157;;;;;;829:23108;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;-1:-1:-1;;;;;829:23108:157;;;:::i;:::-;;;;;;21191:76;829:23108;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;829:23108:157;;;;;;;;;;;;;21191:76;829:23108;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21191:76;829:23108;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;16906:51;829:23108;;;;;;;;;;;;21191:76;829:23108;;;;;;;;;;;;;;;;;;;;;;;21191:76;;;;;;;;;;-1:-1:-1;;;;;21191:76:157;;;;829:23108;;21191:76;;;;;;;;829:23108;21191:76;;;829:23108;21302:47;;;15624:1;21302:47;;:::i;:::-;20726:3;829:23108;20686:13;;;21191:76;;;;;;;;;;;;;829:23108;21191:76;;;:::i;:::-;;;829:23108;;;;;15624:1;21191:76;;;;;-1:-1:-1;21191:76:157;;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;;;;21191:76;829:23108;;;;;-1:-1:-1;;;;;829:23108:157;;;;;:::i;:::-;;21191:76;829:23108;;;;;;;-1:-1:-1;;829:23108:157;;;;;;;;;;;;21191:76;829:23108;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;912:1:161;829:23108:157;;912:1:161;;;;;-1:-1:-1;;;;;829:23108:157;15591:22;829:23108;;;:::i;:::-;;;;;;;;;;15591:22;829:23108;;;;;;;;;;;;;;;;;;21191:76;829:23108;;;;;;;;15624:1;829:23108;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15624:1;829:23108;;;;;;;;;;;21191:76;829:23108;;;:::i;:::-;;21191:76;829:23108;;;-1:-1:-1;;;;;829:23108:157;;;;;:::i;:::-;;;;;;;;;;;;;;21008:144;21112:25;;;;;:::i;:::-;21008:144;;;21012:72;21047:37;;829:23108;21047:37;;;:::i;:::-;21046:38;21012:72;;829:23108;;;-1:-1:-1;;;829:23108:157;;21191:76;;829:23108;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;20701:23;;;;;;;;21191:76;20701:23;;829:23108;;;;;21377:28;15981:16;;829:23108;15962:36;21191:76;829:23108;;;;;15962:36;829:23108;;7282:41:161;21191:76:157;7282:41:161;;829:23108:157;;;;;;;;7282:41:161;;;829:23108:157;7282:41:161;;:::i;:::-;829:23108:157;7272:52:161;;15463:620:157;:::o;15693:85::-;15747:20;;;15754:13;15747:20;:::o;829:23108::-;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;17178:1645::-;17321:24;;;17356:1;17321:24;;;;:::i;:::-;:36;;;829:23108;;17450:24;;;;:::i;:::-;:36;;;17446:87;;17589:24;;;;:::i;:::-;829:23108;;;;;;;;;;;;;;;;;;17635:21;;;;;17659;17635;;;:::i;:::-;17659;;;829:23108;17659:21;;;;:::i;:::-;829:23108;;;17635:45;829:23108;;;17752:21;;;:::i;:::-;829:23108;17777:29;;;;829:23108;17659:21;829:23108;;;;17752:54;829:23108;;17976:46;829:23108;18000:21;17896:46;17920:21;;;;:::i;:::-;829:23108;17896:46;;:::i;:::-;18000:21;;:::i;:::-;829:23108;17976:46;;:::i;:::-;-1:-1:-1;829:23108:157;;;18156:31;;;829:23108;18204:32;;;;829:23108;;;;;-1:-1:-1;;;;;829:23108:157;;;;18303:19;;;;829:23108;;;;17659:21;;829:23108;18197:138;18272:62;17659:21;18303:19;;829:23108;18303:19;:::i;:::-;:31;829:23108;18272:62;;:::i;:::-;18303:19;829:23108;;;;;;;;;18197:138;;;;;;829:23108;;;;;18197:138;;;;;;;;17178:1645;-1:-1:-1;829:23108:157;18303:19;829:23108;-1:-1:-1;;;18377:185:157;;-1:-1:-1;;;;;829:23108:157;;;18197:138;18377:185;;829:23108;;;;;;;;17659:21;18522:26;;;829:23108;18197:138;829:23108;;;;18377:185;829:23108;-1:-1:-1;18377:185:157;;;;;;;;829:23108;18377:185;;;17178:1645;18663:19;;;;;:::i;:::-;18684:21;;;;:::i;:::-;829:23108;18303:19;829:23108;;;;;18614:92;;18303:19;18197:138;18614:92;;829:23108;;;;;;;;;;;;;;;;;;;;17659:21;829:23108;;;;;-1:-1:-1;;;;;829:23108:157;;;;;18204:32;829:23108;;;;;;;17635:21;18197:138;829:23108;;;;;;;;;;;;;;;;;;;;;;;;;17659:21;829:23108;;;;;;;;;;;18377:185;829:23108;;;;18303:19;1052:614:22;829:23108:157;;;;;;;:::i;:::-;;;;;;;;;;;18614:92;;;;;;;;;829:23108;18614:92;;;829:23108;18793:21;;;;:::i;:::-;18303:19;829:23108;18734:81;17659:21;18734:81;;829:23108;;;18303:19;829:23108;;;;;;;;;;17635:21;829:23108;;;18734:81;;;;;;;:::i;18614:92::-;;;;17659:21;18614:92;;17659:21;18614:92;;;;;;829:23108;18614:92;;;:::i;:::-;;;829:23108;;;;;;18793:21;18614:92;;;;;-1:-1:-1;18614:92:157;;829:23108;;;;;;;18303:19;829:23108;17356:1;829:23108;;;;;;;;;:::i;:::-;;;;17659:21;829:23108;;;17659:21;829:23108;;;;;;;;;;;;;;;;18377:185;;;;;17659:21;18377:185;;17659:21;18377:185;;;;;;829:23108;18377:185;;;:::i;:::-;;;829:23108;;;;;;;18663:19;18377:185;;;;;-1:-1:-1;18377:185:157;;18197:138;17659:21;18197:138;;17659:21;18197:138;;;;;;17659:21;18197:138;;;:::i;:::-;;;829:23108;;;;;;;;;;18197:138;829:23108;;;;18197:138;;;-1:-1:-1;18197:138:157;;829:23108;;;-1:-1:-1;;;829:23108:157;;17659:21;829:23108;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;17659:21;829:23108;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;17659:21;829:23108;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;:::o;18875:1605::-;;19021:27;;;19059:1;19021:27;;;;:::i;:::-;:39;;;829:23108;;19168:27;;;;:::i;:::-;:39;;;19164:90;;19313:27;;;:::i;:::-;829:23108;;;;;;;;;;;;;;;;;;19362:22;;;;;;;;:::i;:::-;:33;;;829:23108;;;19493:29;;;829:23108;;;;19475:15;:47;:15;;:47;:::i;:::-;19474:72;19526:16;;;829:23108;19474:72;;;:::i;:::-;19565:20;;;;829:23108;;19059:1;829:23108;;;;;;;19565:43;;829:23108;;19721:43;;19689:75;19721:43;;:::i;:::-;19689:75;;:::i;:::-;19816:25;19801:40;19816:25;;;829:23108;19801:40;;:::i;:::-;19475:15;19782:59;829:23108;;19969:34;;;:::i;:::-;19475:15;;829:23108;20021:28;;829:23108;20021:46;829:23108;;;20133:217;20233:45;;;;;912:1:161;;20233:45:157;;;;:::i;:::-;20292:22;;;;;;:::i;:::-;829:23108;;;912:1:161;829:23108:157;912:1:161;;:::i;:::-;829:23108:157;;912:1:161;;:::i;:::-;829:23108:157;;912:1:161;;:::i;:::-;20133:217:157;;:::i;:::-;20366:47;829:23108;20233:45;829:23108;;;;20366:47;829:23108;;;;;;;20233:45;829:23108;;;;;:::i;:::-;;;;;:::i;:::-;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20233:45;829:23108;;;;19362:22;829:23108;;;7522:30:161;912:1;829:23108:157;912:1:161;;7572:32;;912:1;829:23108:157;20233:45;829:23108;7488:206:161;;;829:23108:157;7488:206:161;;829:23108:157;;;20233:45;829:23108;;;19362:22;829:23108;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;7488:206:161;;;;;;829:23108:157;7488:206:161;;;:::i;829:23108:157:-;;;-1:-1:-1;;;;;829:23108:157;;;;;-1:-1:-1;829:23108:157;;;;;;;;;19059:1;829:23108;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;10566:3554:161;;;;;;829:23108:157;17277:29:161;;;829:23108:157;;;;17309:22:161;10881:15;17309:22;;:::i;:::-;17277:77;17309:45;17334:16;;;829:23108:157;17309:45:161;;;:::i;:::-;17277:77;;:::i;:::-;10911:15;;;;;;:82;;10566:3554;10907:706;;;11017:35;;;829:23108:157;;11109:25:161;;;;:::i;:::-;:39;829:23108:157;;11655:24:161;10907:706;;11655:24;;:::i;:::-;3226:200:77;-1:-1:-1;;;829:23108:157;3226:200:77;11720:4:161;3226:200:77;;17277:29:161;3226:200:77;17334:16:161;3226:200:77;;829:23108:157;3226:200:77;829:23108:157;17277:29:161;829:23108:157;;;;;11783:37:161;;;11844:23;;17277:19;11844:23;;829:23108:157;;;;;;;912:1:161;829:23108:157;;:::i;:::-;912:1:161;;;:::i;:::-;829:23108:157;3226:200:77;829:23108:157;;11979:23:161;829:23108:157;;12181:240:161;829:23108:157;12698:272:161;12181:240;;;3226:200:77;12181:240:161;;;;;;;829:23108:157;17277:19:161;829:23108:157;;12787:32:161;;829:23108:157;12698:272:161;;:::i;:::-;12691:279;:::o;829:23108:157:-;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;11779:2312:161;829:23108:157;;;17277:19:161;12991:37;12987:1104;;11779:2312;;;;;829:23108:157;10566:3554:161;:::o;12987:1104::-;13064:199;13101:15;13141:25;13101:15;;;;;829:23108:157;13141:25:161;;829:23108:157;;-1:-1:-1;;;;;829:23108:157;;;;;13064:199:161;;:::i;:::-;13278:27;829:23108:157;13325:13:161;13521:14;829:23108:157;13521:14:161;;13320:734;13364:3;13340:22;;;;;;3927:8:74;3871:27;912:1:161;829:23108:157;;;;;;;;:::i;912:1:161:-;3871:27:74;;:::i;:::-;3927:8;;;;;:::i;:::-;-1:-1:-1;;;;;829:23108:157;;;;;;;;;;;;;;;;13517:523:161;;13364:3;;17277:19;13364:3;13325:13;829:23108:157;13325:13:161;;13517:523;-1:-1:-1;;;;;2780:163:70;829:23108:157;2780:163:70;;;1285:66:157;829:23108;2780:163:70;;;;3327:69:73;;13685:50:161;;;13763:8;17277:19;13763:8;;;13681:223;3556:68:73;17277:19:161;13930:17;3556:68:73;;;13930:17:161;:::i;:::-;:30;;;;13926:96;;13517:523;;;13926:96;13988:11;;;;;;;17277:19;13988:11;:::o;13340:22::-;;;;;;;;829:23108:157;14068:12:161;:::o;829:23108:157:-;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;;;;10907:706:161;10881:15;;;;;;11390:21;;829:23108:157;;11655:24:161;11464:69;;;10907:706;;;;11464:69;11503:15;;11464:69;;;829:23108:157;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;10911:82:161;10961:32;10948:45;10961:32;;;829:23108:157;10948:45:161;;:::i;:::-;10881:15;10930:63;10911:82;;16343:446;-1:-1:-1;;;;;16343:446:161;;829:23108:157;;;;16642:24:161;;;;:::i;:::-;829:23108:157;;;;;;16754:5:161;829:23108:157;;16767:1:161;829:23108:157;16343:446:161;:::o;14883:312::-;;15006:37;14883:312;15006:37;;:::i;:::-;;;;15066;;15059:44;:::o;15002:187::-;15141:37;;15134:44;:::o;7082:141:30:-;829:23108:157;-1:-1:-1;;;;;;;;;;;829:23108:157;;;;7148:18:30;7144:73;;7082:141::o;7144:73::-;7189:17;;;-1:-1:-1;7189:17:30;;-1:-1:-1;7189:17:30;829:23108:157;;-1:-1:-1;;;;;829:23108:157;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;829:23108:157;;;;;;:::o;16977:179:161:-;17129:16;17091:34;17090:59;16977:179;829:23108:157;17096:29:161;;;829:23108:157;;;;17091:34:161;;:::i;:::-;17129:16;;829:23108:157;17090:59:161;;:::i;14438:322::-;14558:50;14592:15;14558:50;;:::i;:::-;14592:15;;;14631:37;;14624:44;:::o;14554:200::-;14706:37;;14699:44;:::o;6993:1787:20:-;;;;;;7600:63;;;;:::i;:::-;7599:64;7595:107;;7953:15;;7949:58;;-1:-1:-1;;8021:25:20;;;8017:68;;2935:1:27;2931:5;4018:14:20;829:23108:157;1052:614:22;;;;;;;;;-1:-1:-1;;;;;1052:614:22;;;;;;;425:3:20;829:23108:157;;;3883:1:27;2935;2931:5;;829:23108:157;425:3:20;3665:84:22;;;3266:83;829:23108:157;3266:83:22;;;3883:1:27;829:23108:157;;;3665:84:22;;;829:23108:157;3266:83:22;;;;;829:23108:157;3266:83:22;;;1573:66:20;829:23108:157;3266:83:22;;;-1:-1:-1;;;829:23108:157;3266:83:22;;;531:131:25;;829:23108:157;3266:83:22;;;;;;3883:1:27;829:23108:157;3665:84:22;;2935:1:27;3665:84:22;;829:23108:157;531:131:25;;5688:10:20;;;3266:83:22;;3665:84;829:23108:157;1146:66:27;;531:131:25;;6076:3:20;829:23108:157;-1:-1:-1;;;;;829:23108:157;;;6076:3:20;829:23108:157;;6054:44:20;1146:66:27;;;1852::20;1052:614:22;1852:66:20;;829:23108:157;1052:614:22;829:23108:157;6132:32:20;6125:57;8559:14;;8555:57;;1146:66:27;3389:2;6076:3:20;1146:66:27;829:23108:157;1146:66:27;648:2:20;1146:66:27;;;6396:43:26;;1146:66:27;;829:23108:157;3266:83:22;;829:23108:157;3266:83:22;;;;;1052:614;3266:83;;;1146:66:27;;6954:42:26;;-1:-1:-1;;829:23108:157;1530:4:24;3266:83:22;;;;;;2935:1:27;1640:140:24;;;829:23108:157;1640:140:24;1135:209:25;829:23108:157;1135:209:25;648:2:20;1135:209:25;1052:614:22;829:23108:157;;;;1052:614:22;829:23108:157;1135:209:25;4357:141:27;9285:100:26;6993:1787:20;:::o;8017:68::-;8062:12;;;;;;829:23108:157;8062:12:20;:::o;17367:424:161:-;829:23108:157;;:::i;:::-;-1:-1:-1;17628:51:161;;;829:23108:157;17746:27:161;;;829:23108:157;;;;;;;;17699:15:161;;-1:-1:-1;;;;;829:23108:157;;;;:::i;:::-;;;;:::i;:::-;;;17487:297:161;;;829:23108:157;17699:15:161;829:23108:157;:::i;:::-;;17487:297:161;;829:23108:157;17487:297:161;;;829:23108:157;17367:424:161;:::o;15482:855::-;;15692:54;15614;;;829:23108:157;15692:54:161;;829:23108:157;15820:10:161;;;829:23108:157;;15896:9:161;;;;15928;;;;;15960;;;16061:14;;;;;15482:855;829:23108:157;;;16300:30:161;;;16293:37;;15482:855;:::o;16300:30::-;16315:14;;15482:855;-1:-1:-1;15482:855:161:o;829:23108:157:-;;;-1:-1:-1;;;829:23108:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23108:157;;;;;;;16061:14:161;;;;;829:23108:157;;;;;;;;;;;;;;;;;;;;;;;;;2129:778:74;829:23108:157;;;2129:778:74;2319:2;2299:22;;2319:2;;2751:25;2535:196;;;;;;;;;;;;;;;-1:-1:-1;2535:196:74;2751:25;;:::i;:::-;2744:32;;;;;:::o;2295:606::-;2807:83;;2823:1;2807:83;2827:35;2807:83;;:::o;7280:532::-;829:23108:157;;;;;;7366:29:74;;;7411:7;;:::o;7362:444::-;829:23108:157;7462:38:74;;829:23108:157;;7523:23:74;;;7375:20;7523:23;829:23108:157;7375:20:74;7523:23;7458:348;7576:35;7567:44;;7576:35;;7634:46;;;;7375:20;7634:46;829:23108:157;;;7375:20:74;7634:46;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;;;7375:20;7763:32;829:23108:157;;;7375:20:74;7763:32;1768:251:27;-1:-1:-1;;913:66:27;702;;913;;;;;1986:15;1976:29;;1969:43;913:66;-1:-1:-1;;913:66:27;;1950:15;:62;1768:251;:::o;5203:1551:74:-;;;6283:66;6270:79;;6266:164;;829:23108:157;;;;;;-1:-1:-1;829:23108:157;;;;;;;;;;;;;;;;;;;6541:24:74;;;;;;;;;-1:-1:-1;6541:24:74;-1:-1:-1;;;;;829:23108:157;;6579:20:74;6575:113;;6698:49;-1:-1:-1;6698:49:74;-1:-1:-1;5203:1551:74;:::o;6575:113::-;6615:62;-1:-1:-1;6615:62:74;6541:24;6615:62;-1:-1:-1;6615:62:74;:::o;6266:164::-;6365:54;;;6381:1;6365:54;6385:30;6365:54;;:::o","linkReferences":{}},"methodIdentifiers":{"areValidators(address[])":"8f381dbe","codeState(bytes32)":"c13911e8","codesStates(bytes32[])":"82bdeaad","commitBatch((bytes32,uint48,bytes32,uint8,((address,bytes32,bool,address,uint128,bool,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4),bool)[])[],bytes32)[],(bytes32,bool)[],((uint256,bytes32),((address,uint256)[],uint256,address),uint48)[],((uint256,uint256),bytes,address[],uint256)[]),uint8,bytes[])":"b24fcac0","computeSettings()":"84d22a4f","createProgram(bytes32,bytes32,address)":"3683c4d2","createProgramWithAbiInterface(bytes32,bytes32,address,address)":"0c18d277","genesisBlockHash()":"28e24b3d","genesisTimestamp()":"cacf66ab","initialize(address,address,address,address,uint256,uint256,uint256,(uint256,uint256),bytes,address[])":"53f7fd48","isValidator(address)":"facd743b","latestCommittedBatchHash()":"71a8cf2d","latestCommittedBatchTimestamp()":"d456fd51","lookupGenesisHash()":"8b1edf1e","middleware()":"f4f20ac0","mirrorImpl()":"e6fabc09","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCodeIds(address[])":"baaf0201","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32)":"120e3f1e","setMirror(address)":"3d43b418","signingThresholdFraction()":"e3a6684f","storageView()":"c2eb812f","timelines()":"9eb939a8","transferOwnership(address)":"f2fde38b","validatedCodesCount()":"007a32e7","validators()":"ca1e7819","validatorsAggregatedPublicKey()":"3bd109fa","validatorsCount()":"ed612f8c","validatorsThreshold()":"edc87225","validatorsVerifiableSecretSharingCommitment()":"a5d53a44","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"}],\"name\":\"AnnouncesCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"BatchCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"name\":\"ComputationSettingsChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eraIndex\",\"type\":\"uint256\"}],\"name\":\"ValidatorsCommittedForEra\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"}],\"name\":\"areValidators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_codesIds\",\"type\":\"bytes32[]\"}],\"name\":\"codesStates\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint48\",\"name\":\"blockTimestamp\",\"type\":\"uint48\"},{\"internalType\":\"bytes32\",\"name\":\"previousCommittedBatchHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"expiry\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"exited\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"inheritor\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"valueToReceiveNegativeSign\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct Gear.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"call\",\"type\":\"bool\"}],\"internalType\":\"struct Gear.Message[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"}],\"internalType\":\"struct Gear.ChainCommitment[]\",\"name\":\"chainCommitment\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct Gear.CodeCommitment[]\",\"name\":\"codeCommitments\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"internalType\":\"struct Gear.OperatorRewardsCommitment\",\"name\":\"operators\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.StakerRewards[]\",\"name\":\"distribution\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct Gear.StakerRewardsCommitment\",\"name\":\"stakers\",\"type\":\"tuple\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"}],\"internalType\":\"struct Gear.RewardsCommitment[]\",\"name\":\"rewardsCommitment\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"aggregatedPublicKey\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"verifiableSecretSharingCommitment\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"eraIndex\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.ValidatorsCommitment[]\",\"name\":\"validatorsCommitment\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.BatchCommitment\",\"name\":\"_batch\",\"type\":\"tuple\"},{\"internalType\":\"enum Gear.SignatureType\",\"name\":\"_signatureType\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"_signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeSettings\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ComputationSettings\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_overrideInitializer\",\"type\":\"address\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_overrideInitializer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_abiInterface\",\"type\":\"address\"}],\"name\":\"createProgramWithAbiInterface\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisTimestamp\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_middleware\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_eraDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_electionDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validationDelay\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"_aggregatedPublicKey\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_verifiableSecretSharingCommitment\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestCommittedBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestCommittedBatchTimestamp\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lookupGenesisHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"middleware\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_programId\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_programsIds\",\"type\":\"address[]\"}],\"name\":\"programsCodeIds\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newMirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdFraction\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storageView\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"number\",\"type\":\"uint32\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"}],\"internalType\":\"struct Gear.GenesisBlockInfo\",\"name\":\"genesisBlock\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"}],\"internalType\":\"struct Gear.CommittedBatchInfo\",\"name\":\"latestCommittedBatch\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"middleware\",\"type\":\"address\"}],\"internalType\":\"struct Gear.AddressBook\",\"name\":\"implAddresses\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"thresholdNumerator\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"thresholdDenominator\",\"type\":\"uint128\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"aggregatedPublicKey\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"verifiableSecretSharingCommitmentPointer\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"list\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"useFromTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.ValidatorsView\",\"name\":\"validators0\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"aggregatedPublicKey\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"verifiableSecretSharingCommitmentPointer\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"list\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"useFromTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.ValidatorsView\",\"name\":\"validators1\",\"type\":\"tuple\"}],\"internalType\":\"struct Gear.ValidationSettingsView\",\"name\":\"validationSettings\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ComputationSettings\",\"name\":\"computeSettings\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"era\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"election\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validationDelay\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.Timelines\",\"name\":\"timelines\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"programsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validatedCodesCount\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouter.StorageView\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timelines\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"era\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"election\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validationDelay\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.Timelines\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsAggregatedPublicKey\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsVerifiableSecretSharingCommitment\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"AnnouncesCommitted(bytes32)\":{\"details\":\"This is an *informational* event, signaling that the all transitions until head were committed.\",\"params\":{\"head\":\"The hash of committed announces chain head.\"}},\"BatchCommitted(bytes32)\":{\"details\":\"This is an *informational* event, signaling that all commitments in batch has been applied.\",\"params\":{\"hash\":\"Batch keccak256 hash, see Gear.batchCommitmentHash.\"}},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"This is an *informational* event, signaling the results of code validation.\",\"params\":{\"codeId\":\"The ID of the code that was validated.\",\"valid\":\"The result of the validation: indicates whether the code ID can be used for program creation.\"}},\"CodeValidationRequested(bytes32)\":{\"details\":\"This is a *requesting* event, signaling that validators need to download and validate the code from the transaction blob.\",\"params\":{\"codeId\":\"The expected code ID of the applied WASM blob, represented as a Blake2 hash.\"}},\"ComputationSettingsChanged(uint64,uint128)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to change the computation settings. Users and program authors may want to adjust their practices, while validators need to apply the changes internally starting from the next block.\",\"params\":{\"threshold\":\"The amount of Gear gas initially allocated for free to allow the program to decide if it wants to process the incoming message.\",\"wvaraPerSecond\":\"The amount of WVara to be charged from the program's execution balance per second of computation.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProgramCreated(address,bytes32)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling the creation of a new program and its Ethereum mirror. Validators need to initialize it with a zeroed hash state internally.\",\"params\":{\"actorId\":\"ID of the actor that was created. It is accessible inside the co-processor and on Ethereum by this identifier.\",\"codeId\":\"The code ID of the WASM implementation of the created program.\"}},\"StorageSlotChanged(bytes32)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to wipe the router state, rendering all previously existing codes and programs ineligible. Validators need to wipe their databases immediately.\"},\"ValidatorsCommittedForEra(uint256)\":{\"details\":\"This is an *informational* and *request* event, signaling that validators has been set for the next era.\",\"params\":{\"eraIndex\":\"The index of the era for which the validators have been committed.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"reinitialize()\":{\"custom:oz-upgrades-validate-as-initializer\":\"\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"storageView()\":{\"details\":\"Returns the storage view of the contract storage.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"AnnouncesCommitted(bytes32)\":{\"notice\":\"Emitted when all necessary state transitions have been applied and states have changed.\"},\"BatchCommitted(bytes32)\":{\"notice\":\"Emitted when batch of commitments has been applied.\"},\"CodeGotValidated(bytes32,bool)\":{\"notice\":\"Emitted when a code, previously requested for validation, receives validation results, so its CodeStatus changed.\"},\"CodeValidationRequested(bytes32)\":{\"notice\":\"Emitted when a new code validation request is submitted.\"},\"ComputationSettingsChanged(uint64,uint128)\":{\"notice\":\"Emitted when the computation settings have been changed.\"},\"ProgramCreated(address,bytes32)\":{\"notice\":\"Emitted when a new program within the co-processor is created and is now available on-chain.\"},\"StorageSlotChanged(bytes32)\":{\"notice\":\"Emitted when the router's storage slot has been changed.\"},\"ValidatorsCommittedForEra(uint256)\":{\"notice\":\"Emitted when validators for the next era has been set.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@symbioticfi/core/=lib/symbiotic-rewards/lib/core/\",\":core/=lib/symbiotic-rewards/lib/core/\",\":ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":script/=script/\",\":src/=src/\",\":symbiotic-core/=lib/symbiotic-core/\",\":symbiotic-rewards/=lib/symbiotic-rewards/\",\":test/=test/\"],\"viaIR\":true},\"sources\":{\"lib/frost-secp256k1-evm/src/FROST.sol\":{\"keccak256\":\"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8\",\"dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA\"]},\"lib/frost-secp256k1-evm/src/utils/Memory.sol\":{\"keccak256\":\"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294\",\"dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb\",\"dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab\",\"dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol\":{\"keccak256\":\"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a\",\"dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol\":{\"keccak256\":\"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf\",\"dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol\":{\"keccak256\":\"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c\",\"dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"lib/openzeppelin-contracts/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de\",\"dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol\":{\"keccak256\":\"0x5360739db087f427430f8566608e9267df704d96928337a3a3b3e5382925c57f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec939f4b4f68ca36961fd5ea7a417a6a390715173a6999254a2f0a34e9298503\",\"dweb:/ipfs/QmVEE8fRTjXE9jQ5pyKrPSyb9FPPtaWwsqjCdcxaPvAWwW\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"src/IMiddleware.sol\":{\"keccak256\":\"0x0875a0367485080460121eb75740dec89415b59f9940a781c6ccf684cccf1a90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abf8522c1c60625ecfab48ca43fec7ce61d787d71cfaa7b5ecff22682ad38570\",\"dweb:/ipfs/QmR7uYiQieqGkFk6tJsMuUFFFZTXN4DEdyTbxSHQE6mw3D\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x2b43176b08617d83a2940156abcfcbcc44e9f764501b35b5b81ddbfb80a7e904\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5cf6c062db5bc4daa511f2b4c1ba3899dbf2b43e6addf8f0e81539bd67471b53\",\"dweb:/ipfs/QmVNrK3QkTC2F4a9Yu6kJb9hu12YXAQDKi2jhZAkZAhgab\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x232d0d4cb3c5868088d3e0b613289fc1ec07199413f5cd11ff1362e1a9bebc79\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://311bd37f4a691c3a01306c0e115fbb2b3a6464d0146ecc3e08008a472440fad5\",\"dweb:/ipfs/QmWGyUaMR2FiuocLSVJC4Gzu8cnWUN75rZutndpWuLUPWx\"]},\"src/Router.sol\":{\"keccak256\":\"0x02ba8948c2210f060ca7912af4d28716a2252a7926cf8eab88c8d6393af738ee\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fe52f7296190e230eea5cbfe269c9cccafacbec85c10c4d03cfad423413ecfdd\",\"dweb:/ipfs/Qmes4nSjcofqaB46kYBTb6DLu5cUiBC2nHfSLpasYYrQcz\"]},\"src/libraries/Clones.sol\":{\"keccak256\":\"0xecec126e66d2c9a3afcdba6ec4f0e2d8e900f82cc10b98ce6bc6de684b3486f4\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5216b8a2d3fecab77bbc611dc62601a82f199fbe12ed24133a7a106b3e715451\",\"dweb:/ipfs/Qma88bB6S8DPiiqodfCrSxzXoZZZPkQnagEbDwMxVBabQe\"]},\"src/libraries/ClonesSmall.sol\":{\"keccak256\":\"0x3e1ea4f9c4d5c3a7715cd3937748a9e945b89de4c5c5570a6dce28fefabf0afb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8bbc0e90470a4f2204bb4041e15f641302e00f46dabfc47e6576ed18f61caf4c\",\"dweb:/ipfs/QmfHcgAJvTgesjbP3YGKtK1BFCqngDZxisvoZQ329RvQcm\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0xc4dbccecfd856e8f08c0d96de2379632b560e43dbf91682ba3fa4d7dbd27d163\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://72a9289d5c80767308eef765192f2f1b7ff13e9815acaaf9f99219d6f52efcfc\",\"dweb:/ipfs/QmPRoskdmTEWyMp9fbJs5gnASfgsgxrhyjR9ciXkyYMsoW\"]},\"src/libraries/SSTORE2.sol\":{\"keccak256\":\"0xfd3e14bf6ac87bb6c3b08afd021efb1126dc40aaa9b46ec2a30033a19e895b02\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a99b52f0b327b40bea0ec74c312e6503263ab819141ab0c219c25aaa0b0014b8\",\"dweb:/ipfs/QmWT89Zrj1KQ1QXWvZ3WeVQANeWJ6RwqdTa5HncGxy3Zaq\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"bytes32","name":"head","type":"bytes32","indexed":false}],"type":"event","name":"AnnouncesCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32","indexed":false}],"type":"event","name":"BatchCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"threshold","type":"uint64","indexed":false},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128","indexed":false}],"type":"event","name":"ComputationSettingsChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"actorId","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32","indexed":false}],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[{"internalType":"uint256","name":"eraIndex","type":"uint256","indexed":false}],"type":"event","name":"ValidatorsCommittedForEra","anonymous":false},{"inputs":[{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"view","type":"function","name":"areValidators","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum Gear.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32[]","name":"_codesIds","type":"bytes32[]"}],"stateMutability":"view","type":"function","name":"codesStates","outputs":[{"internalType":"enum Gear.CodeState[]","name":"","type":"uint8[]"}]},{"inputs":[{"internalType":"struct Gear.BatchCommitment","name":"_batch","type":"tuple","components":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint48","name":"blockTimestamp","type":"uint48"},{"internalType":"bytes32","name":"previousCommittedBatchHash","type":"bytes32"},{"internalType":"uint8","name":"expiry","type":"uint8"},{"internalType":"struct Gear.ChainCommitment[]","name":"chainCommitment","type":"tuple[]","components":[{"internalType":"struct Gear.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"bool","name":"exited","type":"bool"},{"internalType":"address","name":"inheritor","type":"address"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"bool","name":"valueToReceiveNegativeSign","type":"bool"},{"internalType":"struct Gear.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct Gear.Message[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct Gear.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]},{"internalType":"bool","name":"call","type":"bool"}]}]},{"internalType":"bytes32","name":"head","type":"bytes32"}]},{"internalType":"struct Gear.CodeCommitment[]","name":"codeCommitments","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"struct Gear.RewardsCommitment[]","name":"rewardsCommitment","type":"tuple[]","components":[{"internalType":"struct Gear.OperatorRewardsCommitment","name":"operators","type":"tuple","components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"}]},{"internalType":"struct Gear.StakerRewardsCommitment","name":"stakers","type":"tuple","components":[{"internalType":"struct Gear.StakerRewards[]","name":"distribution","type":"tuple[]","components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}]},{"internalType":"uint48","name":"timestamp","type":"uint48"}]},{"internalType":"struct Gear.ValidatorsCommitment[]","name":"validatorsCommitment","type":"tuple[]","components":[{"internalType":"struct Gear.AggregatedPublicKey","name":"aggregatedPublicKey","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"internalType":"bytes","name":"verifiableSecretSharingCommitment","type":"bytes"},{"internalType":"address[]","name":"validators","type":"address[]"},{"internalType":"uint256","name":"eraIndex","type":"uint256"}]}]},{"internalType":"enum Gear.SignatureType","name":"_signatureType","type":"uint8"},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBatch"},{"inputs":[],"stateMutability":"view","type":"function","name":"computeSettings","outputs":[{"internalType":"struct Gear.ComputationSettings","name":"","type":"tuple","components":[{"internalType":"uint64","name":"threshold","type":"uint64"},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128"}]}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"address","name":"_overrideInitializer","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"address","name":"_overrideInitializer","type":"address"},{"internalType":"address","name":"_abiInterface","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"createProgramWithAbiInterface","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisTimestamp","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"address","name":"_middleware","type":"address"},{"internalType":"uint256","name":"_eraDuration","type":"uint256"},{"internalType":"uint256","name":"_electionDuration","type":"uint256"},{"internalType":"uint256","name":"_validationDelay","type":"uint256"},{"internalType":"struct Gear.AggregatedPublicKey","name":"_aggregatedPublicKey","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"internalType":"bytes","name":"_verifiableSecretSharingCommitment","type":"bytes"},{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"view","type":"function","name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"latestCommittedBatchHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"latestCommittedBatchTimestamp","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"lookupGenesisHash"},{"inputs":[],"stateMutability":"view","type":"function","name":"middleware","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorImpl","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_programId","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address[]","name":"_programsIds","type":"address[]"}],"stateMutability":"view","type":"function","name":"programsCodeIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"address","name":"newMirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdFraction","outputs":[{"internalType":"uint128","name":"","type":"uint128"},{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"storageView","outputs":[{"internalType":"struct IRouter.StorageView","name":"","type":"tuple","components":[{"internalType":"struct Gear.GenesisBlockInfo","name":"genesisBlock","type":"tuple","components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint32","name":"number","type":"uint32"},{"internalType":"uint48","name":"timestamp","type":"uint48"}]},{"internalType":"struct Gear.CommittedBatchInfo","name":"latestCommittedBatch","type":"tuple","components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint48","name":"timestamp","type":"uint48"}]},{"internalType":"struct Gear.AddressBook","name":"implAddresses","type":"tuple","components":[{"internalType":"address","name":"mirror","type":"address"},{"internalType":"address","name":"wrappedVara","type":"address"},{"internalType":"address","name":"middleware","type":"address"}]},{"internalType":"struct Gear.ValidationSettingsView","name":"validationSettings","type":"tuple","components":[{"internalType":"uint128","name":"thresholdNumerator","type":"uint128"},{"internalType":"uint128","name":"thresholdDenominator","type":"uint128"},{"internalType":"struct Gear.ValidatorsView","name":"validators0","type":"tuple","components":[{"internalType":"struct Gear.AggregatedPublicKey","name":"aggregatedPublicKey","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"internalType":"address","name":"verifiableSecretSharingCommitmentPointer","type":"address"},{"internalType":"address[]","name":"list","type":"address[]"},{"internalType":"uint256","name":"useFromTimestamp","type":"uint256"}]},{"internalType":"struct Gear.ValidatorsView","name":"validators1","type":"tuple","components":[{"internalType":"struct Gear.AggregatedPublicKey","name":"aggregatedPublicKey","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"internalType":"address","name":"verifiableSecretSharingCommitmentPointer","type":"address"},{"internalType":"address[]","name":"list","type":"address[]"},{"internalType":"uint256","name":"useFromTimestamp","type":"uint256"}]}]},{"internalType":"struct Gear.ComputationSettings","name":"computeSettings","type":"tuple","components":[{"internalType":"uint64","name":"threshold","type":"uint64"},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128"}]},{"internalType":"struct Gear.Timelines","name":"timelines","type":"tuple","components":[{"internalType":"uint256","name":"era","type":"uint256"},{"internalType":"uint256","name":"election","type":"uint256"},{"internalType":"uint256","name":"validationDelay","type":"uint256"}]},{"internalType":"uint256","name":"programsCount","type":"uint256"},{"internalType":"uint256","name":"validatedCodesCount","type":"uint256"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"timelines","outputs":[{"internalType":"struct Gear.Timelines","name":"","type":"tuple","components":[{"internalType":"uint256","name":"era","type":"uint256"},{"internalType":"uint256","name":"election","type":"uint256"},{"internalType":"uint256","name":"validationDelay","type":"uint256"}]}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsAggregatedPublicKey","outputs":[{"internalType":"struct Gear.AggregatedPublicKey","name":"","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsVerifiableSecretSharingCommitment","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"reinitialize()":{"custom:oz-upgrades-validate-as-initializer":""},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"storageView()":{"details":"Returns the storage view of the contract storage."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@symbioticfi/core/=lib/symbiotic-rewards/lib/core/","core/=lib/symbiotic-rewards/lib/core/","ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","script/=script/","src/=src/","symbiotic-core/=lib/symbiotic-core/","symbiotic-rewards/=lib/symbiotic-rewards/","test/=test/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"lib/frost-secp256k1-evm/src/FROST.sol":{"keccak256":"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f","urls":["bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8","dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/Memory.sol":{"keccak256":"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859","urls":["bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294","dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol":{"keccak256":"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56","urls":["bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb","dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol":{"keccak256":"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc","urls":["bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab","dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol":{"keccak256":"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b","urls":["bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a","dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol":{"keccak256":"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a","urls":["bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf","dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol":{"keccak256":"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba","urls":["bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c","dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Arrays.sol":{"keccak256":"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e","urls":["bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d","dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Comparators.sol":{"keccak256":"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58","urls":["bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd","dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26","urls":["bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2","dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4","urls":["bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e","dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946","urls":["bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de","dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631","urls":["bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59","dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol":{"keccak256":"0x5360739db087f427430f8566608e9267df704d96928337a3a3b3e5382925c57f","urls":["bzz-raw://ec939f4b4f68ca36961fd5ea7a417a6a390715173a6999254a2f0a34e9298503","dweb:/ipfs/QmVEE8fRTjXE9jQ5pyKrPSyb9FPPtaWwsqjCdcxaPvAWwW"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77","urls":["bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b","dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS"],"license":"MIT"},"src/IMiddleware.sol":{"keccak256":"0x0875a0367485080460121eb75740dec89415b59f9940a781c6ccf684cccf1a90","urls":["bzz-raw://abf8522c1c60625ecfab48ca43fec7ce61d787d71cfaa7b5ecff22682ad38570","dweb:/ipfs/QmR7uYiQieqGkFk6tJsMuUFFFZTXN4DEdyTbxSHQE6mw3D"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x2b43176b08617d83a2940156abcfcbcc44e9f764501b35b5b81ddbfb80a7e904","urls":["bzz-raw://5cf6c062db5bc4daa511f2b4c1ba3899dbf2b43e6addf8f0e81539bd67471b53","dweb:/ipfs/QmVNrK3QkTC2F4a9Yu6kJb9hu12YXAQDKi2jhZAkZAhgab"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x232d0d4cb3c5868088d3e0b613289fc1ec07199413f5cd11ff1362e1a9bebc79","urls":["bzz-raw://311bd37f4a691c3a01306c0e115fbb2b3a6464d0146ecc3e08008a472440fad5","dweb:/ipfs/QmWGyUaMR2FiuocLSVJC4Gzu8cnWUN75rZutndpWuLUPWx"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0x02ba8948c2210f060ca7912af4d28716a2252a7926cf8eab88c8d6393af738ee","urls":["bzz-raw://fe52f7296190e230eea5cbfe269c9cccafacbec85c10c4d03cfad423413ecfdd","dweb:/ipfs/Qmes4nSjcofqaB46kYBTb6DLu5cUiBC2nHfSLpasYYrQcz"],"license":"UNLICENSED"},"src/libraries/Clones.sol":{"keccak256":"0xecec126e66d2c9a3afcdba6ec4f0e2d8e900f82cc10b98ce6bc6de684b3486f4","urls":["bzz-raw://5216b8a2d3fecab77bbc611dc62601a82f199fbe12ed24133a7a106b3e715451","dweb:/ipfs/Qma88bB6S8DPiiqodfCrSxzXoZZZPkQnagEbDwMxVBabQe"],"license":"UNLICENSED"},"src/libraries/ClonesSmall.sol":{"keccak256":"0x3e1ea4f9c4d5c3a7715cd3937748a9e945b89de4c5c5570a6dce28fefabf0afb","urls":["bzz-raw://8bbc0e90470a4f2204bb4041e15f641302e00f46dabfc47e6576ed18f61caf4c","dweb:/ipfs/QmfHcgAJvTgesjbP3YGKtK1BFCqngDZxisvoZQ329RvQcm"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0xc4dbccecfd856e8f08c0d96de2379632b560e43dbf91682ba3fa4d7dbd27d163","urls":["bzz-raw://72a9289d5c80767308eef765192f2f1b7ff13e9815acaaf9f99219d6f52efcfc","dweb:/ipfs/QmPRoskdmTEWyMp9fbJs5gnASfgsgxrhyjR9ciXkyYMsoW"],"license":"UNLICENSED"},"src/libraries/SSTORE2.sol":{"keccak256":"0xfd3e14bf6ac87bb6c3b08afd021efb1126dc40aaa9b46ec2a30033a19e895b02","urls":["bzz-raw://a99b52f0b327b40bea0ec74c312e6503263ab819141ab0c219c25aaa0b0014b8","dweb:/ipfs/QmWT89Zrj1KQ1QXWvZ3WeVQANeWJ6RwqdTa5HncGxy3Zaq"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":79289,"exportedSymbols":{"Clones":[79661],"ClonesSmall":[79742],"FROST":[40134],"Gear":[80886],"IERC20":[45587],"IMiddleware":[72281],"IMirror":[72455],"IRouter":[72764],"OwnableUpgradeable":[41409],"ReentrancyGuardTransientUpgradeable":[42870],"Router":[79288],"SSTORE2":[81302],"StorageSlot":[47840]},"nodeType":"SourceUnit","src":"39:23899:157","nodes":[{"id":77253,"nodeType":"PragmaDirective","src":"39:24:157","nodes":[],"literals":["solidity","^","0.8",".28"]},{"id":77255,"nodeType":"ImportDirective","src":"65:46:157","nodes":[],"absolutePath":"src/libraries/Clones.sol","file":"./libraries/Clones.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":79662,"symbolAliases":[{"foreign":{"id":77254,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79661,"src":"73:6:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77257,"nodeType":"ImportDirective","src":"112:56:157","nodes":[],"absolutePath":"src/libraries/ClonesSmall.sol","file":"./libraries/ClonesSmall.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":79743,"symbolAliases":[{"foreign":{"id":77256,"name":"ClonesSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79742,"src":"120:11:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77259,"nodeType":"ImportDirective","src":"169:42:157","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":80887,"symbolAliases":[{"foreign":{"id":77258,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"177:4:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77261,"nodeType":"ImportDirective","src":"212:48:157","nodes":[],"absolutePath":"src/libraries/SSTORE2.sol","file":"./libraries/SSTORE2.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":81303,"symbolAliases":[{"foreign":{"id":77260,"name":"SSTORE2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81302,"src":"220:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77263,"nodeType":"ImportDirective","src":"261:52:157","nodes":[],"absolutePath":"lib/frost-secp256k1-evm/src/FROST.sol","file":"frost-secp256k1-evm/FROST.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":40135,"symbolAliases":[{"foreign":{"id":77262,"name":"FROST","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40134,"src":"269:5:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77265,"nodeType":"ImportDirective","src":"314:38:157","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":72456,"symbolAliases":[{"foreign":{"id":77264,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"322:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77267,"nodeType":"ImportDirective","src":"353:38:157","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":72765,"symbolAliases":[{"foreign":{"id":77266,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72764,"src":"361:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77269,"nodeType":"ImportDirective","src":"392:46:157","nodes":[],"absolutePath":"src/IMiddleware.sol","file":"./IMiddleware.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":72282,"symbolAliases":[{"foreign":{"id":77268,"name":"IMiddleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72281,"src":"400:11:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77271,"nodeType":"ImportDirective","src":"439:101:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":41410,"symbolAliases":[{"foreign":{"id":77270,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41409,"src":"447:18:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77273,"nodeType":"ImportDirective","src":"541:140:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardTransientUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":42871,"symbolAliases":[{"foreign":{"id":77272,"name":"ReentrancyGuardTransientUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42870,"src":"554:35:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77275,"nodeType":"ImportDirective","src":"682:74:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":47841,"symbolAliases":[{"foreign":{"id":77274,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"690:11:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77277,"nodeType":"ImportDirective","src":"757:70:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":79289,"sourceUnit":45588,"symbolAliases":[{"foreign":{"id":77276,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45587,"src":"765:6:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79288,"nodeType":"ContractDefinition","src":"829:23108:157","nodes":[{"id":77286,"nodeType":"VariableDeclaration","src":"1021:106:157","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"1046:12:157","scope":79288,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77284,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1021:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":77285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1061:66:157","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":77289,"nodeType":"VariableDeclaration","src":"1240:111:157","nodes":[],"constant":true,"mutability":"constant","name":"TRANSIENT_STORAGE","nameLocation":"1265:17:157","scope":79288,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77287,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1240:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307866303262343635373337666136303435633266663533666232646634336336363931366163323136366661333033323634363638666232663661316438633030","id":77288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1285:66:157","typeDescriptions":{"typeIdentifier":"t_rational_108631543557424213897897473785501454225913773503351157840763824611960129686528_by_1","typeString":"int_const 1086...(70 digits omitted)...6528"},"value":"0xf02b465737fa6045c2ff53fb2df43c66916ac2166fa303264668fb2f6a1d8c00"},"visibility":"private"},{"id":77297,"nodeType":"FunctionDefinition","src":"1411:53:157","nodes":[],"body":{"id":77296,"nodeType":"Block","src":"1425:39:157","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77293,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41631,"src":"1435:20:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":77294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1435:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77295,"nodeType":"ExpressionStatement","src":"1435:22:157"}]},"documentation":{"id":77290,"nodeType":"StructuredDocumentation","src":"1358:48:157","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":77291,"nodeType":"ParameterList","parameters":[],"src":"1422:2:157"},"returnParameters":{"id":77292,"nodeType":"ParameterList","parameters":[],"src":"1425:0:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":77443,"nodeType":"FunctionDefinition","src":"1470:1982:157","nodes":[],"body":{"id":77442,"nodeType":"Block","src":"1885:1567:157","nodes":[],"statements":[{"expression":{"arguments":[{"id":77325,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77299,"src":"1910:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":77324,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"1895:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":77326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1895:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77327,"nodeType":"ExpressionStatement","src":"1895:22:157"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77328,"name":"__ReentrancyGuardTransient_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42819,"src":"1927:31:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":77329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1927:33:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77330,"nodeType":"ExpressionStatement","src":"1927:33:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":77332,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2085:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":77333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2091:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"2085:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":77334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2103:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2085:19:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"63757272656e742074696d657374616d70206d7573742062652067726561746572207468616e2030","id":77336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2106:42:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_010a1bc0b39cf96528374edb07c79052766d9dbc6322e9b022f045d426584476","typeString":"literal_string \"current timestamp must be greater than 0\""},"value":"current timestamp must be greater than 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_010a1bc0b39cf96528374edb07c79052766d9dbc6322e9b022f045d426584476","typeString":"literal_string \"current timestamp must be greater than 0\""}],"id":77331,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2077:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":77337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2077:72:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77338,"nodeType":"ExpressionStatement","src":"2077:72:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77340,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77309,"src":"2167:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":77341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2187:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2167:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"656c656374696f6e206475726174696f6e206d7573742062652067726561746572207468616e2030","id":77343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2190:42:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_22f70577ade1b9c6246323ca38a4066fa51456aa417f5a924af9df8299c24ade","typeString":"literal_string \"election duration must be greater than 0\""},"value":"election duration must be greater than 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_22f70577ade1b9c6246323ca38a4066fa51456aa417f5a924af9df8299c24ade","typeString":"literal_string \"election duration must be greater than 0\""}],"id":77339,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2159:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":77344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2159:74:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77345,"nodeType":"ExpressionStatement","src":"2159:74:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77347,"name":"_eraDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77307,"src":"2251:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":77348,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77309,"src":"2266:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2251:32:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"657261206475726174696f6e206d7573742062652067726561746572207468616e20656c656374696f6e206475726174696f6e","id":77350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2285:53:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_07fe5d445d3047744132d2b933786d7532224c888580fad1eb3bf2fab68d889a","typeString":"literal_string \"era duration must be greater than election duration\""},"value":"era duration must be greater than election duration"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_07fe5d445d3047744132d2b933786d7532224c888580fad1eb3bf2fab68d889a","typeString":"literal_string \"era duration must be greater than election duration\""}],"id":77346,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2243:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":77351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2243:96:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77352,"nodeType":"ExpressionStatement","src":"2243:96:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77354,"name":"_validationDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77311,"src":"2508:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77355,"name":"_eraDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77307,"src":"2528:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":77356,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77309,"src":"2543:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2528:32:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":77358,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2527:34:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":77359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2564:2:157","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"2527:39:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2508:58:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"76616c69646174696f6e2064656c617920697320746f6f20626967","id":77362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2568:29:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_eddca39051ee2213f896dfc64728cc0230d9b810a7506c1cb5def9eec7f1fd26","typeString":"literal_string \"validation delay is too big\""},"value":"validation delay is too big"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_eddca39051ee2213f896dfc64728cc0230d9b810a7506c1cb5def9eec7f1fd26","typeString":"literal_string \"validation delay is too big\""}],"id":77353,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2500:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":77363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2500:98:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77364,"nodeType":"ExpressionStatement","src":"2500:98:157"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":77366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2625:25:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":77365,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79234,"src":"2609:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":77367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2609:42:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77368,"nodeType":"ExpressionStatement","src":"2609:42:157"},{"assignments":[77371],"declarations":[{"constant":false,"id":77371,"mutability":"mutable","name":"router","nameLocation":"2677:6:157","nodeType":"VariableDeclaration","scope":77442,"src":"2661:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77370,"nodeType":"UserDefinedTypeName","pathNode":{"id":77369,"name":"Storage","nameLocations":["2661:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"2661:7:157"},"referencedDeclaration":72524,"src":"2661:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77374,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77372,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"2686:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2686:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2661:34:157"},{"expression":{"id":77381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77375,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77371,"src":"2706:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2713:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"2706:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":77378,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"2728:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2733:10:157","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":80267,"src":"2728:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$79923_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":77380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2728:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"2706:39:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":77382,"nodeType":"ExpressionStatement","src":"2706:39:157"},{"expression":{"id":77392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77383,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77371,"src":"2755:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77385,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2762:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"2755:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":77388,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77301,"src":"2795:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":77389,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77303,"src":"2804:12:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":77390,"name":"_middleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77305,"src":"2818:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":77386,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"2778:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2783:11:157","memberName":"AddressBook","nodeType":"MemberAccess","referencedDeclaration":79816,"src":"2778:16:157","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddressBook_$79816_storage_ptr_$","typeString":"type(struct Gear.AddressBook storage pointer)"}},"id":77391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2778:52:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_memory_ptr","typeString":"struct Gear.AddressBook memory"}},"src":"2755:75:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77393,"nodeType":"ExpressionStatement","src":"2755:75:157"},{"expression":{"id":77401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":77394,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77371,"src":"2840:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2847:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"2840:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77398,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2866:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":79987,"src":"2840:44:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77399,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"2887:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77400,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2892:30:157","memberName":"VALIDATORS_THRESHOLD_NUMERATOR","nodeType":"MemberAccess","referencedDeclaration":79772,"src":"2887:35:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2840:82:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":77402,"nodeType":"ExpressionStatement","src":"2840:82:157"},{"expression":{"id":77410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":77403,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77371,"src":"2932:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2939:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"2932:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77407,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2958:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":79989,"src":"2932:46:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77408,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"2981:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2986:32:157","memberName":"VALIDATORS_THRESHOLD_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":79775,"src":"2981:37:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2932:86:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":77411,"nodeType":"ExpressionStatement","src":"2932:86:157"},{"expression":{"id":77418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77412,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77371,"src":"3028:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77414,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3035:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"3028:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":77415,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"3053:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3058:26:157","memberName":"defaultComputationSettings","nodeType":"MemberAccess","referencedDeclaration":80212,"src":"3053:31:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_ComputationSettings_$79916_memory_ptr_$","typeString":"function () pure returns (struct Gear.ComputationSettings memory)"}},"id":77417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3053:33:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_memory_ptr","typeString":"struct Gear.ComputationSettings memory"}},"src":"3028:58:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":77419,"nodeType":"ExpressionStatement","src":"3028:58:157"},{"expression":{"id":77429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77420,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77371,"src":"3096:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3103:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"3096:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":77425,"name":"_eraDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77307,"src":"3130:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":77426,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77309,"src":"3144:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":77427,"name":"_validationDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77311,"src":"3163:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":77423,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"3115:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3120:9:157","memberName":"Timelines","nodeType":"MemberAccess","referencedDeclaration":79985,"src":"3115:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Timelines_$79985_storage_ptr_$","typeString":"type(struct Gear.Timelines storage pointer)"}},"id":77428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3115:65:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_memory_ptr","typeString":"struct Gear.Timelines memory"}},"src":"3096:84:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},"id":77430,"nodeType":"ExpressionStatement","src":"3096:84:157"},{"expression":{"arguments":[{"expression":{"expression":{"id":77432,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77371,"src":"3262:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77433,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3269:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"3262:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77434,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3288:11:157","memberName":"validators0","nodeType":"MemberAccess","referencedDeclaration":79992,"src":"3262:37:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage","typeString":"struct Gear.Validators storage ref"}},{"id":77435,"name":"_aggregatedPublicKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77314,"src":"3313:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey calldata"}},{"id":77436,"name":"_verifiableSecretSharingCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77316,"src":"3347:34:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":77437,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77319,"src":"3395:11:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"expression":{"id":77438,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3420:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":77439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3426:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"3420:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Validators_$79798_storage","typeString":"struct Gear.Validators storage ref"},{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77431,"name":"_resetValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79160,"src":"3232:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Validators_$79798_storage_ptr_$_t_struct$_AggregatedPublicKey_$79783_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct Gear.Validators storage pointer,struct Gear.AggregatedPublicKey memory,bytes memory,address[] memory,uint256)"}},"id":77440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3232:213:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77441,"nodeType":"ExpressionStatement","src":"3232:213:157"}]},"functionSelector":"53f7fd48","implemented":true,"kind":"function","modifiers":[{"id":77322,"kind":"modifierInvocation","modifierName":{"id":77321,"name":"initializer","nameLocations":["1873:11:157"],"nodeType":"IdentifierPath","referencedDeclaration":41517,"src":"1873:11:157"},"nodeType":"ModifierInvocation","src":"1873:11:157"}],"name":"initialize","nameLocation":"1479:10:157","parameters":{"id":77320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77299,"mutability":"mutable","name":"_owner","nameLocation":"1507:6:157","nodeType":"VariableDeclaration","scope":77443,"src":"1499:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77298,"name":"address","nodeType":"ElementaryTypeName","src":"1499:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":77301,"mutability":"mutable","name":"_mirror","nameLocation":"1531:7:157","nodeType":"VariableDeclaration","scope":77443,"src":"1523:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77300,"name":"address","nodeType":"ElementaryTypeName","src":"1523:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":77303,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1556:12:157","nodeType":"VariableDeclaration","scope":77443,"src":"1548:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77302,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":77305,"mutability":"mutable","name":"_middleware","nameLocation":"1586:11:157","nodeType":"VariableDeclaration","scope":77443,"src":"1578:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77304,"name":"address","nodeType":"ElementaryTypeName","src":"1578:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":77307,"mutability":"mutable","name":"_eraDuration","nameLocation":"1615:12:157","nodeType":"VariableDeclaration","scope":77443,"src":"1607:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77306,"name":"uint256","nodeType":"ElementaryTypeName","src":"1607:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":77309,"mutability":"mutable","name":"_electionDuration","nameLocation":"1645:17:157","nodeType":"VariableDeclaration","scope":77443,"src":"1637:25:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77308,"name":"uint256","nodeType":"ElementaryTypeName","src":"1637:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":77311,"mutability":"mutable","name":"_validationDelay","nameLocation":"1680:16:157","nodeType":"VariableDeclaration","scope":77443,"src":"1672:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77310,"name":"uint256","nodeType":"ElementaryTypeName","src":"1672:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":77314,"mutability":"mutable","name":"_aggregatedPublicKey","nameLocation":"1740:20:157","nodeType":"VariableDeclaration","scope":77443,"src":"1706:54:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey"},"typeName":{"id":77313,"nodeType":"UserDefinedTypeName","pathNode":{"id":77312,"name":"Gear.AggregatedPublicKey","nameLocations":["1706:4:157","1711:19:157"],"nodeType":"IdentifierPath","referencedDeclaration":79783,"src":"1706:24:157"},"referencedDeclaration":79783,"src":"1706:24:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_storage_ptr","typeString":"struct Gear.AggregatedPublicKey"}},"visibility":"internal"},{"constant":false,"id":77316,"mutability":"mutable","name":"_verifiableSecretSharingCommitment","nameLocation":"1785:34:157","nodeType":"VariableDeclaration","scope":77443,"src":"1770:49:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":77315,"name":"bytes","nodeType":"ElementaryTypeName","src":"1770:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":77319,"mutability":"mutable","name":"_validators","nameLocation":"1848:11:157","nodeType":"VariableDeclaration","scope":77443,"src":"1829:30:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":77317,"name":"address","nodeType":"ElementaryTypeName","src":"1829:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":77318,"nodeType":"ArrayTypeName","src":"1829:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1489:376:157"},"returnParameters":{"id":77323,"nodeType":"ParameterList","parameters":[],"src":"1885:0:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":77547,"nodeType":"FunctionDefinition","src":"3510:1710:157","nodes":[],"body":{"id":77546,"nodeType":"Block","src":"3558:1662:157","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77451,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41320,"src":"3583:5:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":77452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3583:7:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":77450,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"3568:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":77453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3568:23:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77454,"nodeType":"ExpressionStatement","src":"3568:23:157"},{"assignments":[77457],"declarations":[{"constant":false,"id":77457,"mutability":"mutable","name":"oldRouter","nameLocation":"3618:9:157","nodeType":"VariableDeclaration","scope":77546,"src":"3602:25:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77456,"nodeType":"UserDefinedTypeName","pathNode":{"id":77455,"name":"Storage","nameLocations":["3602:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"3602:7:157"},"referencedDeclaration":72524,"src":"3602:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77460,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77458,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"3630:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3630:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3602:37:157"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":77462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3666:25:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":77461,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79234,"src":"3650:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":77463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3650:42:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77464,"nodeType":"ExpressionStatement","src":"3650:42:157"},{"assignments":[77467],"declarations":[{"constant":false,"id":77467,"mutability":"mutable","name":"newRouter","nameLocation":"3718:9:157","nodeType":"VariableDeclaration","scope":77546,"src":"3702:25:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77466,"nodeType":"UserDefinedTypeName","pathNode":{"id":77465,"name":"Storage","nameLocations":["3702:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"3702:7:157"},"referencedDeclaration":72524,"src":"3702:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77470,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77468,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"3730:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3730:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3702:37:157"},{"expression":{"id":77477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77471,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77467,"src":"3791:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77473,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3801:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"3791:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":77474,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"3816:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3821:10:157","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":80267,"src":"3816:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$79923_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":77476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3816:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"3791:42:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":77478,"nodeType":"ExpressionStatement","src":"3791:42:157"},{"expression":{"id":77484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77479,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77467,"src":"3959:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77481,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3969:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"3959:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77482,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77457,"src":"3985:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3995:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"3985:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"src":"3959:49:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77485,"nodeType":"ExpressionStatement","src":"3959:49:157"},{"expression":{"id":77494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":77486,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77467,"src":"4083:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77489,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4093:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4083:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4112:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":79987,"src":"4083:47:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":77491,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77457,"src":"4133:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4143:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4133:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77493,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4162:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":79987,"src":"4133:47:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4083:97:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":77495,"nodeType":"ExpressionStatement","src":"4083:97:157"},{"expression":{"id":77504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":77496,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77467,"src":"4190:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77499,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4200:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4190:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4219:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":79989,"src":"4190:49:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":77501,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77457,"src":"4242:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4252:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4242:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4271:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":79989,"src":"4242:49:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4190:101:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":77505,"nodeType":"ExpressionStatement","src":"4190:101:157"},{"expression":{"arguments":[{"expression":{"expression":{"id":77507,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77467,"src":"4601:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4611:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4601:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4630:11:157","memberName":"validators0","nodeType":"MemberAccess","referencedDeclaration":79992,"src":"4601:40:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage","typeString":"struct Gear.Validators storage ref"}},{"expression":{"arguments":[{"id":77512,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77457,"src":"4681:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77510,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"4655:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4660:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"4655:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4655:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4692:19:157","memberName":"aggregatedPublicKey","nodeType":"MemberAccess","referencedDeclaration":79786,"src":"4655:56:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"}},{"arguments":[{"expression":{"arguments":[{"id":77519,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77457,"src":"4764:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77517,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"4738:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4743:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"4738:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4738:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4775:40:157","memberName":"verifiableSecretSharingCommitmentPointer","nodeType":"MemberAccess","referencedDeclaration":79788,"src":"4738:77:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":77515,"name":"SSTORE2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81302,"src":"4725:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SSTORE2_$81302_$","typeString":"type(library SSTORE2)"}},"id":77516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4733:4:157","memberName":"read","nodeType":"MemberAccess","referencedDeclaration":81227,"src":"4725:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bytes_memory_ptr_$","typeString":"function (address) view returns (bytes memory)"}},"id":77522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4725:91:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"arguments":[{"id":77525,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77457,"src":"4856:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77523,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"4830:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4835:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"4830:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4830:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4867:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79795,"src":"4830:41:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},{"expression":{"id":77528,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4885:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":77529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4891:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"4885:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Validators_$79798_storage","typeString":"struct Gear.Validators storage ref"},{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77506,"name":"_resetValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79160,"src":"4571:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Validators_$79798_storage_ptr_$_t_struct$_AggregatedPublicKey_$79783_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct Gear.Validators storage pointer,struct Gear.AggregatedPublicKey memory,bytes memory,address[] memory,uint256)"}},"id":77530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4571:339:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77531,"nodeType":"ExpressionStatement","src":"4571:339:157"},{"expression":{"id":77537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77532,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77467,"src":"4979:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4989:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"4979:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77535,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77457,"src":"5007:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5017:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"5007:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"src":"4979:53:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":77538,"nodeType":"ExpressionStatement","src":"4979:53:157"},{"expression":{"id":77544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77539,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77467,"src":"5090:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5100:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"5090:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77542,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77457,"src":"5112:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5122:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"5112:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},"src":"5090:41:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},"id":77545,"nodeType":"ExpressionStatement","src":"5090:41:157"}]},"documentation":{"id":77444,"nodeType":"StructuredDocumentation","src":"3458:47:157","text":"@custom:oz-upgrades-validate-as-initializer"},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"arguments":[{"hexValue":"32","id":77447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3555:1:157","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":77448,"kind":"modifierInvocation","modifierName":{"id":77446,"name":"reinitializer","nameLocations":["3541:13:157"],"nodeType":"IdentifierPath","referencedDeclaration":41564,"src":"3541:13:157"},"nodeType":"ModifierInvocation","src":"3541:16:157"}],"name":"reinitialize","nameLocation":"3519:12:157","parameters":{"id":77445,"nodeType":"ParameterList","parameters":[],"src":"3531:2:157"},"returnParameters":{"id":77449,"nodeType":"ParameterList","parameters":[],"src":"3558:0:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":77592,"nodeType":"FunctionDefinition","src":"5306:700:157","nodes":[],"body":{"id":77591,"nodeType":"Block","src":"5370:636:157","nodes":[],"statements":[{"assignments":[77556],"declarations":[{"constant":false,"id":77556,"mutability":"mutable","name":"router","nameLocation":"5396:6:157","nodeType":"VariableDeclaration","scope":77591,"src":"5380:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77555,"nodeType":"UserDefinedTypeName","pathNode":{"id":77554,"name":"Storage","nameLocations":["5380:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"5380:7:157"},"referencedDeclaration":72524,"src":"5380:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77559,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77557,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"5405:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5405:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5380:34:157"},{"assignments":[77564],"declarations":[{"constant":false,"id":77564,"mutability":"mutable","name":"validationSettings","nameLocation":"5459:18:157","nodeType":"VariableDeclaration","scope":77591,"src":"5424:53:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettingsView_$80007_memory_ptr","typeString":"struct Gear.ValidationSettingsView"},"typeName":{"id":77563,"nodeType":"UserDefinedTypeName","pathNode":{"id":77562,"name":"Gear.ValidationSettingsView","nameLocations":["5424:4:157","5429:22:157"],"nodeType":"IdentifierPath","referencedDeclaration":80007,"src":"5424:27:157"},"referencedDeclaration":80007,"src":"5424:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettingsView_$80007_storage_ptr","typeString":"struct Gear.ValidationSettingsView"}},"visibility":"internal"}],"id":77570,"initialValue":{"arguments":[{"expression":{"id":77567,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77556,"src":"5492:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5499:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"5492:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}],"expression":{"id":77565,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"5480:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5485:6:157","memberName":"toView","nodeType":"MemberAccess","referencedDeclaration":80885,"src":"5480:11:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ValidationSettings_$79996_storage_ptr_$returns$_t_struct$_ValidationSettingsView_$80007_memory_ptr_$","typeString":"function (struct Gear.ValidationSettings storage pointer) view returns (struct Gear.ValidationSettingsView memory)"}},"id":77569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5480:38:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettingsView_$80007_memory_ptr","typeString":"struct Gear.ValidationSettingsView memory"}},"nodeType":"VariableDeclarationStatement","src":"5424:94:157"},{"expression":{"arguments":[{"expression":{"id":77572,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77556,"src":"5575:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77573,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5582:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"5575:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},{"expression":{"id":77574,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77556,"src":"5630:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77575,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5637:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"5630:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79911_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},{"expression":{"id":77576,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77556,"src":"5686:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77577,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5693:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"5686:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},{"id":77578,"name":"validationSettings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77564,"src":"5740:18:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettingsView_$80007_memory_ptr","typeString":"struct Gear.ValidationSettingsView memory"}},{"expression":{"id":77579,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77556,"src":"5789:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77580,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5796:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"5789:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_storage","typeString":"struct Gear.ComputationSettings storage ref"}},{"expression":{"id":77581,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77556,"src":"5836:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5843:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"5836:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},{"expression":{"expression":{"id":77583,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77556,"src":"5881:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5888:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"5881:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5901:13:157","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":79948,"src":"5881:33:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":77586,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77556,"src":"5949:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5956:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"5949:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5969:19:157","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":79950,"src":"5949:39:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"},{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79911_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"},{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"},{"typeIdentifier":"t_struct$_ValidationSettingsView_$80007_memory_ptr","typeString":"struct Gear.ValidationSettingsView memory"},{"typeIdentifier":"t_struct$_ComputationSettings_$79916_storage","typeString":"struct Gear.ComputationSettings storage ref"},{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77571,"name":"StorageView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72491,"src":"5535:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_StorageView_$72491_storage_ptr_$","typeString":"type(struct IRouter.StorageView storage pointer)"}},"id":77589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5561:12:157","5608:20:157","5671:13:157","5720:18:157","5772:15:157","5825:9:157","5866:13:157","5928:19:157"],"names":["genesisBlock","latestCommittedBatch","implAddresses","validationSettings","computeSettings","timelines","programsCount","validatedCodesCount"],"nodeType":"FunctionCall","src":"5535:464:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StorageView_$72491_memory_ptr","typeString":"struct IRouter.StorageView memory"}},"functionReturnParameters":77553,"id":77590,"nodeType":"Return","src":"5528:471:157"}]},"documentation":{"id":77548,"nodeType":"StructuredDocumentation","src":"5243:58:157","text":"@dev Returns the storage view of the contract storage."},"functionSelector":"c2eb812f","implemented":true,"kind":"function","modifiers":[],"name":"storageView","nameLocation":"5315:11:157","parameters":{"id":77549,"nodeType":"ParameterList","parameters":[],"src":"5326:2:157"},"returnParameters":{"id":77553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77592,"src":"5350:18:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_StorageView_$72491_memory_ptr","typeString":"struct IRouter.StorageView"},"typeName":{"id":77551,"nodeType":"UserDefinedTypeName","pathNode":{"id":77550,"name":"StorageView","nameLocations":["5350:11:157"],"nodeType":"IdentifierPath","referencedDeclaration":72491,"src":"5350:11:157"},"referencedDeclaration":72491,"src":"5350:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_StorageView_$72491_storage_ptr","typeString":"struct IRouter.StorageView"}},"visibility":"internal"}],"src":"5349:20:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77603,"nodeType":"FunctionDefinition","src":"6012:109:157","nodes":[],"body":{"id":77602,"nodeType":"Block","src":"6070:51:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77597,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"6087:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6087:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6097:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"6087:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":77600,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6110:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79918,"src":"6087:27:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":77596,"id":77601,"nodeType":"Return","src":"6080:34:157"}]},"baseFunctions":[72575],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"6021:16:157","parameters":{"id":77593,"nodeType":"ParameterList","parameters":[],"src":"6037:2:157"},"returnParameters":{"id":77596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77595,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77603,"src":"6061:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77594,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6061:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6060:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77614,"nodeType":"FunctionDefinition","src":"6127:113:157","nodes":[],"body":{"id":77613,"nodeType":"Block","src":"6184:56:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77608,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"6201:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6201:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77610,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6211:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"6201:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":77611,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6224:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79922,"src":"6201:32:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":77607,"id":77612,"nodeType":"Return","src":"6194:39:157"}]},"baseFunctions":[72580],"functionSelector":"cacf66ab","implemented":true,"kind":"function","modifiers":[],"name":"genesisTimestamp","nameLocation":"6136:16:157","parameters":{"id":77604,"nodeType":"ParameterList","parameters":[],"src":"6152:2:157"},"returnParameters":{"id":77607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77606,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77614,"src":"6176:6:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":77605,"name":"uint48","nodeType":"ElementaryTypeName","src":"6176:6:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6175:8:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77625,"nodeType":"FunctionDefinition","src":"6246:125:157","nodes":[],"body":{"id":77624,"nodeType":"Block","src":"6312:59:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77619,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"6329:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6339:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"6329:30:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79911_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":77622,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6360:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79908,"src":"6329:35:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":77618,"id":77623,"nodeType":"Return","src":"6322:42:157"}]},"baseFunctions":[72585],"functionSelector":"71a8cf2d","implemented":true,"kind":"function","modifiers":[],"name":"latestCommittedBatchHash","nameLocation":"6255:24:157","parameters":{"id":77615,"nodeType":"ParameterList","parameters":[],"src":"6279:2:157"},"returnParameters":{"id":77618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77617,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77625,"src":"6303:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77616,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6303:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6302:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77636,"nodeType":"FunctionDefinition","src":"6377:134:157","nodes":[],"body":{"id":77635,"nodeType":"Block","src":"6447:64:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77630,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"6464:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6464:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77632,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6474:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"6464:30:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79911_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":77633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6495:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79910,"src":"6464:40:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":77629,"id":77634,"nodeType":"Return","src":"6457:47:157"}]},"baseFunctions":[72590],"functionSelector":"d456fd51","implemented":true,"kind":"function","modifiers":[],"name":"latestCommittedBatchTimestamp","nameLocation":"6386:29:157","parameters":{"id":77626,"nodeType":"ParameterList","parameters":[],"src":"6415:2:157"},"returnParameters":{"id":77629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77628,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77636,"src":"6439:6:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":77627,"name":"uint48","nodeType":"ElementaryTypeName","src":"6439:6:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6438:8:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77647,"nodeType":"FunctionDefinition","src":"6517:106:157","nodes":[],"body":{"id":77646,"nodeType":"Block","src":"6569:54:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77641,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"6586:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6586:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77643,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6596:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"6586:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6610:6:157","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":79811,"src":"6586:30:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":77640,"id":77645,"nodeType":"Return","src":"6579:37:157"}]},"baseFunctions":[72595],"functionSelector":"e6fabc09","implemented":true,"kind":"function","modifiers":[],"name":"mirrorImpl","nameLocation":"6526:10:157","parameters":{"id":77637,"nodeType":"ParameterList","parameters":[],"src":"6536:2:157"},"returnParameters":{"id":77640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77639,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77647,"src":"6560:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77638,"name":"address","nodeType":"ElementaryTypeName","src":"6560:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6559:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77658,"nodeType":"FunctionDefinition","src":"6629:112:157","nodes":[],"body":{"id":77657,"nodeType":"Block","src":"6682:59:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77652,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"6699:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6699:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6709:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"6699:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6723:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":79813,"src":"6699:35:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":77651,"id":77656,"nodeType":"Return","src":"6692:42:157"}]},"baseFunctions":[72600],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"6638:11:157","parameters":{"id":77648,"nodeType":"ParameterList","parameters":[],"src":"6649:2:157"},"returnParameters":{"id":77651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77658,"src":"6673:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77649,"name":"address","nodeType":"ElementaryTypeName","src":"6673:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6672:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77669,"nodeType":"FunctionDefinition","src":"6747:110:157","nodes":[],"body":{"id":77668,"nodeType":"Block","src":"6799:58:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77663,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"6816:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6816:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6826:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"6816:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6840:10:157","memberName":"middleware","nodeType":"MemberAccess","referencedDeclaration":79815,"src":"6816:34:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":77662,"id":77667,"nodeType":"Return","src":"6809:41:157"}]},"baseFunctions":[72605],"functionSelector":"f4f20ac0","implemented":true,"kind":"function","modifiers":[],"name":"middleware","nameLocation":"6756:10:157","parameters":{"id":77659,"nodeType":"ParameterList","parameters":[],"src":"6766:2:157"},"returnParameters":{"id":77662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77661,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77669,"src":"6790:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77660,"name":"address","nodeType":"ElementaryTypeName","src":"6790:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6789:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77683,"nodeType":"FunctionDefinition","src":"6863:175:157","nodes":[],"body":{"id":77682,"nodeType":"Block","src":"6958:80:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77677,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"7001:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7001:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77675,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"6975:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6980:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"6975:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6975:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7012:19:157","memberName":"aggregatedPublicKey","nodeType":"MemberAccess","referencedDeclaration":79786,"src":"6975:56:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"}},"functionReturnParameters":77674,"id":77681,"nodeType":"Return","src":"6968:63:157"}]},"baseFunctions":[72611],"functionSelector":"3bd109fa","implemented":true,"kind":"function","modifiers":[],"name":"validatorsAggregatedPublicKey","nameLocation":"6872:29:157","parameters":{"id":77670,"nodeType":"ParameterList","parameters":[],"src":"6901:2:157"},"returnParameters":{"id":77674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77673,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77683,"src":"6925:31:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_memory_ptr","typeString":"struct Gear.AggregatedPublicKey"},"typeName":{"id":77672,"nodeType":"UserDefinedTypeName","pathNode":{"id":77671,"name":"Gear.AggregatedPublicKey","nameLocations":["6925:4:157","6930:19:157"],"nodeType":"IdentifierPath","referencedDeclaration":79783,"src":"6925:24:157"},"referencedDeclaration":79783,"src":"6925:24:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_storage_ptr","typeString":"struct Gear.AggregatedPublicKey"}},"visibility":"internal"}],"src":"6924:33:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77699,"nodeType":"FunctionDefinition","src":"7044:207:157","nodes":[],"body":{"id":77698,"nodeType":"Block","src":"7136:115:157","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77692,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"7192:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7192:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77690,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"7166:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7171:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"7166:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7166:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7203:40:157","memberName":"verifiableSecretSharingCommitmentPointer","nodeType":"MemberAccess","referencedDeclaration":79788,"src":"7166:77:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":77688,"name":"SSTORE2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81302,"src":"7153:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SSTORE2_$81302_$","typeString":"type(library SSTORE2)"}},"id":77689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7161:4:157","memberName":"read","nodeType":"MemberAccess","referencedDeclaration":81227,"src":"7153:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bytes_memory_ptr_$","typeString":"function (address) view returns (bytes memory)"}},"id":77696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7153:91:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":77687,"id":77697,"nodeType":"Return","src":"7146:98:157"}]},"baseFunctions":[72616],"functionSelector":"a5d53a44","implemented":true,"kind":"function","modifiers":[],"name":"validatorsVerifiableSecretSharingCommitment","nameLocation":"7053:43:157","parameters":{"id":77684,"nodeType":"ParameterList","parameters":[],"src":"7096:2:157"},"returnParameters":{"id":77687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77699,"src":"7122:12:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":77685,"name":"bytes","nodeType":"ElementaryTypeName","src":"7122:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7121:14:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":77745,"nodeType":"FunctionDefinition","src":"7257:375:157","nodes":[],"body":{"id":77744,"nodeType":"Block","src":"7339:293:157","nodes":[],"statements":[{"assignments":[77711],"declarations":[{"constant":false,"id":77711,"mutability":"mutable","name":"_currentValidators","nameLocation":"7373:18:157","nodeType":"VariableDeclaration","scope":77744,"src":"7349:42:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators"},"typeName":{"id":77710,"nodeType":"UserDefinedTypeName","pathNode":{"id":77709,"name":"Gear.Validators","nameLocations":["7349:4:157","7354:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":79798,"src":"7349:15:157"},"referencedDeclaration":79798,"src":"7349:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators"}},"visibility":"internal"}],"id":77717,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77714,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"7420:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7420:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77712,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"7394:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7399:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"7394:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7394:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7349:81:157"},{"body":{"id":77740,"nodeType":"Block","src":"7490:114:157","statements":[{"condition":{"id":77735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7508:39:157","subExpression":{"baseExpression":{"expression":{"id":77729,"name":"_currentValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77711,"src":"7509:18:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7528:3:157","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":79792,"src":"7509:22:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":77734,"indexExpression":{"baseExpression":{"id":77731,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77702,"src":"7532:11:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":77733,"indexExpression":{"id":77732,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77719,"src":"7544:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7532:14:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7509:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":77739,"nodeType":"IfStatement","src":"7504:90:157","trueBody":{"id":77738,"nodeType":"Block","src":"7549:45:157","statements":[{"expression":{"hexValue":"66616c7365","id":77736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7574:5:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":77706,"id":77737,"nodeType":"Return","src":"7567:12:157"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77722,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77719,"src":"7461:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":77723,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77702,"src":"7465:11:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":77724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7477:6:157","memberName":"length","nodeType":"MemberAccess","src":"7465:18:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7461:22:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":77741,"initializationExpression":{"assignments":[77719],"declarations":[{"constant":false,"id":77719,"mutability":"mutable","name":"i","nameLocation":"7454:1:157","nodeType":"VariableDeclaration","scope":77741,"src":"7446:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77718,"name":"uint256","nodeType":"ElementaryTypeName","src":"7446:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":77721,"initialValue":{"hexValue":"30","id":77720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7458:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7446:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":77727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"7485:3:157","subExpression":{"id":77726,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77719,"src":"7485:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":77728,"nodeType":"ExpressionStatement","src":"7485:3:157"},"nodeType":"ForStatement","src":"7441:163:157"},{"expression":{"hexValue":"74727565","id":77742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7621:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":77706,"id":77743,"nodeType":"Return","src":"7614:11:157"}]},"baseFunctions":[72624],"functionSelector":"8f381dbe","implemented":true,"kind":"function","modifiers":[],"name":"areValidators","nameLocation":"7266:13:157","parameters":{"id":77703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77702,"mutability":"mutable","name":"_validators","nameLocation":"7299:11:157","nodeType":"VariableDeclaration","scope":77745,"src":"7280:30:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":77700,"name":"address","nodeType":"ElementaryTypeName","src":"7280:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":77701,"nodeType":"ArrayTypeName","src":"7280:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7279:32:157"},"returnParameters":{"id":77706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77705,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77745,"src":"7333:4:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":77704,"name":"bool","nodeType":"ElementaryTypeName","src":"7333:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7332:6:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77762,"nodeType":"FunctionDefinition","src":"7638:144:157","nodes":[],"body":{"id":77761,"nodeType":"Block","src":"7706:76:157","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77754,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"7749:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7749:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77752,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"7723:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7728:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"7723:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7723:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7760:3:157","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":79792,"src":"7723:40:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":77759,"indexExpression":{"id":77758,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77747,"src":"7764:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7723:52:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":77751,"id":77760,"nodeType":"Return","src":"7716:59:157"}]},"baseFunctions":[72631],"functionSelector":"facd743b","implemented":true,"kind":"function","modifiers":[],"name":"isValidator","nameLocation":"7647:11:157","parameters":{"id":77748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77747,"mutability":"mutable","name":"_validator","nameLocation":"7667:10:157","nodeType":"VariableDeclaration","scope":77762,"src":"7659:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77746,"name":"address","nodeType":"ElementaryTypeName","src":"7659:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7658:20:157"},"returnParameters":{"id":77751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77750,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77762,"src":"7700:4:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":77749,"name":"bool","nodeType":"ElementaryTypeName","src":"7700:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7699:6:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77786,"nodeType":"FunctionDefinition","src":"7788:245:157","nodes":[],"body":{"id":77785,"nodeType":"Block","src":"7863:170:157","nodes":[],"statements":[{"assignments":[77773],"declarations":[{"constant":false,"id":77773,"mutability":"mutable","name":"router","nameLocation":"7897:6:157","nodeType":"VariableDeclaration","scope":77785,"src":"7873:30:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77772,"nodeType":"UserDefinedTypeName","pathNode":{"id":77771,"name":"IRouter.Storage","nameLocations":["7873:7:157","7881:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"7873:15:157"},"referencedDeclaration":72524,"src":"7873:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77776,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77774,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"7906:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7906:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7873:42:157"},{"expression":{"components":[{"expression":{"expression":{"id":77777,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77773,"src":"7933:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7940:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"7933:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77779,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7959:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":79987,"src":"7933:44:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":77780,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77773,"src":"7979:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77781,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7986:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"7979:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77782,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8005:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":79989,"src":"7979:46:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":77783,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7932:94:157","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint128_$_t_uint128_$","typeString":"tuple(uint128,uint128)"}},"functionReturnParameters":77768,"id":77784,"nodeType":"Return","src":"7925:101:157"}]},"baseFunctions":[72638],"functionSelector":"e3a6684f","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdFraction","nameLocation":"7797:24:157","parameters":{"id":77763,"nodeType":"ParameterList","parameters":[],"src":"7821:2:157"},"returnParameters":{"id":77768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77786,"src":"7845:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":77764,"name":"uint128","nodeType":"ElementaryTypeName","src":"7845:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":77767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77786,"src":"7854:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":77766,"name":"uint128","nodeType":"ElementaryTypeName","src":"7854:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7844:18:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77800,"nodeType":"FunctionDefinition","src":"8039:126:157","nodes":[],"body":{"id":77799,"nodeType":"Block","src":"8100:65:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77794,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"8143:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8143:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77792,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"8117:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8122:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"8117:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8117:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77797,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8154:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79795,"src":"8117:41:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":77791,"id":77798,"nodeType":"Return","src":"8110:48:157"}]},"baseFunctions":[72644],"functionSelector":"ca1e7819","implemented":true,"kind":"function","modifiers":[],"name":"validators","nameLocation":"8048:10:157","parameters":{"id":77787,"nodeType":"ParameterList","parameters":[],"src":"8058:2:157"},"returnParameters":{"id":77791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77800,"src":"8082:16:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":77788,"name":"address","nodeType":"ElementaryTypeName","src":"8082:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":77789,"nodeType":"ArrayTypeName","src":"8082:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"8081:18:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77814,"nodeType":"FunctionDefinition","src":"8171:129:157","nodes":[],"body":{"id":77813,"nodeType":"Block","src":"8228:72:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77807,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"8271:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8271:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77805,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"8245:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8250:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"8245:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8245:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77810,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8282:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79795,"src":"8245:41:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":77811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8287:6:157","memberName":"length","nodeType":"MemberAccess","src":"8245:48:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":77804,"id":77812,"nodeType":"Return","src":"8238:55:157"}]},"baseFunctions":[72649],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"8180:15:157","parameters":{"id":77801,"nodeType":"ParameterList","parameters":[],"src":"8195:2:157"},"returnParameters":{"id":77804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77803,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77814,"src":"8219:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77802,"name":"uint256","nodeType":"ElementaryTypeName","src":"8219:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8218:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77844,"nodeType":"FunctionDefinition","src":"8306:348:157","nodes":[],"body":{"id":77843,"nodeType":"Block","src":"8367:287:157","nodes":[],"statements":[{"assignments":[77823],"declarations":[{"constant":false,"id":77823,"mutability":"mutable","name":"router","nameLocation":"8401:6:157","nodeType":"VariableDeclaration","scope":77843,"src":"8377:30:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77822,"nodeType":"UserDefinedTypeName","pathNode":{"id":77821,"name":"IRouter.Storage","nameLocations":["8377:7:157","8385:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"8377:15:157"},"referencedDeclaration":72524,"src":"8377:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77826,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77824,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"8410:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8410:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8377:42:157"},{"expression":{"arguments":[{"expression":{"expression":{"arguments":[{"id":77831,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77823,"src":"8500:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77829,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"8474:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8479:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80593,"src":"8474:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8474:33:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8508:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79795,"src":"8474:38:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":77834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8513:6:157","memberName":"length","nodeType":"MemberAccess","src":"8474:45:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":77835,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77823,"src":"8533:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8540:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"8533:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8559:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":79987,"src":"8533:44:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":77838,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77823,"src":"8591:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77839,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8598:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"8591:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$79996_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77840,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8617:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":79989,"src":"8591:46:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":77827,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"8436:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":77828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8441:19:157","memberName":"validatorsThreshold","nodeType":"MemberAccess","referencedDeclaration":80758,"src":"8436:24:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint128_$_t_uint128_$returns$_t_uint256_$","typeString":"function (uint256,uint128,uint128) pure returns (uint256)"}},"id":77841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8436:211:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":77818,"id":77842,"nodeType":"Return","src":"8429:218:157"}]},"baseFunctions":[72654],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"8315:19:157","parameters":{"id":77815,"nodeType":"ParameterList","parameters":[],"src":"8334:2:157"},"returnParameters":{"id":77818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77844,"src":"8358:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77816,"name":"uint256","nodeType":"ElementaryTypeName","src":"8358:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8357:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77855,"nodeType":"FunctionDefinition","src":"8660:130:157","nodes":[],"body":{"id":77854,"nodeType":"Block","src":"8741:49:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77850,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"8758:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8758:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77852,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8768:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"8758:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"functionReturnParameters":77849,"id":77853,"nodeType":"Return","src":"8751:32:157"}]},"baseFunctions":[72660],"functionSelector":"84d22a4f","implemented":true,"kind":"function","modifiers":[],"name":"computeSettings","nameLocation":"8669:15:157","parameters":{"id":77845,"nodeType":"ParameterList","parameters":[],"src":"8684:2:157"},"returnParameters":{"id":77849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77855,"src":"8708:31:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_memory_ptr","typeString":"struct Gear.ComputationSettings"},"typeName":{"id":77847,"nodeType":"UserDefinedTypeName","pathNode":{"id":77846,"name":"Gear.ComputationSettings","nameLocations":["8708:4:157","8713:19:157"],"nodeType":"IdentifierPath","referencedDeclaration":79916,"src":"8708:24:157"},"referencedDeclaration":79916,"src":"8708:24:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79916_storage_ptr","typeString":"struct Gear.ComputationSettings"}},"visibility":"internal"}],"src":"8707:33:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77871,"nodeType":"FunctionDefinition","src":"8796:134:157","nodes":[],"body":{"id":77870,"nodeType":"Block","src":"8869:61:157","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77863,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"8886:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8886:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8896:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"8886:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8909:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79942,"src":"8886:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79906_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":77868,"indexExpression":{"id":77867,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77857,"src":"8915:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8886:37:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"functionReturnParameters":77862,"id":77869,"nodeType":"Return","src":"8879:44:157"}]},"baseFunctions":[72668],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"8805:9:157","parameters":{"id":77858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77857,"mutability":"mutable","name":"_codeId","nameLocation":"8823:7:157","nodeType":"VariableDeclaration","scope":77871,"src":"8815:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77856,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8815:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8814:17:157"},"returnParameters":{"id":77862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77861,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77871,"src":"8853:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"},"typeName":{"id":77860,"nodeType":"UserDefinedTypeName","pathNode":{"id":77859,"name":"Gear.CodeState","nameLocations":["8853:4:157","8858:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":79906,"src":"8853:14:157"},"referencedDeclaration":79906,"src":"8853:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"visibility":"internal"}],"src":"8852:16:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77929,"nodeType":"FunctionDefinition","src":"8936:378:157","nodes":[],"body":{"id":77928,"nodeType":"Block","src":"9033:281:157","nodes":[],"statements":[{"assignments":[77883],"declarations":[{"constant":false,"id":77883,"mutability":"mutable","name":"router","nameLocation":"9059:6:157","nodeType":"VariableDeclaration","scope":77928,"src":"9043:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77882,"nodeType":"UserDefinedTypeName","pathNode":{"id":77881,"name":"Storage","nameLocations":["9043:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"9043:7:157"},"referencedDeclaration":72524,"src":"9043:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77886,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77884,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"9068:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9068:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9043:34:157"},{"assignments":[77892],"declarations":[{"constant":false,"id":77892,"mutability":"mutable","name":"res","nameLocation":"9112:3:157","nodeType":"VariableDeclaration","scope":77928,"src":"9088:27:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79906_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":77890,"nodeType":"UserDefinedTypeName","pathNode":{"id":77889,"name":"Gear.CodeState","nameLocations":["9088:4:157","9093:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":79906,"src":"9088:14:157"},"referencedDeclaration":79906,"src":"9088:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"id":77891,"nodeType":"ArrayTypeName","src":"9088:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79906_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"id":77900,"initialValue":{"arguments":[{"expression":{"id":77897,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77874,"src":"9139:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":77898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9149:6:157","memberName":"length","nodeType":"MemberAccess","src":"9139:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9118:20:157","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_enum$_CodeState_$79906_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (enum Gear.CodeState[] memory)"},"typeName":{"baseType":{"id":77894,"nodeType":"UserDefinedTypeName","pathNode":{"id":77893,"name":"Gear.CodeState","nameLocations":["9122:4:157","9127:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":79906,"src":"9122:14:157"},"referencedDeclaration":79906,"src":"9122:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"id":77895,"nodeType":"ArrayTypeName","src":"9122:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79906_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}}},"id":77899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9118:38:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79906_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9088:68:157"},{"body":{"id":77924,"nodeType":"Block","src":"9214:73:157","statements":[{"expression":{"id":77922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":77912,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77892,"src":"9228:3:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79906_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"id":77914,"indexExpression":{"id":77913,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77902,"src":"9232:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9228:6:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":77915,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77883,"src":"9237:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77916,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9244:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"9237:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9257:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79942,"src":"9237:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79906_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":77921,"indexExpression":{"baseExpression":{"id":77918,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77874,"src":"9263:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":77920,"indexExpression":{"id":77919,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77902,"src":"9273:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9263:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9237:39:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"src":"9228:48:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"id":77923,"nodeType":"ExpressionStatement","src":"9228:48:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77905,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77902,"src":"9187:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":77906,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77874,"src":"9191:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":77907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9201:6:157","memberName":"length","nodeType":"MemberAccess","src":"9191:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9187:20:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":77925,"initializationExpression":{"assignments":[77902],"declarations":[{"constant":false,"id":77902,"mutability":"mutable","name":"i","nameLocation":"9180:1:157","nodeType":"VariableDeclaration","scope":77925,"src":"9172:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77901,"name":"uint256","nodeType":"ElementaryTypeName","src":"9172:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":77904,"initialValue":{"hexValue":"30","id":77903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9184:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9172:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":77910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9209:3:157","subExpression":{"id":77909,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77902,"src":"9209:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":77911,"nodeType":"ExpressionStatement","src":"9209:3:157"},"nodeType":"ForStatement","src":"9167:120:157"},{"expression":{"id":77926,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77892,"src":"9304:3:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79906_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"functionReturnParameters":77880,"id":77927,"nodeType":"Return","src":"9297:10:157"}]},"baseFunctions":[72678],"functionSelector":"82bdeaad","implemented":true,"kind":"function","modifiers":[],"name":"codesStates","nameLocation":"8945:11:157","parameters":{"id":77875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77874,"mutability":"mutable","name":"_codesIds","nameLocation":"8976:9:157","nodeType":"VariableDeclaration","scope":77929,"src":"8957:28:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":77872,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8957:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":77873,"nodeType":"ArrayTypeName","src":"8957:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"8956:30:157"},"returnParameters":{"id":77880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77879,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77929,"src":"9008:23:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79906_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":77877,"nodeType":"UserDefinedTypeName","pathNode":{"id":77876,"name":"Gear.CodeState","nameLocations":["9008:4:157","9013:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":79906,"src":"9008:14:157"},"referencedDeclaration":79906,"src":"9008:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"id":77878,"nodeType":"ArrayTypeName","src":"9008:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79906_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"src":"9007:25:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77944,"nodeType":"FunctionDefinition","src":"9320:140:157","nodes":[],"body":{"id":77943,"nodeType":"Block","src":"9393:67:157","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77936,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"9410:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9410:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77938,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9420:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"9410:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9433:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79946,"src":"9410:31:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":77941,"indexExpression":{"id":77940,"name":"_programId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77931,"src":"9442:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9410:43:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":77935,"id":77942,"nodeType":"Return","src":"9403:50:157"}]},"baseFunctions":[72685],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"9329:13:157","parameters":{"id":77932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77931,"mutability":"mutable","name":"_programId","nameLocation":"9351:10:157","nodeType":"VariableDeclaration","scope":77944,"src":"9343:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77930,"name":"address","nodeType":"ElementaryTypeName","src":"9343:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9342:20:157"},"returnParameters":{"id":77935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77934,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77944,"src":"9384:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77933,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9384:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9383:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77999,"nodeType":"FunctionDefinition","src":"9466:376:157","nodes":[],"body":{"id":77998,"nodeType":"Block","src":"9563:279:157","nodes":[],"statements":[{"assignments":[77955],"declarations":[{"constant":false,"id":77955,"mutability":"mutable","name":"router","nameLocation":"9589:6:157","nodeType":"VariableDeclaration","scope":77998,"src":"9573:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77954,"nodeType":"UserDefinedTypeName","pathNode":{"id":77953,"name":"Storage","nameLocations":["9573:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"9573:7:157"},"referencedDeclaration":72524,"src":"9573:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77958,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77956,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"9598:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9598:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9573:34:157"},{"assignments":[77963],"declarations":[{"constant":false,"id":77963,"mutability":"mutable","name":"res","nameLocation":"9635:3:157","nodeType":"VariableDeclaration","scope":77998,"src":"9618:20:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":77961,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9618:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":77962,"nodeType":"ArrayTypeName","src":"9618:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":77970,"initialValue":{"arguments":[{"expression":{"id":77967,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77947,"src":"9655:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":77968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9668:6:157","memberName":"length","nodeType":"MemberAccess","src":"9655:19:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9641:13:157","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":77964,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9645:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":77965,"nodeType":"ArrayTypeName","src":"9645:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":77969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9641:34:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9618:57:157"},{"body":{"id":77994,"nodeType":"Block","src":"9736:79:157","statements":[{"expression":{"id":77992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":77982,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77963,"src":"9750:3:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":77984,"indexExpression":{"id":77983,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77972,"src":"9754:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9750:6:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":77985,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77955,"src":"9759:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77986,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9766:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"9759:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77987,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9779:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79946,"src":"9759:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":77991,"indexExpression":{"baseExpression":{"id":77988,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77947,"src":"9788:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":77990,"indexExpression":{"id":77989,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77972,"src":"9801:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9788:15:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9759:45:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"9750:54:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":77993,"nodeType":"ExpressionStatement","src":"9750:54:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77975,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77972,"src":"9706:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":77976,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77947,"src":"9710:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":77977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9723:6:157","memberName":"length","nodeType":"MemberAccess","src":"9710:19:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9706:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":77995,"initializationExpression":{"assignments":[77972],"declarations":[{"constant":false,"id":77972,"mutability":"mutable","name":"i","nameLocation":"9699:1:157","nodeType":"VariableDeclaration","scope":77995,"src":"9691:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77971,"name":"uint256","nodeType":"ElementaryTypeName","src":"9691:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":77974,"initialValue":{"hexValue":"30","id":77973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9703:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9691:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":77980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9731:3:157","subExpression":{"id":77979,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77972,"src":"9731:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":77981,"nodeType":"ExpressionStatement","src":"9731:3:157"},"nodeType":"ForStatement","src":"9686:129:157"},{"expression":{"id":77996,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77963,"src":"9832:3:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":77952,"id":77997,"nodeType":"Return","src":"9825:10:157"}]},"baseFunctions":[72694],"functionSelector":"baaf0201","implemented":true,"kind":"function","modifiers":[],"name":"programsCodeIds","nameLocation":"9475:15:157","parameters":{"id":77948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77947,"mutability":"mutable","name":"_programsIds","nameLocation":"9510:12:157","nodeType":"VariableDeclaration","scope":77999,"src":"9491:31:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":77945,"name":"address","nodeType":"ElementaryTypeName","src":"9491:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":77946,"nodeType":"ArrayTypeName","src":"9491:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"9490:33:157"},"returnParameters":{"id":77952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77951,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77999,"src":"9545:16:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":77949,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9545:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":77950,"nodeType":"ArrayTypeName","src":"9545:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"9544:18:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":78010,"nodeType":"FunctionDefinition","src":"9848:115:157","nodes":[],"body":{"id":78009,"nodeType":"Block","src":"9903:60:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":78004,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"9920:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9920:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9930:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"9920:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78007,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9943:13:157","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":79948,"src":"9920:36:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":78003,"id":78008,"nodeType":"Return","src":"9913:43:157"}]},"baseFunctions":[72699],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"9857:13:157","parameters":{"id":78000,"nodeType":"ParameterList","parameters":[],"src":"9870:2:157"},"returnParameters":{"id":78003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78002,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78010,"src":"9894:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78001,"name":"uint256","nodeType":"ElementaryTypeName","src":"9894:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9893:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":78021,"nodeType":"FunctionDefinition","src":"9969:127:157","nodes":[],"body":{"id":78020,"nodeType":"Block","src":"10030:66:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":78015,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"10047:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10047:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78017,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10057:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"10047:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10070:19:157","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":79950,"src":"10047:42:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":78014,"id":78019,"nodeType":"Return","src":"10040:49:157"}]},"baseFunctions":[72704],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"9978:19:157","parameters":{"id":78011,"nodeType":"ParameterList","parameters":[],"src":"9997:2:157"},"returnParameters":{"id":78014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78021,"src":"10021:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78012,"name":"uint256","nodeType":"ElementaryTypeName","src":"10021:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10020:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":78032,"nodeType":"FunctionDefinition","src":"10102:108:157","nodes":[],"body":{"id":78031,"nodeType":"Block","src":"10167:43:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":78027,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"10184:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10184:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10194:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"10184:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},"functionReturnParameters":78026,"id":78030,"nodeType":"Return","src":"10177:26:157"}]},"baseFunctions":[72710],"functionSelector":"9eb939a8","implemented":true,"kind":"function","modifiers":[],"name":"timelines","nameLocation":"10111:9:157","parameters":{"id":78022,"nodeType":"ParameterList","parameters":[],"src":"10120:2:157"},"returnParameters":{"id":78026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78025,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78032,"src":"10144:21:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_memory_ptr","typeString":"struct Gear.Timelines"},"typeName":{"id":78024,"nodeType":"UserDefinedTypeName","pathNode":{"id":78023,"name":"Gear.Timelines","nameLocations":["10144:4:157","10149:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":79985,"src":"10144:14:157"},"referencedDeclaration":79985,"src":"10144:14:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage_ptr","typeString":"struct Gear.Timelines"}},"visibility":"internal"}],"src":"10143:23:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":78047,"nodeType":"FunctionDefinition","src":"10236:116:157","nodes":[],"body":{"id":78046,"nodeType":"Block","src":"10293:59:157","nodes":[],"statements":[{"expression":{"id":78044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":78039,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"10303:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10303:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78041,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10313:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"10303:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":78042,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10327:6:157","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":79811,"src":"10303:30:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":78043,"name":"newMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78034,"src":"10336:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10303:42:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":78045,"nodeType":"ExpressionStatement","src":"10303:42:157"}]},"baseFunctions":[72715],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":78037,"kind":"modifierInvocation","modifierName":{"id":78036,"name":"onlyOwner","nameLocations":["10283:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"10283:9:157"},"nodeType":"ModifierInvocation","src":"10283:9:157"}],"name":"setMirror","nameLocation":"10245:9:157","parameters":{"id":78035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78034,"mutability":"mutable","name":"newMirror","nameLocation":"10263:9:157","nodeType":"VariableDeclaration","scope":78047,"src":"10255:17:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78033,"name":"address","nodeType":"ElementaryTypeName","src":"10255:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10254:19:157"},"returnParameters":{"id":78038,"nodeType":"ParameterList","parameters":[],"src":"10293:0:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78099,"nodeType":"FunctionDefinition","src":"10374:398:157","nodes":[],"body":{"id":78098,"nodeType":"Block","src":"10412:360:157","nodes":[],"statements":[{"assignments":[78052],"declarations":[{"constant":false,"id":78052,"mutability":"mutable","name":"router","nameLocation":"10438:6:157","nodeType":"VariableDeclaration","scope":78098,"src":"10422:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78051,"nodeType":"UserDefinedTypeName","pathNode":{"id":78050,"name":"Storage","nameLocations":["10422:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"10422:7:157"},"referencedDeclaration":72524,"src":"10422:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":78055,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":78053,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"10447:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10447:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10422:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78057,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78052,"src":"10475:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78058,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10482:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"10475:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10495:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79918,"src":"10475:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":78062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10511:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10503:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78060,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10503:7:157","typeDescriptions":{}}},"id":78063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10503:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10475:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"67656e65736973206861736820616c726561647920736574","id":78065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10515:26:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""},"value":"genesis hash already set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""}],"id":78056,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10467:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10467:75:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78067,"nodeType":"ExpressionStatement","src":"10467:75:157"},{"assignments":[78069],"declarations":[{"constant":false,"id":78069,"mutability":"mutable","name":"genesisHash","nameLocation":"10561:11:157","nodeType":"VariableDeclaration","scope":78098,"src":"10553:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78068,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10553:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78075,"initialValue":{"arguments":[{"expression":{"expression":{"id":78071,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78052,"src":"10585:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10592:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"10585:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10605:6:157","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":79920,"src":"10585:26:157","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":78070,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"10575:9:157","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":78074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10575:37:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"10553:59:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78077,"name":"genesisHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78069,"src":"10631:11:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":78080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10654:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10646:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78078,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10646:7:157","typeDescriptions":{}}},"id":78081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10646:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10631:25:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"756e61626c6520746f206c6f6f6b75702067656e657369732068617368","id":78083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10658:31:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""},"value":"unable to lookup genesis hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""}],"id":78076,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10623:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10623:67:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78085,"nodeType":"ExpressionStatement","src":"10623:67:157"},{"expression":{"id":78096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":78086,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78052,"src":"10701:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10708:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"10701:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10721:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79918,"src":"10701:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":78092,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78052,"src":"10738:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78093,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10745:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"10738:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10758:6:157","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":79920,"src":"10738:26:157","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":78091,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"10728:9:157","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":78095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10728:37:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10701:64:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":78097,"nodeType":"ExpressionStatement","src":"10701:64:157"}]},"baseFunctions":[72718],"functionSelector":"8b1edf1e","implemented":true,"kind":"function","modifiers":[],"name":"lookupGenesisHash","nameLocation":"10383:17:157","parameters":{"id":78048,"nodeType":"ParameterList","parameters":[],"src":"10400:2:157"},"returnParameters":{"id":78049,"nodeType":"ParameterList","parameters":[],"src":"10412:0:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78161,"nodeType":"FunctionDefinition","src":"10778:636:157","nodes":[],"body":{"id":78160,"nodeType":"Block","src":"10835:579:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":78106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10862:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78105,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"10853:8:157","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":78107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10853:11:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":78108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10868:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10853:16:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f622063616e277420626520666f756e642c20726f75746572206578706563746564204549502d34383434207472616e73616374696f6e2077697468205741534d20626c6f62","id":78110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10871:74:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_af0f866770c8aa103a2a4d7a589ebda1bb4a2ed5d00b4f369fe2be0485c7bbf0","typeString":"literal_string \"blob can't be found, router expected EIP-4844 transaction with WASM blob\""},"value":"blob can't be found, router expected EIP-4844 transaction with WASM blob"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_af0f866770c8aa103a2a4d7a589ebda1bb4a2ed5d00b4f369fe2be0485c7bbf0","typeString":"literal_string \"blob can't be found, router expected EIP-4844 transaction with WASM blob\""}],"id":78104,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10845:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10845:101:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78112,"nodeType":"ExpressionStatement","src":"10845:101:157"},{"assignments":[78115],"declarations":[{"constant":false,"id":78115,"mutability":"mutable","name":"router","nameLocation":"10973:6:157","nodeType":"VariableDeclaration","scope":78160,"src":"10957:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78114,"nodeType":"UserDefinedTypeName","pathNode":{"id":78113,"name":"Storage","nameLocations":["10957:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"10957:7:157"},"referencedDeclaration":72524,"src":"10957:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":78118,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":78116,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"10982:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10982:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10957:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78120,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78115,"src":"11009:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11016:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"11009:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11029:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79918,"src":"11009:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":78125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11045:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78124,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11037:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78123,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11037:7:157","typeDescriptions":{}}},"id":78126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11037:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11009:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":78128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11049:58:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":78119,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11001:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11001:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78130,"nodeType":"ExpressionStatement","src":"11001:107:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"},"id":78140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":78132,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78115,"src":"11140:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11147:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"11140:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11160:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79942,"src":"11140:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79906_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78136,"indexExpression":{"id":78135,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78101,"src":"11166:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11140:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":78137,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"11178:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11183:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79906,"src":"11178:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79906_$","typeString":"type(enum Gear.CodeState)"}},"id":78139,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11193:7:157","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":79903,"src":"11178:22:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"src":"11140:60:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"676976656e20636f646520696420697320616c7265616479206f6e2076616c69646174696f6e206f722076616c696461746564","id":78141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11214:53:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""},"value":"given code id is already on validation or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""}],"id":78131,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11119:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11119:158:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78143,"nodeType":"ExpressionStatement","src":"11119:158:157"},{"expression":{"id":78154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":78144,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78115,"src":"11288:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78148,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11295:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"11288:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11308:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79942,"src":"11288:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79906_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78150,"indexExpression":{"id":78147,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78101,"src":"11314:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11288:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":78151,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"11325:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11330:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79906,"src":"11325:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79906_$","typeString":"type(enum Gear.CodeState)"}},"id":78153,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11340:19:157","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":79904,"src":"11325:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"src":"11288:71:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"id":78155,"nodeType":"ExpressionStatement","src":"11288:71:157"},{"eventCall":{"arguments":[{"id":78157,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78101,"src":"11399:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":78156,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72546,"src":"11375:23:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":78158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11375:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78159,"nodeType":"EmitStatement","src":"11370:37:157"}]},"baseFunctions":[72724],"functionSelector":"120e3f1e","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"10787:21:157","parameters":{"id":78102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78101,"mutability":"mutable","name":"_codeId","nameLocation":"10817:7:157","nodeType":"VariableDeclaration","scope":78161,"src":"10809:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78100,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10809:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10808:17:157"},"returnParameters":{"id":78103,"nodeType":"ParameterList","parameters":[],"src":"10835:0:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78202,"nodeType":"FunctionDefinition","src":"11420:348:157","nodes":[],"body":{"id":78201,"nodeType":"Block","src":"11532:236:157","nodes":[],"statements":[{"assignments":[78173],"declarations":[{"constant":false,"id":78173,"mutability":"mutable","name":"mirror","nameLocation":"11550:6:157","nodeType":"VariableDeclaration","scope":78201,"src":"11542:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78172,"name":"address","nodeType":"ElementaryTypeName","src":"11542:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":78179,"initialValue":{"arguments":[{"id":78175,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78163,"src":"11574:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78176,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78165,"src":"11583:5:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":78177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11590:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":78174,"name":"_createProgram","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78496,"src":"11559:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_bool_$returns$_t_address_$","typeString":"function (bytes32,bytes32,bool) returns (address)"}},"id":78178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11559:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11542:53:157"},{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":78189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78184,"name":"_overrideInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78167,"src":"11646:20:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":78187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11678:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78186,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11670:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":78185,"name":"address","nodeType":"ElementaryTypeName","src":"11670:7:157","typeDescriptions":{}}},"id":78188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11670:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11646:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":78192,"name":"_overrideInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78167,"src":"11696:20:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":78193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11646:70:157","trueExpression":{"expression":{"id":78190,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11683:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":78191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11687:6:157","memberName":"sender","nodeType":"MemberAccess","src":"11683:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":78194,"name":"mirrorImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77647,"src":"11718:10:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":78195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11718:12:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":78196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11732:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[{"id":78181,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78173,"src":"11614:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78180,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"11606:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$72455_$","typeString":"type(contract IMirror)"}},"id":78182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11606:15:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$72455","typeString":"contract IMirror"}},"id":78183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11635:10:157","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":72446,"src":"11606:39:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool) external"}},"id":78197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11606:131:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78198,"nodeType":"ExpressionStatement","src":"11606:131:157"},{"expression":{"id":78199,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78173,"src":"11755:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":78171,"id":78200,"nodeType":"Return","src":"11748:13:157"}]},"baseFunctions":[72736],"functionSelector":"3683c4d2","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"11429:13:157","parameters":{"id":78168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78163,"mutability":"mutable","name":"_codeId","nameLocation":"11451:7:157","nodeType":"VariableDeclaration","scope":78202,"src":"11443:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78162,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11443:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78165,"mutability":"mutable","name":"_salt","nameLocation":"11468:5:157","nodeType":"VariableDeclaration","scope":78202,"src":"11460:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78164,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11460:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78167,"mutability":"mutable","name":"_overrideInitializer","nameLocation":"11483:20:157","nodeType":"VariableDeclaration","scope":78202,"src":"11475:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78166,"name":"address","nodeType":"ElementaryTypeName","src":"11475:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11442:62:157"},"returnParameters":{"id":78171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78170,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78202,"src":"11523:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78169,"name":"address","nodeType":"ElementaryTypeName","src":"11523:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11522:9:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78244,"nodeType":"FunctionDefinition","src":"11774:428:157","nodes":[],"body":{"id":78243,"nodeType":"Block","src":"11963:239:157","nodes":[],"statements":[{"assignments":[78216],"declarations":[{"constant":false,"id":78216,"mutability":"mutable","name":"mirror","nameLocation":"11981:6:157","nodeType":"VariableDeclaration","scope":78243,"src":"11973:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78215,"name":"address","nodeType":"ElementaryTypeName","src":"11973:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":78222,"initialValue":{"arguments":[{"id":78218,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78204,"src":"12005:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78219,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78206,"src":"12014:5:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"66616c7365","id":78220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12021:5:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":78217,"name":"_createProgram","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78496,"src":"11990:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_bool_$returns$_t_address_$","typeString":"function (bytes32,bytes32,bool) returns (address)"}},"id":78221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11990:37:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11973:54:157"},{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":78232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78227,"name":"_overrideInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78208,"src":"12078:20:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":78230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12110:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12102:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":78228,"name":"address","nodeType":"ElementaryTypeName","src":"12102:7:157","typeDescriptions":{}}},"id":78231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12102:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12078:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":78235,"name":"_overrideInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78208,"src":"12128:20:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":78236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12078:70:157","trueExpression":{"expression":{"id":78233,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12115:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":78234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12119:6:157","memberName":"sender","nodeType":"MemberAccess","src":"12115:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":78237,"name":"_abiInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78210,"src":"12150:13:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":78238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12165:5:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[{"id":78224,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78216,"src":"12046:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78223,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"12038:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$72455_$","typeString":"type(contract IMirror)"}},"id":78225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12038:15:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$72455","typeString":"contract IMirror"}},"id":78226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12067:10:157","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":72446,"src":"12038:39:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool) external"}},"id":78239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12038:133:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78240,"nodeType":"ExpressionStatement","src":"12038:133:157"},{"expression":{"id":78241,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78216,"src":"12189:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":78214,"id":78242,"nodeType":"Return","src":"12182:13:157"}]},"baseFunctions":[72750],"functionSelector":"0c18d277","implemented":true,"kind":"function","modifiers":[],"name":"createProgramWithAbiInterface","nameLocation":"11783:29:157","parameters":{"id":78211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78204,"mutability":"mutable","name":"_codeId","nameLocation":"11830:7:157","nodeType":"VariableDeclaration","scope":78244,"src":"11822:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78203,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11822:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78206,"mutability":"mutable","name":"_salt","nameLocation":"11855:5:157","nodeType":"VariableDeclaration","scope":78244,"src":"11847:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78205,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11847:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78208,"mutability":"mutable","name":"_overrideInitializer","nameLocation":"11878:20:157","nodeType":"VariableDeclaration","scope":78244,"src":"11870:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78207,"name":"address","nodeType":"ElementaryTypeName","src":"11870:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":78210,"mutability":"mutable","name":"_abiInterface","nameLocation":"11916:13:157","nodeType":"VariableDeclaration","scope":78244,"src":"11908:21:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78209,"name":"address","nodeType":"ElementaryTypeName","src":"11908:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11812:123:157"},"returnParameters":{"id":78214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78213,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78244,"src":"11954:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78212,"name":"address","nodeType":"ElementaryTypeName","src":"11954:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11953:9:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78398,"nodeType":"FunctionDefinition","src":"12208:2218:157","nodes":[],"body":{"id":78397,"nodeType":"Block","src":"12384:2042:157","nodes":[],"statements":[{"assignments":[78260],"declarations":[{"constant":false,"id":78260,"mutability":"mutable","name":"router","nameLocation":"12410:6:157","nodeType":"VariableDeclaration","scope":78397,"src":"12394:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78259,"nodeType":"UserDefinedTypeName","pathNode":{"id":78258,"name":"Storage","nameLocations":["12394:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"12394:7:157"},"referencedDeclaration":72524,"src":"12394:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":78263,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":78261,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"12419:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12419:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12394:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78265,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"12447:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78266,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12454:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"12447:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78267,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12467:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79918,"src":"12447:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":78270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12483:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12475:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78268,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12475:7:157","typeDescriptions":{}}},"id":78271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12475:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12447:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":78273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12487:58:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":78264,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12439:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12439:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78275,"nodeType":"ExpressionStatement","src":"12439:107:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78276,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"12710:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78277,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12717:8:157","memberName":"reserved","nodeType":"MemberAccess","referencedDeclaration":72495,"src":"12710:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":78278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12729:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12710:20:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78301,"nodeType":"IfStatement","src":"12706:259:157","trueBody":{"id":78300,"nodeType":"Block","src":"12732:233:157","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":78283,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"12778:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12785:9:157","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":79844,"src":"12778:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78285,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"12796:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12803:6:157","memberName":"expiry","nodeType":"MemberAccess","referencedDeclaration":79853,"src":"12796:13:157","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":78281,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"12754:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12759:18:157","memberName":"blockIsPredecessor","nodeType":"MemberAccess","referencedDeclaration":80181,"src":"12754:23:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_uint8_$returns$_t_bool_$","typeString":"function (bytes32,uint8) view returns (bool)"}},"id":78287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12754:56:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b207761736e277420666f756e64","id":78288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12812:40:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""},"value":"allowed predecessor block wasn't found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""}],"id":78280,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12746:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12746:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78290,"nodeType":"ExpressionStatement","src":"12746:107:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78292,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12875:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":78293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12881:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"12875:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":78294,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"12893:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12900:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79847,"src":"12893:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"12875:39:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"62617463682074696d657374616d70206d75737420626520696e207468652070617374","id":78297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12916:37:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e97677af8fd3d6db2bba783b1126d9720b52e7ce22f9dd002ac530194accd2e","typeString":"literal_string \"batch timestamp must be in the past\""},"value":"batch timestamp must be in the past"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8e97677af8fd3d6db2bba783b1126d9720b52e7ce22f9dd002ac530194accd2e","typeString":"literal_string \"batch timestamp must be in the past\""}],"id":78291,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12867:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12867:87:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78299,"nodeType":"ExpressionStatement","src":"12867:87:157"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78303,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"13078:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13085:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"13078:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79911_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":78305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13106:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79908,"src":"13078:32:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":78306,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13114:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13121:26:157","memberName":"previousCommittedBatchHash","nodeType":"MemberAccess","referencedDeclaration":79850,"src":"13114:33:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"13078:69:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d69747465642062617463682068617368","id":78309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13161:39:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_95e5a4d2857f70c180e6f7fbcfe184f0ada58708c5b8d34699db125950a65e1f","typeString":"literal_string \"invalid previous committed batch hash\""},"value":"invalid previous committed batch hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_95e5a4d2857f70c180e6f7fbcfe184f0ada58708c5b8d34699db125950a65e1f","typeString":"literal_string \"invalid previous committed batch hash\""}],"id":78302,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"13057:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13057:153:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78311,"nodeType":"ExpressionStatement","src":"13057:153:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":78318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78313,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"13242:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78314,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13249:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"13242:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79911_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":78315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13270:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79910,"src":"13242:37:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":78316,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13283:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13290:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79847,"src":"13283:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"13242:62:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"62617463682074696d657374616d70206d7573742062652067726561746572206f7220657175616c20746f206c617465737420636f6d6d69747465642062617463682074696d657374616d70","id":78319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13318:78:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_38732c780a7ec5ee19f9f891d164b448dcdb267a227cba9428e8953292a463cf","typeString":"literal_string \"batch timestamp must be greater or equal to latest committed batch timestamp\""},"value":"batch timestamp must be greater or equal to latest committed batch timestamp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_38732c780a7ec5ee19f9f891d164b448dcdb267a227cba9428e8953292a463cf","typeString":"literal_string \"batch timestamp must be greater or equal to latest committed batch timestamp\""}],"id":78312,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"13221:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13221:185:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78321,"nodeType":"ExpressionStatement","src":"13221:185:157"},{"assignments":[78323],"declarations":[{"constant":false,"id":78323,"mutability":"mutable","name":"_chainCommitmentHash","nameLocation":"13425:20:157","nodeType":"VariableDeclaration","scope":78397,"src":"13417:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78322,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13417:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78328,"initialValue":{"arguments":[{"id":78325,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"13461:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78326,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13469:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}],"id":78324,"name":"_commitChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78558,"src":"13448:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_struct$_BatchCommitment_$79874_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BatchCommitment calldata) returns (bytes32)"}},"id":78327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13448:28:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13417:59:157"},{"assignments":[78330],"declarations":[{"constant":false,"id":78330,"mutability":"mutable","name":"_codeCommitmentsHash","nameLocation":"13494:20:157","nodeType":"VariableDeclaration","scope":78397,"src":"13486:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78329,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13486:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78335,"initialValue":{"arguments":[{"id":78332,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"13530:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78333,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13538:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}],"id":78331,"name":"_commitCodes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78667,"src":"13517:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_struct$_BatchCommitment_$79874_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BatchCommitment calldata) returns (bytes32)"}},"id":78334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13517:28:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13486:59:157"},{"assignments":[78337],"declarations":[{"constant":false,"id":78337,"mutability":"mutable","name":"_rewardsCommitmentHash","nameLocation":"13563:22:157","nodeType":"VariableDeclaration","scope":78397,"src":"13555:30:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78336,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13555:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78342,"initialValue":{"arguments":[{"id":78339,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"13603:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78340,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13611:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}],"id":78338,"name":"_commitRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78814,"src":"13588:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_struct$_BatchCommitment_$79874_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BatchCommitment calldata) returns (bytes32)"}},"id":78341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13588:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13555:63:157"},{"assignments":[78344],"declarations":[{"constant":false,"id":78344,"mutability":"mutable","name":"_validatorsCommitmentHash","nameLocation":"13636:25:157","nodeType":"VariableDeclaration","scope":78397,"src":"13628:33:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78343,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13628:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78349,"initialValue":{"arguments":[{"id":78346,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"13682:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78347,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13690:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}],"id":78345,"name":"_commitValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78955,"src":"13664:17:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_struct$_BatchCommitment_$79874_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BatchCommitment calldata) returns (bytes32)"}},"id":78348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13664:33:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13628:69:157"},{"assignments":[78351],"declarations":[{"constant":false,"id":78351,"mutability":"mutable","name":"_batchHash","nameLocation":"13716:10:157","nodeType":"VariableDeclaration","scope":78397,"src":"13708:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78350,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13708:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78367,"initialValue":{"arguments":[{"expression":{"id":78354,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13767:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13774:9:157","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":79844,"src":"13767:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78356,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13797:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13804:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79847,"src":"13797:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"expression":{"id":78358,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13832:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13839:26:157","memberName":"previousCommittedBatchHash","nodeType":"MemberAccess","referencedDeclaration":79850,"src":"13832:33:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78360,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"13879:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13886:6:157","memberName":"expiry","nodeType":"MemberAccess","referencedDeclaration":79853,"src":"13879:13:157","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":78362,"name":"_chainCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78323,"src":"13906:20:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78363,"name":"_codeCommitmentsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78330,"src":"13940:20:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78364,"name":"_rewardsCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78337,"src":"13974:22:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78365,"name":"_validatorsCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78344,"src":"14010:25:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78352,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"13729:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13734:19:157","memberName":"batchCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":80074,"src":"13729:24:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint48_$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint48,bytes32,uint8,bytes32,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":78366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13729:316:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13708:337:157"},{"expression":{"id":78377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":78368,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"14056:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14063:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"14056:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79911_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":78373,"name":"_batchHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78351,"src":"14110:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78374,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"14122:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14129:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79847,"src":"14122:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78371,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"14086:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14091:18:157","memberName":"CommittedBatchInfo","nodeType":"MemberAccess","referencedDeclaration":79911,"src":"14086:23:157","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CommittedBatchInfo_$79911_storage_ptr_$","typeString":"type(struct Gear.CommittedBatchInfo storage pointer)"}},"id":78376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14086:58:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79911_memory_ptr","typeString":"struct Gear.CommittedBatchInfo memory"}},"src":"14056:88:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79911_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":78378,"nodeType":"ExpressionStatement","src":"14056:88:157"},{"eventCall":{"arguments":[{"id":78380,"name":"_batchHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78351,"src":"14174:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":78379,"name":"BatchCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72529,"src":"14159:14:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":78381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14159:26:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78382,"nodeType":"EmitStatement","src":"14154:31:157"},{"expression":{"arguments":[{"arguments":[{"id":78386,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78260,"src":"14260:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78387,"name":"TRANSIENT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77289,"src":"14268:17:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78388,"name":"_batchHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78351,"src":"14287:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78389,"name":"_signatureType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78250,"src":"14299:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_SignatureType_$80038","typeString":"enum Gear.SignatureType"}},{"id":78390,"name":"_signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78253,"src":"14315:11:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},{"expression":{"id":78391,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78247,"src":"14328:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14335:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79847,"src":"14328:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_SignatureType_$80038","typeString":"enum Gear.SignatureType"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78384,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"14217:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14222:20:157","memberName":"validateSignaturesAt","nodeType":"MemberAccess","referencedDeclaration":80577,"src":"14217:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_bytes32_$_t_bytes32_$_t_enum$_SignatureType_$80038_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_uint256_$returns$_t_bool_$","typeString":"function (struct IRouter.Storage storage pointer,bytes32,bytes32,enum Gear.SignatureType,bytes calldata[] calldata,uint256) returns (bool)"}},"id":78393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14217:146:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7369676e61747572657320766572696669636174696f6e206661696c6564","id":78394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14377:32:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""},"value":"signatures verification failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""}],"id":78383,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14196:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14196:223:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78396,"nodeType":"ExpressionStatement","src":"14196:223:157"}]},"baseFunctions":[72763],"functionSelector":"b24fcac0","implemented":true,"kind":"function","modifiers":[{"id":78256,"kind":"modifierInvocation","modifierName":{"id":78255,"name":"nonReentrant","nameLocations":["12371:12:157"],"nodeType":"IdentifierPath","referencedDeclaration":42813,"src":"12371:12:157"},"nodeType":"ModifierInvocation","src":"12371:12:157"}],"name":"commitBatch","nameLocation":"12217:11:157","parameters":{"id":78254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78247,"mutability":"mutable","name":"_batch","nameLocation":"12268:6:157","nodeType":"VariableDeclaration","scope":78398,"src":"12238:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78246,"nodeType":"UserDefinedTypeName","pathNode":{"id":78245,"name":"Gear.BatchCommitment","nameLocations":["12238:4:157","12243:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79874,"src":"12238:20:157"},"referencedDeclaration":79874,"src":"12238:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"},{"constant":false,"id":78250,"mutability":"mutable","name":"_signatureType","nameLocation":"12303:14:157","nodeType":"VariableDeclaration","scope":78398,"src":"12284:33:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SignatureType_$80038","typeString":"enum Gear.SignatureType"},"typeName":{"id":78249,"nodeType":"UserDefinedTypeName","pathNode":{"id":78248,"name":"Gear.SignatureType","nameLocations":["12284:4:157","12289:13:157"],"nodeType":"IdentifierPath","referencedDeclaration":80038,"src":"12284:18:157"},"referencedDeclaration":80038,"src":"12284:18:157","typeDescriptions":{"typeIdentifier":"t_enum$_SignatureType_$80038","typeString":"enum Gear.SignatureType"}},"visibility":"internal"},{"constant":false,"id":78253,"mutability":"mutable","name":"_signatures","nameLocation":"12344:11:157","nodeType":"VariableDeclaration","scope":78398,"src":"12327:28:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":78251,"name":"bytes","nodeType":"ElementaryTypeName","src":"12327:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":78252,"nodeType":"ArrayTypeName","src":"12327:7:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"12228:133:157"},"returnParameters":{"id":78257,"nodeType":"ParameterList","parameters":[],"src":"12384:0:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78496,"nodeType":"FunctionDefinition","src":"14468:989:157","nodes":[],"body":{"id":78495,"nodeType":"Block","src":"14565:892:157","nodes":[],"statements":[{"assignments":[78411],"declarations":[{"constant":false,"id":78411,"mutability":"mutable","name":"router","nameLocation":"14591:6:157","nodeType":"VariableDeclaration","scope":78495,"src":"14575:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78410,"nodeType":"UserDefinedTypeName","pathNode":{"id":78409,"name":"Storage","nameLocations":["14575:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"14575:7:157"},"referencedDeclaration":72524,"src":"14575:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":78414,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":78412,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"14600:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14600:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"14575:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78416,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78411,"src":"14627:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78417,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14634:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"14627:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14647:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79918,"src":"14627:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":78421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14663:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14655:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78419,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14655:7:157","typeDescriptions":{}}},"id":78422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14655:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"14627:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":78424,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14667:58:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":78415,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14619:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14619:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78426,"nodeType":"ExpressionStatement","src":"14619:107:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"},"id":78436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":78428,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78411,"src":"14758:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14765:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"14758:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14778:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79942,"src":"14758:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79906_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78432,"indexExpression":{"id":78431,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78400,"src":"14784:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14758:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":78433,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"14796:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14801:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79906,"src":"14796:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79906_$","typeString":"type(enum Gear.CodeState)"}},"id":78435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14811:9:157","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":79905,"src":"14796:24:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"src":"14758:62:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":78437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14834:48:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":78427,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14737:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14737:155:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78439,"nodeType":"ExpressionStatement","src":"14737:155:157"},{"assignments":[78441],"declarations":[{"constant":false,"id":78441,"mutability":"mutable","name":"salt","nameLocation":"15061:4:157","nodeType":"VariableDeclaration","scope":78495,"src":"15053:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78440,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15053:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78449,"initialValue":{"arguments":[{"arguments":[{"id":78445,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78400,"src":"15095:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78446,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78402,"src":"15104:5:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78443,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15078:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":78444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15082:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"15078:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":78447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15078:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":78442,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15068:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15068:43:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15053:58:157"},{"assignments":[78451],"declarations":[{"constant":false,"id":78451,"mutability":"mutable","name":"actorId","nameLocation":"15129:7:157","nodeType":"VariableDeclaration","scope":78495,"src":"15121:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78450,"name":"address","nodeType":"ElementaryTypeName","src":"15121:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":78470,"initialValue":{"condition":{"id":78452,"name":"_isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78404,"src":"15139:8:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"arguments":[{"id":78465,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"15262:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$79288","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$79288","typeString":"contract Router"}],"id":78464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15254:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":78463,"name":"address","nodeType":"ElementaryTypeName","src":"15254:7:157","typeDescriptions":{}}},"id":78466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15254:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":78467,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78441,"src":"15269:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78461,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79661,"src":"15228:6:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$79661_$","typeString":"type(library Clones)"}},"id":78462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15235:18:157","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":79433,"src":"15228:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":78468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15228:46:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":78469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"15139:135:157","trueExpression":{"arguments":[{"arguments":[{"id":78457,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"15201:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$79288","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$79288","typeString":"contract Router"}],"id":78456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15193:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":78455,"name":"address","nodeType":"ElementaryTypeName","src":"15193:7:157","typeDescriptions":{}}},"id":78458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15193:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":78459,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78441,"src":"15208:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78453,"name":"ClonesSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79742,"src":"15162:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ClonesSmall_$79742_$","typeString":"type(library ClonesSmall)"}},"id":78454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15174:18:157","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":79681,"src":"15162:30:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":78460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15162:51:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"15121:153:157"},{"expression":{"id":78479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":78471,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78411,"src":"15285:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78475,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15292:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"15285:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78476,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15305:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79946,"src":"15285:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":78477,"indexExpression":{"id":78474,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78451,"src":"15314:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15285:37:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":78478,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78400,"src":"15325:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"15285:47:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":78480,"nodeType":"ExpressionStatement","src":"15285:47:157"},{"expression":{"id":78486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15342:35:157","subExpression":{"expression":{"expression":{"id":78481,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78411,"src":"15342:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78484,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15349:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"15342:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15362:13:157","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":79948,"src":"15342:33:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":78487,"nodeType":"ExpressionStatement","src":"15342:35:157"},{"eventCall":{"arguments":[{"id":78489,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78451,"src":"15408:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":78490,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78400,"src":"15417:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":78488,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72565,"src":"15393:14:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":78491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15393:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78492,"nodeType":"EmitStatement","src":"15388:37:157"},{"expression":{"id":78493,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78451,"src":"15443:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":78408,"id":78494,"nodeType":"Return","src":"15436:14:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_createProgram","nameLocation":"14477:14:157","parameters":{"id":78405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78400,"mutability":"mutable","name":"_codeId","nameLocation":"14500:7:157","nodeType":"VariableDeclaration","scope":78496,"src":"14492:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78399,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14492:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78402,"mutability":"mutable","name":"_salt","nameLocation":"14517:5:157","nodeType":"VariableDeclaration","scope":78496,"src":"14509:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78401,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14509:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78404,"mutability":"mutable","name":"_isSmall","nameLocation":"14529:8:157","nodeType":"VariableDeclaration","scope":78496,"src":"14524:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":78403,"name":"bool","nodeType":"ElementaryTypeName","src":"14524:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14491:47:157"},"returnParameters":{"id":78408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78407,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78496,"src":"14556:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78406,"name":"address","nodeType":"ElementaryTypeName","src":"14556:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14555:9:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":78558,"nodeType":"FunctionDefinition","src":"15463:620:157","nodes":[],"body":{"id":78557,"nodeType":"Block","src":"15573:510:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78508,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78502,"src":"15591:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15598:15:157","memberName":"chainCommitment","nodeType":"MemberAccess","referencedDeclaration":79858,"src":"15591:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ChainCommitment_$79830_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata[] calldata"}},"id":78510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15614:6:157","memberName":"length","nodeType":"MemberAccess","src":"15591:29:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":78511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15624:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15591:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636861696e436f6d6d69746d656e7420636f756c6420636f6e7461696e206174206d6f7374206f6e6520636f6d6d69746d656e74","id":78513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15627:54:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_fd5534e67800b86a8fdec17ab2ad998a1a611e97d47621723d73a7d0da2ef477","typeString":"literal_string \"chainCommitment could contain at most one commitment\""},"value":"chainCommitment could contain at most one commitment"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fd5534e67800b86a8fdec17ab2ad998a1a611e97d47621723d73a7d0da2ef477","typeString":"literal_string \"chainCommitment could contain at most one commitment\""}],"id":78507,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"15583:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15583:99:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78515,"nodeType":"ExpressionStatement","src":"15583:99:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78516,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78502,"src":"15697:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15704:15:157","memberName":"chainCommitment","nodeType":"MemberAccess","referencedDeclaration":79858,"src":"15697:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ChainCommitment_$79830_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata[] calldata"}},"id":78518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15720:6:157","memberName":"length","nodeType":"MemberAccess","src":"15697:29:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":78519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15730:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15697:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78526,"nodeType":"IfStatement","src":"15693:85:157","trueBody":{"id":78525,"nodeType":"Block","src":"15733:45:157","statements":[{"expression":{"arguments":[{"hexValue":"","id":78522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15764:2:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":78521,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15754:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15754:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78506,"id":78524,"nodeType":"Return","src":"15747:20:157"}]}},{"assignments":[78531],"declarations":[{"constant":false,"id":78531,"mutability":"mutable","name":"_commitment","nameLocation":"15818:11:157","nodeType":"VariableDeclaration","scope":78557,"src":"15788:41:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79830_calldata_ptr","typeString":"struct Gear.ChainCommitment"},"typeName":{"id":78530,"nodeType":"UserDefinedTypeName","pathNode":{"id":78529,"name":"Gear.ChainCommitment","nameLocations":["15788:4:157","15793:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79830,"src":"15788:20:157"},"referencedDeclaration":79830,"src":"15788:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79830_storage_ptr","typeString":"struct Gear.ChainCommitment"}},"visibility":"internal"}],"id":78536,"initialValue":{"baseExpression":{"expression":{"id":78532,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78502,"src":"15832:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15839:15:157","memberName":"chainCommitment","nodeType":"MemberAccess","referencedDeclaration":79858,"src":"15832:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ChainCommitment_$79830_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata[] calldata"}},"id":78535,"indexExpression":{"hexValue":"30","id":78534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15855:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15832:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79830_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"15788:69:157"},{"assignments":[78538],"declarations":[{"constant":false,"id":78538,"mutability":"mutable","name":"_transitionsHash","nameLocation":"15876:16:157","nodeType":"VariableDeclaration","scope":78557,"src":"15868:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78537,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15868:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78544,"initialValue":{"arguments":[{"id":78540,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78499,"src":"15914:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"expression":{"id":78541,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78531,"src":"15922:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79830_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata"}},"id":78542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15934:11:157","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":79826,"src":"15922:23:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$79978_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_array$_t_struct$_StateTransition_$79978_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}],"id":78539,"name":"_commitTransitions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79049,"src":"15895:18:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_array$_t_struct$_StateTransition_$79978_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.StateTransition calldata[] calldata) returns (bytes32)"}},"id":78543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15895:51:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15868:78:157"},{"eventCall":{"arguments":[{"expression":{"id":78546,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78531,"src":"15981:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79830_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata"}},"id":78547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15993:4:157","memberName":"head","nodeType":"MemberAccess","referencedDeclaration":79829,"src":"15981:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":78545,"name":"AnnouncesCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72534,"src":"15962:18:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":78548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15962:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78549,"nodeType":"EmitStatement","src":"15957:41:157"},{"expression":{"arguments":[{"id":78552,"name":"_transitionsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78538,"src":"16041:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78553,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78531,"src":"16059:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79830_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata"}},"id":78554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16071:4:157","memberName":"head","nodeType":"MemberAccess","referencedDeclaration":79829,"src":"16059:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78550,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"16016:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16021:19:157","memberName":"chainCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":80092,"src":"16016:24:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32) pure returns (bytes32)"}},"id":78555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16016:60:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78506,"id":78556,"nodeType":"Return","src":"16009:67:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitChain","nameLocation":"15472:12:157","parameters":{"id":78503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78499,"mutability":"mutable","name":"router","nameLocation":"15501:6:157","nodeType":"VariableDeclaration","scope":78558,"src":"15485:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78498,"nodeType":"UserDefinedTypeName","pathNode":{"id":78497,"name":"Storage","nameLocations":["15485:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"15485:7:157"},"referencedDeclaration":72524,"src":"15485:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78502,"mutability":"mutable","name":"_batch","nameLocation":"15539:6:157","nodeType":"VariableDeclaration","scope":78558,"src":"15509:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78501,"nodeType":"UserDefinedTypeName","pathNode":{"id":78500,"name":"Gear.BatchCommitment","nameLocations":["15509:4:157","15514:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79874,"src":"15509:20:157"},"referencedDeclaration":79874,"src":"15509:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"}],"src":"15484:62:157"},"returnParameters":{"id":78506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78505,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78558,"src":"15564:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78504,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15564:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15563:9:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":78667,"nodeType":"FunctionDefinition","src":"16089:1047:157","nodes":[],"body":{"id":78666,"nodeType":"Block","src":"16199:937:157","nodes":[],"statements":[{"assignments":[78570],"declarations":[{"constant":false,"id":78570,"mutability":"mutable","name":"_codeCommitmentHashes","nameLocation":"16222:21:157","nodeType":"VariableDeclaration","scope":78666,"src":"16209:34:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":78569,"name":"bytes","nodeType":"ElementaryTypeName","src":"16209:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":78571,"nodeType":"VariableDeclarationStatement","src":"16209:34:157"},{"body":{"id":78660,"nodeType":"Block","src":"16314:766:157","statements":[{"assignments":[78588],"declarations":[{"constant":false,"id":78588,"mutability":"mutable","name":"_commitment","nameLocation":"16357:11:157","nodeType":"VariableDeclaration","scope":78660,"src":"16328:40:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment"},"typeName":{"id":78587,"nodeType":"UserDefinedTypeName","pathNode":{"id":78586,"name":"Gear.CodeCommitment","nameLocations":["16328:4:157","16333:14:157"],"nodeType":"IdentifierPath","referencedDeclaration":79821,"src":"16328:19:157"},"referencedDeclaration":79821,"src":"16328:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_storage_ptr","typeString":"struct Gear.CodeCommitment"}},"visibility":"internal"}],"id":78593,"initialValue":{"baseExpression":{"expression":{"id":78589,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78564,"src":"16371:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16378:15:157","memberName":"codeCommitments","nodeType":"MemberAccess","referencedDeclaration":79863,"src":"16371:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$79821_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":78592,"indexExpression":{"id":78591,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78573,"src":"16394:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16371:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"16328:68:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"},"id":78604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":78595,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78561,"src":"16436:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78596,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16443:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"16436:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78597,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16456:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79942,"src":"16436:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79906_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78600,"indexExpression":{"expression":{"id":78598,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"16462:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16474:2:157","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79818,"src":"16462:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16436:41:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":78601,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"16481:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16486:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79906,"src":"16481:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79906_$","typeString":"type(enum Gear.CodeState)"}},"id":78603,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16496:19:157","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":79904,"src":"16481:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"src":"16436:79:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652072657175657374656420666f722076616c69646174696f6e20746f20626520636f6d6d6974746564","id":78605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16533:55:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""},"value":"code must be requested for validation to be committed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""}],"id":78594,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16411:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16411:191:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78607,"nodeType":"ExpressionStatement","src":"16411:191:157"},{"condition":{"expression":{"id":78608,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"16621:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16633:5:157","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":79820,"src":"16621:17:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":78639,"nodeType":"Block","src":"16806:81:157","statements":[{"expression":{"id":78637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"16824:48:157","subExpression":{"baseExpression":{"expression":{"expression":{"id":78631,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78561,"src":"16831:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78632,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16838:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"16831:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16851:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79942,"src":"16831:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79906_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78636,"indexExpression":{"expression":{"id":78634,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"16857:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16869:2:157","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79818,"src":"16857:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16831:41:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78638,"nodeType":"ExpressionStatement","src":"16824:48:157"}]},"id":78640,"nodeType":"IfStatement","src":"16617:270:157","trueBody":{"id":78630,"nodeType":"Block","src":"16640:160:157","statements":[{"expression":{"id":78621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":78610,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78561,"src":"16658:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16665:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"16658:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16678:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79942,"src":"16658:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79906_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78617,"indexExpression":{"expression":{"id":78613,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"16684:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16696:2:157","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79818,"src":"16684:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16658:41:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":78618,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"16702:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16707:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79906,"src":"16702:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79906_$","typeString":"type(enum Gear.CodeState)"}},"id":78620,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16717:9:157","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":79905,"src":"16702:24:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"src":"16658:68:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79906","typeString":"enum Gear.CodeState"}},"id":78622,"nodeType":"ExpressionStatement","src":"16658:68:157"},{"expression":{"id":78628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16744:41:157","subExpression":{"expression":{"expression":{"id":78623,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78561,"src":"16744:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16751:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"16744:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78627,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16764:19:157","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":79950,"src":"16744:39:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":78629,"nodeType":"ExpressionStatement","src":"16744:41:157"}]}},{"eventCall":{"arguments":[{"expression":{"id":78642,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"16923:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16935:2:157","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79818,"src":"16923:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78644,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"16939:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16951:5:157","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":79820,"src":"16939:17:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":78641,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72541,"src":"16906:16:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":78646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16906:51:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78647,"nodeType":"EmitStatement","src":"16901:56:157"},{"expression":{"id":78658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":78648,"name":"_codeCommitmentHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78570,"src":"16972:21:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":78652,"name":"_codeCommitmentHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78570,"src":"17009:21:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":78655,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"17056:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$79821_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}],"expression":{"id":78653,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"17032:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17037:18:157","memberName":"codeCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":80200,"src":"17032:23:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$79821_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.CodeCommitment memory) pure returns (bytes32)"}},"id":78656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17032:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16996:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":78649,"name":"bytes","nodeType":"ElementaryTypeName","src":"16996:5:157","typeDescriptions":{}}},"id":78651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17002:6:157","memberName":"concat","nodeType":"MemberAccess","src":"16996:12:157","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":78657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16996:73:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"16972:97:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":78659,"nodeType":"ExpressionStatement","src":"16972:97:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78576,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78573,"src":"16274:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":78577,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78564,"src":"16278:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16285:15:157","memberName":"codeCommitments","nodeType":"MemberAccess","referencedDeclaration":79863,"src":"16278:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$79821_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":78579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16301:6:157","memberName":"length","nodeType":"MemberAccess","src":"16278:29:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16274:33:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78661,"initializationExpression":{"assignments":[78573],"declarations":[{"constant":false,"id":78573,"mutability":"mutable","name":"i","nameLocation":"16267:1:157","nodeType":"VariableDeclaration","scope":78661,"src":"16259:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78572,"name":"uint256","nodeType":"ElementaryTypeName","src":"16259:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78575,"initialValue":{"hexValue":"30","id":78574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16271:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16259:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":78582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16309:3:157","subExpression":{"id":78581,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78573,"src":"16309:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":78583,"nodeType":"ExpressionStatement","src":"16309:3:157"},"nodeType":"ForStatement","src":"16254:826:157"},{"expression":{"arguments":[{"id":78663,"name":"_codeCommitmentHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78570,"src":"17107:21:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":78662,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"17097:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17097:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78568,"id":78665,"nodeType":"Return","src":"17090:39:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitCodes","nameLocation":"16098:12:157","parameters":{"id":78565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78561,"mutability":"mutable","name":"router","nameLocation":"16127:6:157","nodeType":"VariableDeclaration","scope":78667,"src":"16111:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78560,"nodeType":"UserDefinedTypeName","pathNode":{"id":78559,"name":"Storage","nameLocations":["16111:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"16111:7:157"},"referencedDeclaration":72524,"src":"16111:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78564,"mutability":"mutable","name":"_batch","nameLocation":"16165:6:157","nodeType":"VariableDeclaration","scope":78667,"src":"16135:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78563,"nodeType":"UserDefinedTypeName","pathNode":{"id":78562,"name":"Gear.BatchCommitment","nameLocations":["16135:4:157","16140:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79874,"src":"16135:20:157"},"referencedDeclaration":79874,"src":"16135:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"}],"src":"16110:62:157"},"returnParameters":{"id":78568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78567,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78667,"src":"16190:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78566,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16190:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16189:9:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":78814,"nodeType":"FunctionDefinition","src":"17178:1645:157","nodes":[],"body":{"id":78813,"nodeType":"Block","src":"17290:1533:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78679,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78673,"src":"17321:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17328:17:157","memberName":"rewardsCommitment","nodeType":"MemberAccess","referencedDeclaration":79868,"src":"17321:24:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsCommitment_$79883_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata[] calldata"}},"id":78681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17346:6:157","memberName":"length","nodeType":"MemberAccess","src":"17321:31:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":78682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17356:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"17321:36:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7265776172647320636f6d6d69746d656e74206d75737420626520656d707479206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d656e74","id":78684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17359:66:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_c3cb7cda35f329d061929db32e4b728fcd5a7bc61949b1d5212af87c625d8ab0","typeString":"literal_string \"rewards commitment must be empty or contains only one commitment\""},"value":"rewards commitment must be empty or contains only one commitment"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c3cb7cda35f329d061929db32e4b728fcd5a7bc61949b1d5212af87c625d8ab0","typeString":"literal_string \"rewards commitment must be empty or contains only one commitment\""}],"id":78678,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17300:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17300:135:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78686,"nodeType":"ExpressionStatement","src":"17300:135:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78687,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78673,"src":"17450:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17457:17:157","memberName":"rewardsCommitment","nodeType":"MemberAccess","referencedDeclaration":79868,"src":"17450:24:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsCommitment_$79883_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata[] calldata"}},"id":78689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17475:6:157","memberName":"length","nodeType":"MemberAccess","src":"17450:31:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":78690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17485:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17450:36:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78697,"nodeType":"IfStatement","src":"17446:87:157","trueBody":{"id":78696,"nodeType":"Block","src":"17488:45:157","statements":[{"expression":{"arguments":[{"hexValue":"","id":78693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17519:2:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":78692,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"17509:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17509:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78677,"id":78695,"nodeType":"Return","src":"17502:20:157"}]}},{"assignments":[78702],"declarations":[{"constant":false,"id":78702,"mutability":"mutable","name":"_commitment","nameLocation":"17575:11:157","nodeType":"VariableDeclaration","scope":78813,"src":"17543:43:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment"},"typeName":{"id":78701,"nodeType":"UserDefinedTypeName","pathNode":{"id":78700,"name":"Gear.RewardsCommitment","nameLocations":["17543:4:157","17548:17:157"],"nodeType":"IdentifierPath","referencedDeclaration":79883,"src":"17543:22:157"},"referencedDeclaration":79883,"src":"17543:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_storage_ptr","typeString":"struct Gear.RewardsCommitment"}},"visibility":"internal"}],"id":78707,"initialValue":{"baseExpression":{"expression":{"id":78703,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78673,"src":"17589:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17596:17:157","memberName":"rewardsCommitment","nodeType":"MemberAccess","referencedDeclaration":79868,"src":"17589:24:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsCommitment_$79883_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata[] calldata"}},"id":78706,"indexExpression":{"hexValue":"30","id":78705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17614:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17589:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"17543:73:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":78713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78709,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"17635:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17647:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79882,"src":"17635:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":78711,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78673,"src":"17659:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17666:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79847,"src":"17659:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"17635:45:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7265776172647320636f6d6d69746d656e742074696d657374616d70206d75737420626520666f72207468652070617374","id":78714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17682:51:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_29800c627e371f26ea90a88483e0bf62df9129f58fe1e9f884bd5a95e948b2c6","typeString":"literal_string \"rewards commitment timestamp must be for the past\""},"value":"rewards commitment timestamp must be for the past"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_29800c627e371f26ea90a88483e0bf62df9129f58fe1e9f884bd5a95e948b2c6","typeString":"literal_string \"rewards commitment timestamp must be for the past\""}],"id":78708,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17627:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17627:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78716,"nodeType":"ExpressionStatement","src":"17627:107:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":78723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78718,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"17752:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17764:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79882,"src":"17752:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"expression":{"id":78720,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78670,"src":"17777:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17784:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"17777:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78722,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17797:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79922,"src":"17777:29:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"17752:54:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7265776172647320636f6d6d69746d656e742074696d657374616d702070726564617465732067656e65736973","id":78724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17808:47:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2b3cd0274b4fcdffda77e6b2c6d36090b26f122587234ee8b80bbce7a098f6","typeString":"literal_string \"rewards commitment timestamp predates genesis\""},"value":"rewards commitment timestamp predates genesis"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_db2b3cd0274b4fcdffda77e6b2c6d36090b26f122587234ee8b80bbce7a098f6","typeString":"literal_string \"rewards commitment timestamp predates genesis\""}],"id":78717,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17744:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17744:112:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78726,"nodeType":"ExpressionStatement","src":"17744:112:157"},{"assignments":[78728],"declarations":[{"constant":false,"id":78728,"mutability":"mutable","name":"commitmentEraIndex","nameLocation":"17875:18:157","nodeType":"VariableDeclaration","scope":78813,"src":"17867:26:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78727,"name":"uint256","nodeType":"ElementaryTypeName","src":"17867:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78735,"initialValue":{"arguments":[{"id":78731,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78670,"src":"17912:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"expression":{"id":78732,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"17920:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17932:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79882,"src":"17920:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78729,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"17896:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17901:10:157","memberName":"eraIndexAt","nodeType":"MemberAccess","referencedDeclaration":80799,"src":"17896:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct IRouter.Storage storage pointer,uint256) view returns (uint256)"}},"id":78734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17896:46:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17867:75:157"},{"assignments":[78737],"declarations":[{"constant":false,"id":78737,"mutability":"mutable","name":"batchEraIndex","nameLocation":"17960:13:157","nodeType":"VariableDeclaration","scope":78813,"src":"17952:21:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78736,"name":"uint256","nodeType":"ElementaryTypeName","src":"17952:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78744,"initialValue":{"arguments":[{"id":78740,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78670,"src":"17992:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"expression":{"id":78741,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78673,"src":"18000:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18007:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79847,"src":"18000:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78738,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"17976:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17981:10:157","memberName":"eraIndexAt","nodeType":"MemberAccess","referencedDeclaration":80799,"src":"17976:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct IRouter.Storage storage pointer,uint256) view returns (uint256)"}},"id":78743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17976:46:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17952:70:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78746,"name":"commitmentEraIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78728,"src":"18041:18:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":78747,"name":"batchEraIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78737,"src":"18062:13:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18041:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7265776172647320636f6d6d69746d656e74206d757374207461726765742070726576696f757320657261","id":78749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18077:45:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_2bcd8c85a87f79e0b52627987f1854fed13757f98feded85d09b46d177846b1a","typeString":"literal_string \"rewards commitment must target previous era\""},"value":"rewards commitment must target previous era"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2bcd8c85a87f79e0b52627987f1854fed13757f98feded85d09b46d177846b1a","typeString":"literal_string \"rewards commitment must target previous era\""}],"id":78745,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18033:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18033:90:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78751,"nodeType":"ExpressionStatement","src":"18033:90:157"},{"assignments":[78753],"declarations":[{"constant":false,"id":78753,"mutability":"mutable","name":"_middleware","nameLocation":"18142:11:157","nodeType":"VariableDeclaration","scope":78813,"src":"18134:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78752,"name":"address","nodeType":"ElementaryTypeName","src":"18134:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":78757,"initialValue":{"expression":{"expression":{"id":78754,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78670,"src":"18156:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78755,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18163:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"18156:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":78756,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18177:10:157","memberName":"middleware","nodeType":"MemberAccess","referencedDeclaration":79815,"src":"18156:31:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"18134:53:157"},{"expression":{"arguments":[{"id":78764,"name":"_middleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78753,"src":"18259:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78765,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"18272:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18284:9:157","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":79877,"src":"18272:21:157","typeDescriptions":{"typeIdentifier":"t_struct$_OperatorRewardsCommitment_$79888_calldata_ptr","typeString":"struct Gear.OperatorRewardsCommitment calldata"}},"id":78767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18294:6:157","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":79885,"src":"18272:28:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"expression":{"id":78768,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"18303:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18315:7:157","memberName":"stakers","nodeType":"MemberAccess","referencedDeclaration":79880,"src":"18303:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_calldata_ptr","typeString":"struct Gear.StakerRewardsCommitment calldata"}},"id":78770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18323:11:157","memberName":"totalAmount","nodeType":"MemberAccess","referencedDeclaration":79894,"src":"18303:31:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18272:62:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"expression":{"id":78759,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78670,"src":"18204:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78760,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18211:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"18204:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":78761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18225:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":79813,"src":"18204:32:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78758,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45587,"src":"18197:6:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$45587_$","typeString":"type(contract IERC20)"}},"id":78762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18197:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$45587","typeString":"contract IERC20"}},"id":78763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18251:7:157","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":45574,"src":"18197:61:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":78772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18197:138:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78773,"nodeType":"ExpressionStatement","src":"18197:138:157"},{"assignments":[78775],"declarations":[{"constant":false,"id":78775,"mutability":"mutable","name":"_operatorRewardsHash","nameLocation":"18354:20:157","nodeType":"VariableDeclaration","scope":78813,"src":"18346:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78774,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18346:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78790,"initialValue":{"arguments":[{"expression":{"expression":{"id":78780,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78670,"src":"18458:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78781,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18465:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"18458:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79816_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":78782,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18479:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":79813,"src":"18458:32:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"expression":{"id":78783,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"18492:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18504:9:157","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":79877,"src":"18492:21:157","typeDescriptions":{"typeIdentifier":"t_struct$_OperatorRewardsCommitment_$79888_calldata_ptr","typeString":"struct Gear.OperatorRewardsCommitment calldata"}},"id":78785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18514:6:157","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":79885,"src":"18492:28:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":78786,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"18522:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18534:9:157","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":79877,"src":"18522:21:157","typeDescriptions":{"typeIdentifier":"t_struct$_OperatorRewardsCommitment_$79888_calldata_ptr","typeString":"struct Gear.OperatorRewardsCommitment calldata"}},"id":78788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18544:4:157","memberName":"root","nodeType":"MemberAccess","referencedDeclaration":79887,"src":"18522:26:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":78777,"name":"_middleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78753,"src":"18389:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78776,"name":"IMiddleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72281,"src":"18377:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMiddleware_$72281_$","typeString":"type(contract IMiddleware)"}},"id":78778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18377:24:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMiddleware_$72281","typeString":"contract IMiddleware"}},"id":78779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18415:25:157","memberName":"distributeOperatorRewards","nodeType":"MemberAccess","referencedDeclaration":72269,"src":"18377:63:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,uint256,bytes32) external returns (bytes32)"}},"id":78789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18377:185:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18346:216:157"},{"assignments":[78792],"declarations":[{"constant":false,"id":78792,"mutability":"mutable","name":"_stakerRewardsHash","nameLocation":"18581:18:157","nodeType":"VariableDeclaration","scope":78813,"src":"18573:26:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78791,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18573:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78802,"initialValue":{"arguments":[{"expression":{"id":78797,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"18663:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18675:7:157","memberName":"stakers","nodeType":"MemberAccess","referencedDeclaration":79880,"src":"18663:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_calldata_ptr","typeString":"struct Gear.StakerRewardsCommitment calldata"}},{"expression":{"id":78799,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"18684:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18696:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79882,"src":"18684:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79897_calldata_ptr","typeString":"struct Gear.StakerRewardsCommitment calldata"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"arguments":[{"id":78794,"name":"_middleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78753,"src":"18626:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78793,"name":"IMiddleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72281,"src":"18614:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMiddleware_$72281_$","typeString":"type(contract IMiddleware)"}},"id":78795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18614:24:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMiddleware_$72281","typeString":"contract IMiddleware"}},"id":78796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18639:23:157","memberName":"distributeStakerRewards","nodeType":"MemberAccess","referencedDeclaration":72280,"src":"18614:48:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_StakerRewardsCommitment_$79897_memory_ptr_$_t_uint48_$returns$_t_bytes32_$","typeString":"function (struct Gear.StakerRewardsCommitment memory,uint48) external returns (bytes32)"}},"id":78801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18614:92:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18573:133:157"},{"expression":{"arguments":[{"arguments":[{"id":78806,"name":"_operatorRewardsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78775,"src":"18751:20:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78807,"name":"_stakerRewardsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78792,"src":"18773:18:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78808,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78702,"src":"18793:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79883_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18805:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79882,"src":"18793:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78804,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"18734:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":78805,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18738:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"18734:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":78810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18734:81:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":78803,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"18724:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18724:92:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78677,"id":78812,"nodeType":"Return","src":"18717:99:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitRewards","nameLocation":"17187:14:157","parameters":{"id":78674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78670,"mutability":"mutable","name":"router","nameLocation":"17218:6:157","nodeType":"VariableDeclaration","scope":78814,"src":"17202:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78669,"nodeType":"UserDefinedTypeName","pathNode":{"id":78668,"name":"Storage","nameLocations":["17202:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"17202:7:157"},"referencedDeclaration":72524,"src":"17202:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78673,"mutability":"mutable","name":"_batch","nameLocation":"17256:6:157","nodeType":"VariableDeclaration","scope":78814,"src":"17226:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78672,"nodeType":"UserDefinedTypeName","pathNode":{"id":78671,"name":"Gear.BatchCommitment","nameLocations":["17226:4:157","17231:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79874,"src":"17226:20:157"},"referencedDeclaration":79874,"src":"17226:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"}],"src":"17201:62:157"},"returnParameters":{"id":78677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78814,"src":"17281:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78675,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17281:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17280:9:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":78955,"nodeType":"FunctionDefinition","src":"18875:1605:157","nodes":[],"body":{"id":78954,"nodeType":"Block","src":"18990:1490:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78827,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78821,"src":"19021:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19028:20:157","memberName":"validatorsCommitment","nodeType":"MemberAccess","referencedDeclaration":79873,"src":"19021:27:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValidatorsCommitment_$79841_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata[] calldata"}},"id":78829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19049:6:157","memberName":"length","nodeType":"MemberAccess","src":"19021:34:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":78830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19059:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19021:39:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"76616c696461746f727320636f6d6d69746d656e74206d75737420626520656d707479206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d656e74","id":78832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19074:69:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_644e5bd3afba7f99d7f3c2ebff048e0fa7cea8aeaeb500c803c372ccd79ad6ff","typeString":"literal_string \"validators commitment must be empty or contains only one commitment\""},"value":"validators commitment must be empty or contains only one commitment"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_644e5bd3afba7f99d7f3c2ebff048e0fa7cea8aeaeb500c803c372ccd79ad6ff","typeString":"literal_string \"validators commitment must be empty or contains only one commitment\""}],"id":78826,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19000:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19000:153:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78834,"nodeType":"ExpressionStatement","src":"19000:153:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78835,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78821,"src":"19168:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19175:20:157","memberName":"validatorsCommitment","nodeType":"MemberAccess","referencedDeclaration":79873,"src":"19168:27:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValidatorsCommitment_$79841_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata[] calldata"}},"id":78837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19196:6:157","memberName":"length","nodeType":"MemberAccess","src":"19168:34:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":78838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19206:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19168:39:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78845,"nodeType":"IfStatement","src":"19164:90:157","trueBody":{"id":78844,"nodeType":"Block","src":"19209:45:157","statements":[{"expression":{"arguments":[{"hexValue":"","id":78841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19240:2:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":78840,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"19230:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19230:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78825,"id":78843,"nodeType":"Return","src":"19223:20:157"}]}},{"assignments":[78850],"declarations":[{"constant":false,"id":78850,"mutability":"mutable","name":"_commitment","nameLocation":"19299:11:157","nodeType":"VariableDeclaration","scope":78954,"src":"19264:46:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment"},"typeName":{"id":78849,"nodeType":"UserDefinedTypeName","pathNode":{"id":78848,"name":"Gear.ValidatorsCommitment","nameLocations":["19264:4:157","19269:20:157"],"nodeType":"IdentifierPath","referencedDeclaration":79841,"src":"19264:25:157"},"referencedDeclaration":79841,"src":"19264:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_storage_ptr","typeString":"struct Gear.ValidatorsCommitment"}},"visibility":"internal"}],"id":78855,"initialValue":{"baseExpression":{"expression":{"id":78851,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78821,"src":"19313:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19320:20:157","memberName":"validatorsCommitment","nodeType":"MemberAccess","referencedDeclaration":79873,"src":"19313:27:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValidatorsCommitment_$79841_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata[] calldata"}},"id":78854,"indexExpression":{"hexValue":"30","id":78853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19341:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19313:30:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"19264:79:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78857,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78850,"src":"19362:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19374:10:157","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":79838,"src":"19362:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":78859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19385:6:157","memberName":"length","nodeType":"MemberAccess","src":"19362:29:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":78860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19394:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19362:33:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e65772076616c696461746f7273206c697374206d757374206e6f7420626520656d707479","id":78862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19397:39:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_fa6d9c9edd6409924e1be95f047fac6c60e2699cd246c0542abacb4236679b95","typeString":"literal_string \"new validators list must not be empty\""},"value":"new validators list must not be empty"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fa6d9c9edd6409924e1be95f047fac6c60e2699cd246c0542abacb4236679b95","typeString":"literal_string \"new validators list must not be empty\""}],"id":78856,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19354:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19354:83:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78864,"nodeType":"ExpressionStatement","src":"19354:83:157"},{"assignments":[78866],"declarations":[{"constant":false,"id":78866,"mutability":"mutable","name":"currentEraIndex","nameLocation":"19456:15:157","nodeType":"VariableDeclaration","scope":78954,"src":"19448:23:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78865,"name":"uint256","nodeType":"ElementaryTypeName","src":"19448:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78878,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78867,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"19475:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":78868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19481:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"19475:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"expression":{"id":78869,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78818,"src":"19493:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19500:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"19493:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19513:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79922,"src":"19493:29:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"19475:47:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":78873,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19474:49:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"expression":{"id":78874,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78818,"src":"19526:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19533:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"19526:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},"id":78876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19543:3:157","memberName":"era","nodeType":"MemberAccess","referencedDeclaration":79980,"src":"19526:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19474:72:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19448:98:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78880,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78850,"src":"19565:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19577:8:157","memberName":"eraIndex","nodeType":"MemberAccess","referencedDeclaration":79840,"src":"19565:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78882,"name":"currentEraIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78866,"src":"19589:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":78883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19607:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19589:19:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19565:43:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6d6d69746d656e742065726120696e646578206973206e6f74206e6578742065726120696e646578","id":78886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19610:44:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_162890466e3da7889495cad8b992d317e467631b8d4abd8dc4464c15dd41b759","typeString":"literal_string \"commitment era index is not next era index\""},"value":"commitment era index is not next era index"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_162890466e3da7889495cad8b992d317e467631b8d4abd8dc4464c15dd41b759","typeString":"literal_string \"commitment era index is not next era index\""}],"id":78879,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19557:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19557:98:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78888,"nodeType":"ExpressionStatement","src":"19557:98:157"},{"assignments":[78890],"declarations":[{"constant":false,"id":78890,"mutability":"mutable","name":"nextEraStart","nameLocation":"19674:12:157","nodeType":"VariableDeclaration","scope":78954,"src":"19666:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78889,"name":"uint256","nodeType":"ElementaryTypeName","src":"19666:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78901,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78891,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78818,"src":"19689:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78892,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19696:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"19689:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78893,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19709:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79922,"src":"19689:29:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78894,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78818,"src":"19721:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78895,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19728:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"19721:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},"id":78896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19738:3:157","memberName":"era","nodeType":"MemberAccess","referencedDeclaration":79980,"src":"19721:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":78897,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78850,"src":"19744:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19756:8:157","memberName":"eraIndex","nodeType":"MemberAccess","referencedDeclaration":79840,"src":"19744:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19721:43:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19689:75:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19666:98:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78903,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"19782:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":78904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19788:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"19782:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78905,"name":"nextEraStart","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78890,"src":"19801:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"expression":{"id":78906,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78818,"src":"19816:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78907,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19823:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"19816:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$79985_storage","typeString":"struct Gear.Timelines storage ref"}},"id":78908,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19833:8:157","memberName":"election","nodeType":"MemberAccess","referencedDeclaration":79982,"src":"19816:25:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19801:40:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19782:59:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"656c656374696f6e206973206e6f74207965742073746172746564","id":78911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19843:29:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef3e2748c631aa0d71d8afc854c277a3e771005dd496ece9dad00c587d5c5eaa","typeString":"literal_string \"election is not yet started\""},"value":"election is not yet started"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef3e2748c631aa0d71d8afc854c277a3e771005dd496ece9dad00c587d5c5eaa","typeString":"literal_string \"election is not yet started\""}],"id":78902,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19774:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19774:99:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78913,"nodeType":"ExpressionStatement","src":"19774:99:157"},{"assignments":[78918],"declarations":[{"constant":false,"id":78918,"mutability":"mutable","name":"_validators","nameLocation":"19955:11:157","nodeType":"VariableDeclaration","scope":78954,"src":"19931:35:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators"},"typeName":{"id":78917,"nodeType":"UserDefinedTypeName","pathNode":{"id":78916,"name":"Gear.Validators","nameLocations":["19931:4:157","19936:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":79798,"src":"19931:15:157"},"referencedDeclaration":79798,"src":"19931:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators"}},"visibility":"internal"}],"id":78923,"initialValue":{"arguments":[{"id":78921,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78818,"src":"19996:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":78919,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"19969:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19974:21:157","memberName":"previousEraValidators","nodeType":"MemberAccess","referencedDeclaration":80620,"src":"19969:26:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79798_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":78922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19969:34:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"19931:72:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78925,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78918,"src":"20021:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":78926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20033:16:157","memberName":"useFromTimestamp","nodeType":"MemberAccess","referencedDeclaration":79797,"src":"20021:28:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":78927,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"20052:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":78928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20058:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"20052:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20021:46:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6c6f6f6b73206c696b652076616c696461746f727320666f72206e657874206572612061726520616c726561647920736574","id":78930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20069:52:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b284ea0c51a926e5b8ea00c07f1ff766c11519c493036a65a767443fdf3f1780","typeString":"literal_string \"looks like validators for next era are already set\""},"value":"looks like validators for next era are already set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b284ea0c51a926e5b8ea00c07f1ff766c11519c493036a65a767443fdf3f1780","typeString":"literal_string \"looks like validators for next era are already set\""}],"id":78924,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"20013:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20013:109:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78932,"nodeType":"ExpressionStatement","src":"20013:109:157"},{"expression":{"arguments":[{"id":78934,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78918,"src":"20163:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},{"expression":{"id":78935,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78850,"src":"20188:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20200:19:157","memberName":"aggregatedPublicKey","nodeType":"MemberAccess","referencedDeclaration":79833,"src":"20188:31:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey calldata"}},{"expression":{"id":78937,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78850,"src":"20233:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20245:33:157","memberName":"verifiableSecretSharingCommitment","nodeType":"MemberAccess","referencedDeclaration":79835,"src":"20233:45:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":78939,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78850,"src":"20292:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20304:10:157","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":79838,"src":"20292:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":78941,"name":"nextEraStart","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78890,"src":"20328:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"},{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":78933,"name":"_resetValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79160,"src":"20133:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Validators_$79798_storage_ptr_$_t_struct$_AggregatedPublicKey_$79783_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct Gear.Validators storage pointer,struct Gear.AggregatedPublicKey memory,bytes memory,address[] memory,uint256)"}},"id":78942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20133:217:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78943,"nodeType":"ExpressionStatement","src":"20133:217:157"},{"eventCall":{"arguments":[{"expression":{"id":78945,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78850,"src":"20392:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20404:8:157","memberName":"eraIndex","nodeType":"MemberAccess","referencedDeclaration":79840,"src":"20392:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":78944,"name":"ValidatorsCommittedForEra","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72551,"src":"20366:25:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":78947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20366:47:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78948,"nodeType":"EmitStatement","src":"20361:52:157"},{"expression":{"arguments":[{"id":78951,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78850,"src":"20461:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79841_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}],"expression":{"id":78949,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80886,"src":"20431:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80886_$","typeString":"type(library Gear)"}},"id":78950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20436:24:157","memberName":"validatorsCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":80117,"src":"20431:29:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ValidatorsCommitment_$79841_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.ValidatorsCommitment memory) pure returns (bytes32)"}},"id":78952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20431:42:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78825,"id":78953,"nodeType":"Return","src":"20424:49:157"}]},"documentation":{"id":78815,"nodeType":"StructuredDocumentation","src":"18829:41:157","text":"@dev Set validators for the next era."},"implemented":true,"kind":"function","modifiers":[],"name":"_commitValidators","nameLocation":"18884:17:157","parameters":{"id":78822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78818,"mutability":"mutable","name":"router","nameLocation":"18918:6:157","nodeType":"VariableDeclaration","scope":78955,"src":"18902:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78817,"nodeType":"UserDefinedTypeName","pathNode":{"id":78816,"name":"Storage","nameLocations":["18902:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"18902:7:157"},"referencedDeclaration":72524,"src":"18902:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78821,"mutability":"mutable","name":"_batch","nameLocation":"18956:6:157","nodeType":"VariableDeclaration","scope":78955,"src":"18926:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78820,"nodeType":"UserDefinedTypeName","pathNode":{"id":78819,"name":"Gear.BatchCommitment","nameLocations":["18926:4:157","18931:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79874,"src":"18926:20:157"},"referencedDeclaration":79874,"src":"18926:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79874_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"}],"src":"18901:62:157"},"returnParameters":{"id":78825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78955,"src":"18981:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78823,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18981:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"18980:9:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":79049,"nodeType":"FunctionDefinition","src":"20486:926:157","nodes":[],"body":{"id":79048,"nodeType":"Block","src":"20630:782:157","nodes":[],"statements":[{"assignments":[78968],"declarations":[{"constant":false,"id":78968,"mutability":"mutable","name":"transitionsHashes","nameLocation":"20653:17:157","nodeType":"VariableDeclaration","scope":79048,"src":"20640:30:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":78967,"name":"bytes","nodeType":"ElementaryTypeName","src":"20640:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":78969,"nodeType":"VariableDeclarationStatement","src":"20640:30:157"},{"body":{"id":79042,"nodeType":"Block","src":"20731:629:157","statements":[{"assignments":[78985],"declarations":[{"constant":false,"id":78985,"mutability":"mutable","name":"transition","nameLocation":"20775:10:157","nodeType":"VariableDeclaration","scope":79042,"src":"20745:40:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":78984,"nodeType":"UserDefinedTypeName","pathNode":{"id":78983,"name":"Gear.StateTransition","nameLocations":["20745:4:157","20750:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79978,"src":"20745:20:157"},"referencedDeclaration":79978,"src":"20745:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"id":78989,"initialValue":{"baseExpression":{"id":78986,"name":"_transitions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78962,"src":"20788:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$79978_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":78988,"indexExpression":{"id":78987,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78971,"src":"20801:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20788:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"20745:58:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":78991,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78958,"src":"20843:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78992,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20850:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"20843:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20863:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79946,"src":"20843:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":78996,"indexExpression":{"expression":{"id":78994,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78985,"src":"20872:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":78995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20883:7:157","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"20872:18:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20843:48:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":78997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20895:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20843:53:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":78999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20898:49:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":78990,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"20818:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20818:143:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79001,"nodeType":"ExpressionStatement","src":"20818:143:157"},{"assignments":[79003],"declarations":[{"constant":false,"id":79003,"mutability":"mutable","name":"value","nameLocation":"20984:5:157","nodeType":"VariableDeclaration","scope":79042,"src":"20976:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":79002,"name":"uint128","nodeType":"ElementaryTypeName","src":"20976:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":79005,"initialValue":{"hexValue":"30","id":79004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20992:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20976:17:157"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":79013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":79009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":79006,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78985,"src":"21012:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":79007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21023:14:157","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79967,"src":"21012:25:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":79008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21041:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21012:30:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":79012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"21046:38:157","subExpression":{"expression":{"id":79010,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78985,"src":"21047:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":79011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21058:26:157","memberName":"valueToReceiveNegativeSign","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"21047:37:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"21012:72:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79020,"nodeType":"IfStatement","src":"21008:144:157","trueBody":{"id":79019,"nodeType":"Block","src":"21086:66:157","statements":[{"expression":{"id":79017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":79014,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79003,"src":"21104:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":79015,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78985,"src":"21112:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":79016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21123:14:157","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79967,"src":"21112:25:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"21104:33:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":79018,"nodeType":"ExpressionStatement","src":"21104:33:157"}]}},{"assignments":[79022],"declarations":[{"constant":false,"id":79022,"mutability":"mutable","name":"transitionHash","nameLocation":"21174:14:157","nodeType":"VariableDeclaration","scope":79042,"src":"21166:22:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":79021,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21166:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":79032,"initialValue":{"arguments":[{"id":79030,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78985,"src":"21256:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}],"expression":{"arguments":[{"expression":{"id":79024,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78985,"src":"21199:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":79025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21210:7:157","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":79958,"src":"21199:18:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":79023,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"21191:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$72455_$","typeString":"type(contract IMirror)"}},"id":79026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21191:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$72455","typeString":"contract IMirror"}},"id":79027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21219:22:157","memberName":"performStateTransition","nodeType":"MemberAccess","referencedDeclaration":72454,"src":"21191:50:157","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_struct$_StateTransition_$79978_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.StateTransition memory) payable external returns (bytes32)"}},"id":79029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":79028,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79003,"src":"21249:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"21191:64:157","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_struct$_StateTransition_$79978_memory_ptr_$returns$_t_bytes32_$value","typeString":"function (struct Gear.StateTransition memory) payable external returns (bytes32)"}},"id":79031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21191:76:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"21166:101:157"},{"expression":{"id":79040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":79033,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78968,"src":"21282:17:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":79037,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78968,"src":"21315:17:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":79038,"name":"transitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79022,"src":"21334:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":79035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21302:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":79034,"name":"bytes","nodeType":"ElementaryTypeName","src":"21302:5:157","typeDescriptions":{}}},"id":79036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21308:6:157","memberName":"concat","nodeType":"MemberAccess","src":"21302:12:157","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":79039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21302:47:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"21282:67:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":79041,"nodeType":"ExpressionStatement","src":"21282:67:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78974,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78971,"src":"20701:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":78975,"name":"_transitions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78962,"src":"20705:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$79978_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":78976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20718:6:157","memberName":"length","nodeType":"MemberAccess","src":"20705:19:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20701:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79043,"initializationExpression":{"assignments":[78971],"declarations":[{"constant":false,"id":78971,"mutability":"mutable","name":"i","nameLocation":"20694:1:157","nodeType":"VariableDeclaration","scope":79043,"src":"20686:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78970,"name":"uint256","nodeType":"ElementaryTypeName","src":"20686:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78973,"initialValue":{"hexValue":"30","id":78972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20698:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20686:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":78979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20726:3:157","subExpression":{"id":78978,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78971,"src":"20726:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":78980,"nodeType":"ExpressionStatement","src":"20726:3:157"},"nodeType":"ForStatement","src":"20681:679:157"},{"expression":{"arguments":[{"id":79045,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78968,"src":"21387:17:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":79044,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"21377:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":79046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21377:28:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78966,"id":79047,"nodeType":"Return","src":"21370:35:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitTransitions","nameLocation":"20495:18:157","parameters":{"id":78963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78958,"mutability":"mutable","name":"router","nameLocation":"20530:6:157","nodeType":"VariableDeclaration","scope":79049,"src":"20514:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78957,"nodeType":"UserDefinedTypeName","pathNode":{"id":78956,"name":"Storage","nameLocations":["20514:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"20514:7:157"},"referencedDeclaration":72524,"src":"20514:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78962,"mutability":"mutable","name":"_transitions","nameLocation":"20570:12:157","nodeType":"VariableDeclaration","scope":79049,"src":"20538:44:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$79978_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition[]"},"typeName":{"baseType":{"id":78960,"nodeType":"UserDefinedTypeName","pathNode":{"id":78959,"name":"Gear.StateTransition","nameLocations":["20538:4:157","20543:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79978,"src":"20538:20:157"},"referencedDeclaration":79978,"src":"20538:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$79978_storage_ptr","typeString":"struct Gear.StateTransition"}},"id":78961,"nodeType":"ArrayTypeName","src":"20538:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$79978_storage_$dyn_storage_ptr","typeString":"struct Gear.StateTransition[]"}},"visibility":"internal"}],"src":"20513:70:157"},"returnParameters":{"id":78966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78965,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":79049,"src":"20617:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78964,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20617:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"20616:9:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":79160,"nodeType":"FunctionDefinition","src":"21418:1428:157","nodes":[],"body":{"id":79159,"nodeType":"Block","src":"21701:1145:157","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":79068,"name":"_newAggregatedPublicKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79055,"src":"22091:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_memory_ptr","typeString":"struct Gear.AggregatedPublicKey memory"}},"id":79069,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22115:1:157","memberName":"x","nodeType":"MemberAccess","referencedDeclaration":79780,"src":"22091:25:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":79070,"name":"_newAggregatedPublicKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79055,"src":"22118:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_memory_ptr","typeString":"struct Gear.AggregatedPublicKey memory"}},"id":79071,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22142:1:157","memberName":"y","nodeType":"MemberAccess","referencedDeclaration":79782,"src":"22118:25:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":79066,"name":"FROST","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40134,"src":"22068:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FROST_$40134_$","typeString":"type(library FROST)"}},"id":79067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22074:16:157","memberName":"isValidPublicKey","nodeType":"MemberAccess","referencedDeclaration":39803,"src":"22068:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":79072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22068:76:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"46524f53542061676772656761746564207075626c6963206b657920697320696e76616c6964","id":79073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22158:40:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_3f8442e6e9a2e78e0eb0bfd4d9e8fbfdf4df694fbcd43d738916f45cee84e537","typeString":"literal_string \"FROST aggregated public key is invalid\""},"value":"FROST aggregated public key is invalid"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3f8442e6e9a2e78e0eb0bfd4d9e8fbfdf4df694fbcd43d738916f45cee84e537","typeString":"literal_string \"FROST aggregated public key is invalid\""}],"id":79065,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"22047:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22047:161:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79075,"nodeType":"ExpressionStatement","src":"22047:161:157"},{"expression":{"id":79080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":79076,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79052,"src":"22218:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22230:19:157","memberName":"aggregatedPublicKey","nodeType":"MemberAccess","referencedDeclaration":79786,"src":"22218:31:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":79079,"name":"_newAggregatedPublicKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79055,"src":"22252:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_memory_ptr","typeString":"struct Gear.AggregatedPublicKey memory"}},"src":"22218:57:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"}},"id":79081,"nodeType":"ExpressionStatement","src":"22218:57:157"},{"expression":{"id":79089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":79082,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79052,"src":"22285:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22297:40:157","memberName":"verifiableSecretSharingCommitmentPointer","nodeType":"MemberAccess","referencedDeclaration":79788,"src":"22285:52:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":79087,"name":"_verifiableSecretSharingCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79057,"src":"22354:34:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":79085,"name":"SSTORE2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81302,"src":"22340:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SSTORE2_$81302_$","typeString":"type(library SSTORE2)"}},"id":79086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22348:5:157","memberName":"write","nodeType":"MemberAccess","referencedDeclaration":81209,"src":"22340:13:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (bytes memory) returns (address)"}},"id":79088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22340:49:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22285:104:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":79090,"nodeType":"ExpressionStatement","src":"22285:104:157"},{"body":{"id":79118,"nodeType":"Block","src":"22453:114:157","statements":[{"assignments":[79104],"declarations":[{"constant":false,"id":79104,"mutability":"mutable","name":"_validator","nameLocation":"22475:10:157","nodeType":"VariableDeclaration","scope":79118,"src":"22467:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79103,"name":"address","nodeType":"ElementaryTypeName","src":"22467:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":79109,"initialValue":{"baseExpression":{"expression":{"id":79105,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79052,"src":"22488:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79106,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22500:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79795,"src":"22488:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":79108,"indexExpression":{"id":79107,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79092,"src":"22505:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22488:19:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"22467:40:157"},{"expression":{"id":79116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":79110,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79052,"src":"22521:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22533:3:157","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":79792,"src":"22521:15:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":79114,"indexExpression":{"id":79112,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79104,"src":"22537:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22521:27:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":79115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"22551:5:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"22521:35:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79117,"nodeType":"ExpressionStatement","src":"22521:35:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":79095,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79092,"src":"22419:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":79096,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79052,"src":"22423:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22435:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79795,"src":"22423:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":79098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22440:6:157","memberName":"length","nodeType":"MemberAccess","src":"22423:23:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22419:27:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79119,"initializationExpression":{"assignments":[79092],"declarations":[{"constant":false,"id":79092,"mutability":"mutable","name":"i","nameLocation":"22412:1:157","nodeType":"VariableDeclaration","scope":79119,"src":"22404:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79091,"name":"uint256","nodeType":"ElementaryTypeName","src":"22404:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":79094,"initialValue":{"hexValue":"30","id":79093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22416:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"22404:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":79101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"22448:3:157","subExpression":{"id":79100,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79092,"src":"22448:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":79102,"nodeType":"ExpressionStatement","src":"22448:3:157"},"nodeType":"ForStatement","src":"22399:168:157"},{"body":{"id":79145,"nodeType":"Block","src":"22628:111:157","statements":[{"assignments":[79132],"declarations":[{"constant":false,"id":79132,"mutability":"mutable","name":"_validator","nameLocation":"22650:10:157","nodeType":"VariableDeclaration","scope":79145,"src":"22642:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79131,"name":"address","nodeType":"ElementaryTypeName","src":"22642:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":79136,"initialValue":{"baseExpression":{"id":79133,"name":"_newValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79060,"src":"22663:14:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":79135,"indexExpression":{"id":79134,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79121,"src":"22678:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22663:17:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"22642:38:157"},{"expression":{"id":79143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":79137,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79052,"src":"22694:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22706:3:157","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":79792,"src":"22694:15:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":79141,"indexExpression":{"id":79139,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79132,"src":"22710:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22694:27:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":79142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"22724:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"22694:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79144,"nodeType":"ExpressionStatement","src":"22694:34:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":79124,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79121,"src":"22596:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":79125,"name":"_newValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79060,"src":"22600:14:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":79126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22615:6:157","memberName":"length","nodeType":"MemberAccess","src":"22600:21:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22596:25:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79146,"initializationExpression":{"assignments":[79121],"declarations":[{"constant":false,"id":79121,"mutability":"mutable","name":"i","nameLocation":"22589:1:157","nodeType":"VariableDeclaration","scope":79146,"src":"22581:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79120,"name":"uint256","nodeType":"ElementaryTypeName","src":"22581:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":79123,"initialValue":{"hexValue":"30","id":79122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22593:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"22581:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":79129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"22623:3:157","subExpression":{"id":79128,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79121,"src":"22623:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":79130,"nodeType":"ExpressionStatement","src":"22623:3:157"},"nodeType":"ForStatement","src":"22576:163:157"},{"expression":{"id":79151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":79147,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79052,"src":"22748:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22760:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79795,"src":"22748:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":79150,"name":"_newValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79060,"src":"22767:14:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"22748:33:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":79152,"nodeType":"ExpressionStatement","src":"22748:33:157"},{"expression":{"id":79157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":79153,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79052,"src":"22791:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22803:16:157","memberName":"useFromTimestamp","nodeType":"MemberAccess","referencedDeclaration":79797,"src":"22791:28:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":79156,"name":"_useFromTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79062,"src":"22822:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22791:48:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":79158,"nodeType":"ExpressionStatement","src":"22791:48:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_resetValidators","nameLocation":"21427:16:157","parameters":{"id":79063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79052,"mutability":"mutable","name":"_validators","nameLocation":"21477:11:157","nodeType":"VariableDeclaration","scope":79160,"src":"21453:35:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators"},"typeName":{"id":79051,"nodeType":"UserDefinedTypeName","pathNode":{"id":79050,"name":"Gear.Validators","nameLocations":["21453:4:157","21458:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":79798,"src":"21453:15:157"},"referencedDeclaration":79798,"src":"21453:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79798_storage_ptr","typeString":"struct Gear.Validators"}},"visibility":"internal"},{"constant":false,"id":79055,"mutability":"mutable","name":"_newAggregatedPublicKey","nameLocation":"21530:23:157","nodeType":"VariableDeclaration","scope":79160,"src":"21498:55:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_memory_ptr","typeString":"struct Gear.AggregatedPublicKey"},"typeName":{"id":79054,"nodeType":"UserDefinedTypeName","pathNode":{"id":79053,"name":"Gear.AggregatedPublicKey","nameLocations":["21498:4:157","21503:19:157"],"nodeType":"IdentifierPath","referencedDeclaration":79783,"src":"21498:24:157"},"referencedDeclaration":79783,"src":"21498:24:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79783_storage_ptr","typeString":"struct Gear.AggregatedPublicKey"}},"visibility":"internal"},{"constant":false,"id":79057,"mutability":"mutable","name":"_verifiableSecretSharingCommitment","nameLocation":"21576:34:157","nodeType":"VariableDeclaration","scope":79160,"src":"21563:47:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":79056,"name":"bytes","nodeType":"ElementaryTypeName","src":"21563:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":79060,"mutability":"mutable","name":"_newValidators","nameLocation":"21637:14:157","nodeType":"VariableDeclaration","scope":79160,"src":"21620:31:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":79058,"name":"address","nodeType":"ElementaryTypeName","src":"21620:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":79059,"nodeType":"ArrayTypeName","src":"21620:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":79062,"mutability":"mutable","name":"_useFromTimestamp","nameLocation":"21669:17:157","nodeType":"VariableDeclaration","scope":79160,"src":"21661:25:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79061,"name":"uint256","nodeType":"ElementaryTypeName","src":"21661:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21443:249:157"},"returnParameters":{"id":79064,"nodeType":"ParameterList","parameters":[],"src":"21701:0:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":79173,"nodeType":"FunctionDefinition","src":"22852:192:157","nodes":[],"body":{"id":79172,"nodeType":"Block","src":"22917:127:157","nodes":[],"statements":[{"assignments":[79167],"declarations":[{"constant":false,"id":79167,"mutability":"mutable","name":"slot","nameLocation":"22935:4:157","nodeType":"VariableDeclaration","scope":79172,"src":"22927:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":79166,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22927:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":79170,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":79168,"name":"_getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79185,"src":"22942:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":79169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22942:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"22927:32:157"},{"AST":{"nativeSrc":"22995:43:157","nodeType":"YulBlock","src":"22995:43:157","statements":[{"nativeSrc":"23009:19:157","nodeType":"YulAssignment","src":"23009:19:157","value":{"name":"slot","nativeSrc":"23024:4:157","nodeType":"YulIdentifier","src":"23024:4:157"},"variableNames":[{"name":"router.slot","nativeSrc":"23009:11:157","nodeType":"YulIdentifier","src":"23009:11:157"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":79164,"isOffset":false,"isSlot":true,"src":"23009:11:157","suffix":"slot","valueSize":1},{"declaration":79167,"isOffset":false,"isSlot":false,"src":"23024:4:157","valueSize":1}],"flags":["memory-safe"],"id":79171,"nodeType":"InlineAssembly","src":"22970:68:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_router","nameLocation":"22861:7:157","parameters":{"id":79161,"nodeType":"ParameterList","parameters":[],"src":"22868:2:157"},"returnParameters":{"id":79165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79164,"mutability":"mutable","name":"router","nameLocation":"22909:6:157","nodeType":"VariableDeclaration","scope":79173,"src":"22893:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":79163,"nodeType":"UserDefinedTypeName","pathNode":{"id":79162,"name":"Storage","nameLocations":["22893:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"22893:7:157"},"referencedDeclaration":72524,"src":"22893:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"22892:24:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":79185,"nodeType":"FunctionDefinition","src":"23050:128:157","nodes":[],"body":{"id":79184,"nodeType":"Block","src":"23108:70:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":79180,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77286,"src":"23152:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":79178,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"23125:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":79179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23137:14:157","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":47773,"src":"23125:26:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$47728_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":79181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23125:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$47728_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":79182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23166:5:157","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47727,"src":"23125:46:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":79177,"id":79183,"nodeType":"Return","src":"23118:53:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorageSlot","nameLocation":"23059:15:157","parameters":{"id":79174,"nodeType":"ParameterList","parameters":[],"src":"23074:2:157"},"returnParameters":{"id":79177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79176,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":79185,"src":"23099:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":79175,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23099:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"23098:9:157"},"scope":79288,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":79234,"nodeType":"FunctionDefinition","src":"23184:292:157","nodes":[],"body":{"id":79233,"nodeType":"Block","src":"23252:224:157","nodes":[],"statements":[{"assignments":[79193],"declarations":[{"constant":false,"id":79193,"mutability":"mutable","name":"slot","nameLocation":"23270:4:157","nodeType":"VariableDeclaration","scope":79233,"src":"23262:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":79192,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23262:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":79219,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":79218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":79202,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79187,"src":"23322:9:157","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23316:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":79200,"name":"bytes","nodeType":"ElementaryTypeName","src":"23316:5:157","typeDescriptions":{}}},"id":79203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23316:16:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":79199,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23306:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":79204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23306:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":79198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23298:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":79197,"name":"uint256","nodeType":"ElementaryTypeName","src":"23298:7:157","typeDescriptions":{}}},"id":79205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23298:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":79206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23337:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23298:40:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":79195,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"23287:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":79196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23291:6:157","memberName":"encode","nodeType":"MemberAccess","src":"23287:10:157","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":79208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23287:52:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":79194,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23277:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":79209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23277:63:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":79217,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23343:23:157","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":79214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23360:4:157","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":79213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23352:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":79212,"name":"uint256","nodeType":"ElementaryTypeName","src":"23352:7:157","typeDescriptions":{}}},"id":79215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23352:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":79211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23344:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":79210,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23344:7:157","typeDescriptions":{}}},"id":79216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23344:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23277:89:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"23262:104:157"},{"expression":{"id":79227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":79223,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77286,"src":"23403:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":79220,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"23376:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":79222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23388:14:157","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":47773,"src":"23376:26:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$47728_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":79224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23376:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$47728_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":79225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23417:5:157","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47727,"src":"23376:46:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":79226,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79193,"src":"23425:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23376:53:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":79228,"nodeType":"ExpressionStatement","src":"23376:53:157"},{"eventCall":{"arguments":[{"id":79230,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79193,"src":"23464:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":79229,"name":"StorageSlotChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72570,"src":"23445:18:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":79231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23445:24:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79232,"nodeType":"EmitStatement","src":"23440:29:157"}]},"implemented":true,"kind":"function","modifiers":[{"id":79190,"kind":"modifierInvocation","modifierName":{"id":79189,"name":"onlyOwner","nameLocations":["23242:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"23242:9:157"},"nodeType":"ModifierInvocation","src":"23242:9:157"}],"name":"_setStorageSlot","nameLocation":"23193:15:157","parameters":{"id":79188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79187,"mutability":"mutable","name":"namespace","nameLocation":"23223:9:157","nodeType":"VariableDeclaration","scope":79234,"src":"23209:23:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":79186,"name":"string","nodeType":"ElementaryTypeName","src":"23209:6:157","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"23208:25:157"},"returnParameters":{"id":79191,"nodeType":"ParameterList","parameters":[],"src":"23252:0:157"},"scope":79288,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":79287,"nodeType":"FunctionDefinition","src":"23482:453:157","nodes":[],"body":{"id":79286,"nodeType":"Block","src":"23509:426:157","nodes":[],"statements":[{"assignments":[79239],"declarations":[{"constant":false,"id":79239,"mutability":"mutable","name":"router","nameLocation":"23535:6:157","nodeType":"VariableDeclaration","scope":79286,"src":"23519:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":79238,"nodeType":"UserDefinedTypeName","pathNode":{"id":79237,"name":"Storage","nameLocations":["23519:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"23519:7:157"},"referencedDeclaration":72524,"src":"23519:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":79242,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":79240,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79173,"src":"23544:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":79241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23544:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"23519:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":79251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":79244,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79239,"src":"23571:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":79245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23578:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"23571:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79923_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":79246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23591:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79918,"src":"23571:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":79249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23607:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":79248,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23599:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":79247,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23599:7:157","typeDescriptions":{}}},"id":79250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23599:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23571:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":79252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23611:58:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":79243,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23563:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23563:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79254,"nodeType":"ExpressionStatement","src":"23563:107:157"},{"assignments":[79256],"declarations":[{"constant":false,"id":79256,"mutability":"mutable","name":"value","nameLocation":"23689:5:157","nodeType":"VariableDeclaration","scope":79286,"src":"23681:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":79255,"name":"uint128","nodeType":"ElementaryTypeName","src":"23681:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":79262,"initialValue":{"arguments":[{"expression":{"id":79259,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"23705:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":79260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23709:5:157","memberName":"value","nodeType":"MemberAccess","src":"23705:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":79258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23697:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":79257,"name":"uint128","nodeType":"ElementaryTypeName","src":"23697:7:157","typeDescriptions":{}}},"id":79261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23697:18:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"23681:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":79266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":79264,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79256,"src":"23733:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":79265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23741:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23733:9:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7a65726f2076616c7565207472616e73666572206973206e6f7420616c6c6f776564","id":79267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23744:36:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_f7a6530933b32b30d79302830020ea8cc92847db1df753a7ac689c2d472f0507","typeString":"literal_string \"zero value transfer is not allowed\""},"value":"zero value transfer is not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f7a6530933b32b30d79302830020ea8cc92847db1df753a7ac689c2d472f0507","typeString":"literal_string \"zero value transfer is not allowed\""}],"id":79263,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23725:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23725:56:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79269,"nodeType":"ExpressionStatement","src":"23725:56:157"},{"assignments":[79271],"declarations":[{"constant":false,"id":79271,"mutability":"mutable","name":"actorId","nameLocation":"23800:7:157","nodeType":"VariableDeclaration","scope":79286,"src":"23792:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79270,"name":"address","nodeType":"ElementaryTypeName","src":"23792:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":79274,"initialValue":{"expression":{"id":79272,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"23810:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":79273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23814:6:157","memberName":"sender","nodeType":"MemberAccess","src":"23810:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"23792:28:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":79282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":79276,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79239,"src":"23838:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":79277,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23845:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"23838:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79951_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":79278,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23858:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79946,"src":"23838:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":79280,"indexExpression":{"id":79279,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79271,"src":"23867:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23838:37:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":79281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23879:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23838:42:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420726563656976652045746865722066726f6d20756e6b6e6f776e2070726f6772616d","id":79283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23882:45:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_8476f5ea94bf35ebead1d2341b39983f42ba677e9e678a8b8a61ec7d7a28d944","typeString":"literal_string \"couldn't receive Ether from unknown program\""},"value":"couldn't receive Ether from unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8476f5ea94bf35ebead1d2341b39983f42ba677e9e678a8b8a61ec7d7a28d944","typeString":"literal_string \"couldn't receive Ether from unknown program\""}],"id":79275,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23830:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23830:98:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79285,"nodeType":"ExpressionStatement","src":"23830:98:157"}]},"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":79235,"nodeType":"ParameterList","parameters":[],"src":"23489:2:157"},"returnParameters":{"id":79236,"nodeType":"ParameterList","parameters":[],"src":"23509:0:157"},"scope":79288,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":77278,"name":"IRouter","nameLocations":["848:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72764,"src":"848:7:157"},"id":77279,"nodeType":"InheritanceSpecifier","src":"848:7:157"},{"baseName":{"id":77280,"name":"OwnableUpgradeable","nameLocations":["857:18:157"],"nodeType":"IdentifierPath","referencedDeclaration":41409,"src":"857:18:157"},"id":77281,"nodeType":"InheritanceSpecifier","src":"857:18:157"},{"baseName":{"id":77282,"name":"ReentrancyGuardTransientUpgradeable","nameLocations":["877:35:157"],"nodeType":"IdentifierPath","referencedDeclaration":42870,"src":"877:35:157"},"id":77283,"nodeType":"InheritanceSpecifier","src":"877:35:157"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[79288,42870,41409,42571,41677,72764],"name":"Router","nameLocation":"838:6:157","scope":79289,"usedErrors":[41245,41250,41426,41429,42802,49452,49457,49462],"usedEvents":[41256,41434,72529,72534,72541,72546,72551,72558,72565,72570]}],"license":"UNLICENSED"},"id":157} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"areValidators","inputs":[{"name":"_validators","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum Gear.CodeState"}],"stateMutability":"view"},{"type":"function","name":"codesStates","inputs":[{"name":"_codesIds","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint8[]","internalType":"enum Gear.CodeState[]"}],"stateMutability":"view"},{"type":"function","name":"commitBatch","inputs":[{"name":"_batch","type":"tuple","internalType":"struct Gear.BatchCommitment","components":[{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"blockTimestamp","type":"uint48","internalType":"uint48"},{"name":"previousCommittedBatchHash","type":"bytes32","internalType":"bytes32"},{"name":"expiry","type":"uint8","internalType":"uint8"},{"name":"chainCommitment","type":"tuple[]","internalType":"struct Gear.ChainCommitment[]","components":[{"name":"transitions","type":"tuple[]","internalType":"struct Gear.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"exited","type":"bool","internalType":"bool"},{"name":"inheritor","type":"address","internalType":"address"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueToReceiveNegativeSign","type":"bool","internalType":"bool"},{"name":"valueClaims","type":"tuple[]","internalType":"struct Gear.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct Gear.Message[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct Gear.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]},{"name":"call","type":"bool","internalType":"bool"}]}]},{"name":"head","type":"bytes32","internalType":"bytes32"}]},{"name":"codeCommitments","type":"tuple[]","internalType":"struct Gear.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"rewardsCommitment","type":"tuple[]","internalType":"struct Gear.RewardsCommitment[]","components":[{"name":"operators","type":"tuple","internalType":"struct Gear.OperatorRewardsCommitment","components":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"root","type":"bytes32","internalType":"bytes32"}]},{"name":"stakers","type":"tuple","internalType":"struct Gear.StakerRewardsCommitment","components":[{"name":"distribution","type":"tuple[]","internalType":"struct Gear.StakerRewards[]","components":[{"name":"vault","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"totalAmount","type":"uint256","internalType":"uint256"},{"name":"token","type":"address","internalType":"address"}]},{"name":"timestamp","type":"uint48","internalType":"uint48"}]},{"name":"validatorsCommitment","type":"tuple[]","internalType":"struct Gear.ValidatorsCommitment[]","components":[{"name":"aggregatedPublicKey","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"name":"verifiableSecretSharingCommitment","type":"bytes","internalType":"bytes"},{"name":"validators","type":"address[]","internalType":"address[]"},{"name":"eraIndex","type":"uint256","internalType":"uint256"}]}]},{"name":"_signatureType","type":"uint8","internalType":"enum Gear.SignatureType"},{"name":"_signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeSettings","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.ComputationSettings","components":[{"name":"threshold","type":"uint64","internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","internalType":"uint128"}]}],"stateMutability":"view"},{"type":"function","name":"createProgram","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_overrideInitializer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"createProgramWithAbiInterface","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_overrideInitializer","type":"address","internalType":"address"},{"name":"_abiInterface","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"genesisTimestamp","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_middleware","type":"address","internalType":"address"},{"name":"_eraDuration","type":"uint256","internalType":"uint256"},{"name":"_electionDuration","type":"uint256","internalType":"uint256"},{"name":"_validationDelay","type":"uint256","internalType":"uint256"},{"name":"_aggregatedPublicKey","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"name":"_verifiableSecretSharingCommitment","type":"bytes","internalType":"bytes"},{"name":"_validators","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isValidator","inputs":[{"name":"_validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"latestCommittedBatchHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"latestCommittedBatchTimestamp","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"lookupGenesisHash","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"middleware","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorImpl","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"_programId","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCodeIds","inputs":[{"name":"_programsIds","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"newMirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdFraction","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"},{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"storageView","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IRouter.StorageView","components":[{"name":"genesisBlock","type":"tuple","internalType":"struct Gear.GenesisBlockInfo","components":[{"name":"hash","type":"bytes32","internalType":"bytes32"},{"name":"number","type":"uint32","internalType":"uint32"},{"name":"timestamp","type":"uint48","internalType":"uint48"}]},{"name":"latestCommittedBatch","type":"tuple","internalType":"struct Gear.CommittedBatchInfo","components":[{"name":"hash","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint48","internalType":"uint48"}]},{"name":"implAddresses","type":"tuple","internalType":"struct Gear.AddressBook","components":[{"name":"mirror","type":"address","internalType":"address"},{"name":"wrappedVara","type":"address","internalType":"address"},{"name":"middleware","type":"address","internalType":"address"}]},{"name":"validationSettings","type":"tuple","internalType":"struct Gear.ValidationSettingsView","components":[{"name":"thresholdNumerator","type":"uint128","internalType":"uint128"},{"name":"thresholdDenominator","type":"uint128","internalType":"uint128"},{"name":"validators0","type":"tuple","internalType":"struct Gear.ValidatorsView","components":[{"name":"aggregatedPublicKey","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"name":"verifiableSecretSharingCommitmentPointer","type":"address","internalType":"address"},{"name":"list","type":"address[]","internalType":"address[]"},{"name":"useFromTimestamp","type":"uint256","internalType":"uint256"}]},{"name":"validators1","type":"tuple","internalType":"struct Gear.ValidatorsView","components":[{"name":"aggregatedPublicKey","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"name":"verifiableSecretSharingCommitmentPointer","type":"address","internalType":"address"},{"name":"list","type":"address[]","internalType":"address[]"},{"name":"useFromTimestamp","type":"uint256","internalType":"uint256"}]}]},{"name":"computeSettings","type":"tuple","internalType":"struct Gear.ComputationSettings","components":[{"name":"threshold","type":"uint64","internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","internalType":"uint128"}]},{"name":"timelines","type":"tuple","internalType":"struct Gear.Timelines","components":[{"name":"era","type":"uint256","internalType":"uint256"},{"name":"election","type":"uint256","internalType":"uint256"},{"name":"validationDelay","type":"uint256","internalType":"uint256"}]},{"name":"programsCount","type":"uint256","internalType":"uint256"},{"name":"validatedCodesCount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"timelines","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.Timelines","components":[{"name":"era","type":"uint256","internalType":"uint256"},{"name":"election","type":"uint256","internalType":"uint256"},{"name":"validationDelay","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validators","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsAggregatedPublicKey","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.AggregatedPublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsVerifiableSecretSharingCommitment","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"validatorsVssCommitmentHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"AnnouncesCommitted","inputs":[{"name":"head","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"BatchCommitted","inputs":[{"name":"hash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ComputationSettingsChanged","inputs":[{"name":"threshold","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProgramCreated","inputs":[{"name":"actorId","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[{"name":"slot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValidatorsCommittedForEra","inputs":[{"name":"eraIndex","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460aa575f516020614b105f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b604051614a6190816100af8239f35b6001600160401b0319166001600160401b039081175f516020614b105f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe608080604052600436101561010a575b50361561001a575f80fd5b5f516020614a215f395f51905f5254610038600182015415156129e8565b6001600160801b033416156100ba57335f908152601a9190910160205260409020541561006157005b60405162461bcd60e51b815260206004820152602b60248201527f636f756c646e277420726563656976652045746865722066726f6d20756e6b6e60448201526a6f776e2070726f6772616d60a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f7a65726f2076616c7565207472616e73666572206973206e6f7420616c6c6f77604482015261195960f21b6064820152608490fd5b5f905f3560e01c9081627a32e714612806575080630c18d2771461230e578063120e3f1e1461218257806328e24b3d146121545780633683c4d214611ec75780633b49d01114611e805780633bd109fa14611e315780633d43b41814611ddd57806353f7fd48146118245780636c2eb35014611492578063715018a61461142957806371a8cf2d146113fb57806382bdeaad146112e357806384d22a4f1461128557806388f50cf01461124c5780638b1edf1e146111815780638da5cb5b1461114c5780638f381dbe146111065780639067088e146110bd57806396a2ddfa1461108f5780639eb939a814611038578063a5d53a4414610fca578063b24fcac014610991578063baaf020114610890578063c13911e81461084c578063c2eb812f14610520578063ca1e7819146104d0578063cacf66ab14610498578063d456fd5114610462578063e3a6684f14610423578063e6fabc09146103ea578063ed612f8c146103b2578063edc872251461035d578063f2fde38b14610330578063f4f20ac0146102f75763facd743b0361000f57346102f45760203660031901126102f4576102b661285c565b60036102d15f516020614a215f395f51905f52544290614511565b019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b80fd5b50346102f457806003193601126102f4575f516020614a215f395f51905f5254600701546040516001600160a01b039091168152602090f35b50346102f45760203660031901126102f45761035a61034d61285c565b610355612e60565b612db2565b80f35b50346102f457806003193601126102f45760206103aa5f516020614a215f395f51905f5254600860046103904284614511565b0154910154906001600160801b038260801c9216906144e6565b604051908152f35b50346102f457806003193601126102f457602060046103e05f516020614a215f395f51905f52544290614511565b0154604051908152f35b50346102f457806003193601126102f4575f516020614a215f395f51905f5254600501546040516001600160a01b039091168152602090f35b50346102f457806003193601126102f457604060085f516020614a215f395f51905f525401548151906001600160801b038116825260801c6020820152f35b50346102f457806003193601126102f457602065ffffffffffff60045f516020614a215f395f51905f5254015416604051908152f35b50346102f457806003193601126102f457602065ffffffffffff60025f516020614a215f395f51905f52540154821c16604051908152f35b50346102f457806003193601126102f45761051c61050860046105025f516020614a215f395f51905f52544290614511565b01612ba7565b6040519182916020835260208301906128c3565b0390f35b50346102f457806003193601126102f45760405161053d81612990565b610545612ce0565b815260405161055381612975565b5f8152602081015f9052602082015261056a612ce0565b6040820152610577612d7f565b606082015260405161058881612975565b5f8082526020820152608082015261059e612ce0565b60a08201528160c082015260e001525f516020614a215f395f51905f52546105c4612d7f565b506105d160098201614783565b906105de600f8201614783565b600882015492604051936105f1856129ac565b6001600160801b038116855260801c602085015260408401526060830152601b81015490601c8101546040519261062784612990565b60405161063381612946565b60018401548152600284015463ffffffff8116602083015260201c65ffffffffffff16604082015284526040519461066a86612975565b60038401548652600484015465ffffffffffff166020870152602085019586526040519061069782612946565b60058501546001600160a01b0390811683526006860154811660208401526007860154166040808401919091528601918252606086019081526106dc60158601612c32565b94608087019586526016016106f090612cfe565b9160a0870192835260c0870193845260e087019485526040519788976020895251805160208a0152602081015163ffffffff1660408a01526040015165ffffffffffff16606089015251805160808901526020015165ffffffffffff1660a088015251600160a01b6001900381511660c0880152600160a01b6001900360208201511660e0880152600160a01b60019003906040015116610100870152516101208601610200905280516001600160801b031661022087015260208101516001600160801b031661024087015260408101516102608701608090526102a087016107d9916128ff565b90606001519061021f19878203016102808801526107f6916128ff565b935180516001600160401b0316610140870152602001516001600160801b031661016086015251805161018086015260208101516101a0860152604001516101c0850152516101e0840152516102008301520390f35b50346102f45760203660031901126102f45760ff604060209260195f516020614a215f395f51905f5254016004358252845220541661088e60405180926128b6565bf35b50346102f45760203660031901126102f4576004356001600160401b03811161098d576108c1903690600401612886565b905f516020614a215f395f51905f5254906108db83612b3c565b916108e960405193846129c7565b8383526108f584612b3c565b602084019490601f1901368637601a869201915b81811061095457868587604051928392602084019060208552518091526040840192915b81811061093b575050500390f35b825184528594506020938401939092019160010161092d565b8061096a6109656001938588612bfa565b612c60565b828060a01b03165f528360205260405f20546109868288612c1e565b5201610909565b5080fd5b50346102f45760603660031901126102f4576004356001600160401b03811161098d57806004019161010060031983360301126102f457600260243510156102f4576044356001600160401b03811161098d576109f2903690600401612886565b9390917f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610fbb5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f516020614a215f395f51905f525491610a5e600184015415156129e8565b825415610ee1575b60038301908154916044870135809303610e8e57600485019765ffffffffffff89541696602489019765ffffffffffff610a9f8a612d34565b1610610e0e57610ab484889b96999a9b613204565b98606095879b8c9a60a482019860198c019c5b610ad18b8b613765565b9190501015610c99578e610ae58b8b613765565b90911015610c85578f60ff8f926040908f9360061b01928335948582526020522054166003811015610c7157600103610c0e5760408f918f928f936020830194610b2e8661379a565b15610bf657601c928782526020528481209050600260ff1982541617905501610b578154612e23565b90555b610b638361379a565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208451878152a2360312610bf25791610be9916020600194610bb760405191610baf83612975565b8483526137a7565b91829101526040519060208201928352151560f81b604082015260218152610be06041826129c7565b519020906137b4565b9e019d8e610ac7565b8c80fd5b905083918682526020522060ff198154169055610b5a565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b8e52602160045260248efd5b634e487b7160e01b8c52603260045260248cfd5b8a9950926020610d9e998f948e9794610d939665ffffffffffff98858151910120610cc4858c613803565b91610ccf868d613d16565b93610ce56064610cde8c612d34565b9701612d26565b9060405196898801983589528d60d01b9060d01b166040880152604687015260ff60f81b9060f81b1660668601526067850152608784015260a783015260c782015260c78152610d3660e7826129c7565b5190208099610d4485612d34565b8760405191610d5283612975565b8483521693849101525584198254161790557f7ebe42360bcb182fe0a88148b081e4557c89d09aa6af8307635ac2f83e2aaa656020604051898152a1612d34565b16936024359161413c565b15610dc957807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b60405162461bcd60e51b815260206004820152604c60248201527f62617463682074696d657374616d70206d75737420626520677265617465722060448201527f6f7220657175616c20746f206c617465737420636f6d6d69747465642062617460648201526b063682074696d657374616d760a41b608482015260a490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d6974746564206261746368604482015264040d0c2e6d60db1b6064820152608490fd5b610ef7610ef060648701612d26565b823561316f565b15610f675765ffffffffffff610f0f60248701612d34565b164211610a665760405162461bcd60e51b815260206004820152602360248201527f62617463682074696d657374616d70206d75737420626520696e207468652070604482015262185cdd60ea1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b633ee5aeb560e01b8152600490fd5b50346102f457806003193601126102f457604061100b5f516020614a215f395f51905f5254600261100360018060a01b03924290614511565b015416612e31565b6020825193849282845280519283918282870152018585015e828201840152601f01601f19168101030190f35b50346102f457806003193601126102f457611051612ce0565b50606061106e60165f516020614a215f395f51905f525401612cfe565b61088e60405180926040809180518452602081015160208501520151910152565b50346102f457806003193601126102f4576020601b5f516020614a215f395f51905f52540154604051908152f35b50346102f45760203660031901126102f4576110d761285c565b601a5f516020614a215f395f51905f5254019060018060a01b03165f52602052602060405f2054604051908152f35b50346102f45760203660031901126102f457600435906001600160401b0382116102f457602061114261113c3660048601612886565b90612c74565b6040519015158152f35b50346102f457806003193601126102f4575f516020614a015f395f51905f52546040516001600160a01b039091168152602090f35b50346102f457806003193601126102f4575f516020614a215f395f51905f525460018101908154611207576002015463ffffffff16409081156111c2575580f35b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b50346102f457806003193601126102f4575f516020614a215f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346102f457806003193601126102f45761129e612a5a565b5060406112bb60155f516020614a215f395f51905f525401612c32565b61088e825180926001600160801b03602080926001600160401b038151168552015116910152565b50346102f45760203660031901126102f4576004356001600160401b03811161098d57611314903690600401612886565b905f516020614a215f395f51905f52549061132e83612b3c565b9161133c60405193846129c7565b83835261134884612b3c565b602084019490601f19013686376019869201915b8181106113b157868587604051928392602084019060208552518091526040840192915b81811061138e575050500390f35b91935091602080826113a360019488516128b6565b019401910191849392611380565b6113bc818386612bfa565b3587528260205260ff6040882054166113d58287612c1e565b60038210156113e7575260010161135c565b634e487b7160e01b89526021600452602489fd5b50346102f457806003193601126102f457602060035f516020614a215f395f51905f52540154604051908152f35b50346102f457806003193601126102f457611442612e60565b5f516020614a015f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102f457806003193601126102f4575f516020614a415f395f51905f525460ff8160401c1690811561180f575b50611800575f516020614a415f395f51905f52805468ffffffffffffffffff1916680100000000000000021790555f516020614a015f395f51905f525461151b906001600160a01b031661151361452d565b61035561452d565b5f516020614a215f395f51905f5254604090815161153983826129c7565b6017815260208101907f726f757465722e73746f726167652e526f757465725632000000000000000000825261156d612e60565b5190205f1981019081116117ec57916020917fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2938251908482019081528482526115b784836129c7565b60ff19915190201690815f516020614a215f395f51905f52557f059eb9adf6e95b839d818142ed5bd5e498b6d95138e65c91525e93cc0f0339fc848451848152a1611600612e93565b80516001840155600283019063ffffffff868201511669ffffffffffff00000000868454930151881b169169ffffffffffffffffffff19161717905560058101600583019080820361179e575b5050600881016001600160801b038154169060088401916001600160801b0319835416178255546001600160801b0382549181191691161790556116d66116944283614511565b6116ab6001600160a01b0360026110034287614511565b6116c160046116ba4287614511565b0192612a72565b906116cc4293612ba7565b9160098701612edb565b60158101601583019080820361174c575b505060168101601683019181830361172c575b5050505060ff60401b195f516020614a415f395f51905f5254165f516020614a415f395f51905f52555160028152a180f35b60189283925490556017810154601785015501549101555f8080806116fa565b806001600160401b03806001600160801b03935416166001600160401b031984541617835554851c16600160401b600160c01b03825491861b1690600160401b600160c01b0319161790555f806116e7565b5481546001600160a01b03199081166001600160a01b039283161790925560068381015490850180548416918316919091179055600780840154908501805490931691161790555f8061164d565b634e487b7160e01b84526011600452602484fd5b63f92ee8a960e01b8152600490fd5b600291506001600160401b031610155f6114c1565b50346102f4576101603660031901126102f45761183f61285c565b6024356001600160a01b0381169190829003611dd95761185d612830565b611865612846565b60c435916084359160a43560403660e3190112611dd55761012435946001600160401b038611611dd15736602387011215611dd1578560040135916001600160401b038311611dcd573660248489010111611dcd57610144356001600160401b038111611dc9576118da903690600401612886565b9690945f516020614a415f395f51905f5254996001600160401b0360ff8c60401c16159b1680159081611dc1575b6001149081611db7575b159081611dae575b50611d9f5761195c908b60016001600160401b03195f516020614a415f395f51905f525416175f516020614a415f395f51905f5255611d6f575b61151361452d565b61196461452d565b4215611d19578215611cc35782821115611c6257600a6119848484612a90565b04841015611c1d5760409a8b5161199b8d826129c7565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526119cf612e60565b5190205f198101908111611c09578c51602080820192835281528d9392916119f785836129c7565b60ff19915190201698895f516020614a215f395f51905f525583518a815260207f059eb9adf6e95b839d818142ed5bd5e498b6d95138e65c91525e93cc0f0339fc91a1611a42612e93565b805160018c015560028b0190602081015163ffffffff1686835492015160201b69ffffffffffff00000000169169ffffffffffffffffffff191617179055835190611a8c82612946565b8282526001600160a01b03908116602083018190529381169490910184905260058a018054919092166001600160a01b031991821617909155600689018054821690921790915560078801805490911690911790557003000000000000000000000000000000026008870155611b00612a5a565b508951611b0c81612975565b639502f90081526509184e72a0006020909101526015860180546001600160c01b0319166d09184e72a000000000009502f900179055895183908b90611b5181612946565b8381528460208201520152601686015560178501556018840155865194611b7786612975565b60e4358652610104356020870152611b93913691602401612af7565b9042933690611ba192612b53565b9160090193611baf94612edb565b611bb7575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f516020614a415f395f51905f5254165f516020614a415f395f51905f52555160018152a180f35b634e487b7160e01b8e52601160045260248efd5b60405162461bcd60e51b815260206004820152601b60248201527f76616c69646174696f6e2064656c617920697320746f6f2062696700000000006044820152606490fd5b60405162461bcd60e51b815260206004820152603360248201527f657261206475726174696f6e206d757374206265206772656174657220746861604482015272371032b632b1ba34b7b710323ab930ba34b7b760691b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f656c656374696f6e206475726174696f6e206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f63757272656e742074696d657374616d70206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b600160401b60ff60401b195f516020614a415f395f51905f525416175f516020614a415f395f51905f5255611954565b63f92ee8a960e01b8d5260048dfd5b9050155f61191a565b303b159150611912565b8c9150611908565b8a80fd5b8980fd5b8880fd5b8780fd5b8280fd5b50346102f45760203660031901126102f457611df761285c565b611dff612e60565b5f516020614a215f395f51905f525460050180546001600160a01b0319166001600160a01b0390921691909117905580f35b50346102f457806003193601126102f457611e4a612a5a565b506040611e6e611e695f516020614a215f395f51905f52544290614511565b612a72565b60208251918051835201516020820152f35b50346102f457806003193601126102f4576020611eb95f516020614a215f395f51905f5254600261100360018060a01b03924290614511565b818151910120604051908152f35b50346102f45760603660031901126102f457600435611ee4612830565b5f516020614a215f395f51905f5254611f02600182015415156129e8565b8284526019810160205260ff6040852054166003811015612140576002036120e4576040516020810190848252602435604082015260408152611f466060826129c7565b51902060405160608101908082106001600160401b038311176120e057605a916040527f3d605080600a3d3981f3608060405263e6fabc0960e01b5f5260205f6004817381523060601b6b5afa15604c575f80805136821760208201527f80378136915af43d5f803e156048573d5ff35b3d5ffd5b5f80fd000000000000604082015286f59081156120dc576001600160a01b0382165f908152601a820160205260409020849055601b018054611ffc90612e23565b90556040516001600160a01b03821680825293907f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a2506001600160a01b0381166120d75750335b5f516020614a215f395f51905f5254600501546001600160a01b0316823b156120d357604051631c9776b560e31b81526001600160a01b039092166004830152602482015260016044820152828160648183865af180156120c8576120b3575b602082604051908152f35b6120be8380926129c7565b61098d57816120a8565b6040513d85823e3d90fd5b8380fd5b612048565b8480fd5b8680fd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b85526021600452602485fd5b50346102f457806003193601126102f457602060015f516020614a215f395f51905f52540154604051908152f35b50346102f45760203660031901126102f4576004358149156122925760195f516020614a215f395f51905f52546121be600182015415156129e8565b018183528060205260ff604084205416600381101561227e5761221d5781835260209081526040808420805460ff19166001179055519182527f5c261a095dd5720475295dc06379921c003c22164ee6cae5cf83e76ce0a1b98591a180f35b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b634e487b7160e01b84526021600452602484fd5b60405162461bcd60e51b815260206004820152604860248201527f626c6f622063616e277420626520666f756e642c20726f75746572206578706560448201527f63746564204549502d34383434207472616e73616374696f6e2077697468205760648201526720a9a690313637b160c11b608482015260a490fd5b346127e85760803660031901126127e85760043561232a612830565b90612333612846565b915f516020614a215f395f51905f5254612352600182015415156129e8565b825f526019810160205260ff60405f20541660038110156127f2576002036120e45760405160208101908482526024356040820152604081526123966060826129c7565b5190206040516102c08101908082106001600160401b038311176127e8576102b0916040527f60808060405261029e90816100128239f3fe608060405260043610610254575f81527f3560e01c806336a52a18146100ab57806342129d00146100a65780635ce6c32760208201527f146100a1578063701da98e1461009c578063704ed542146100975780637a8e0c60408201527fdd1461009257806391d5a64c1461008d5780639ce110d714610088578063affe60608201527fd0e0146100835763e43f3433036102545761023f565b610222565b6101fa565b60808201527f6101e4565b6101b1565b610181565b610165565b610143565b610106565b346160a08201527ed4575f3660031901126100d45760025460081c6001600160a01b031660809060c08201527f8152602090f35b5f80fd5b9181601f840112156100d45782359167ffffffffff60e08201527fffffff83116100d457602083818601950101116100d457565b604036600319016101008201527f126100d45760043567ffffffffffffffff81116100d4576101329036906004016101208201527f6100d8565b505060243580151514610254575f80fd5b346100d4575f366003196101408201527f01126100d457602060ff600254166040519015158152f35b346100d4575f36606101608201527f031901126100d45760205f54604051908152f35b346100d457602036600319016101808201527f126100d4576004356fffffffffffffffffffffffffffffffff811614610254576101a08201527f5f80fd5b60403660031901126100d45760243567ffffffffffffffff811161006101c08201527fd4576101dd9036906004016100d8565b5050610254565b346100d457602036606101e08201527f0319011215610254575f80fd5b346100d4575f3660031901126100d4576003546102008201527f6040516001600160a01b039091168152602090f35b346100d4575f36600319016102208201527f126100d4576020600154604051908152f35b346100d4575f36600319011215616102408201523060601c7f0254575f80fd5b63e6fabc0960e01b5f5260205f60048173000000000000000017610260820152735afa156100d4575f808051368280378136915af43060a01b176102808201526f3d5f803e1561029a573d5ff35b3d5ffd60801b6102a08201525ff59081156127e8576001600160a01b0382165f908152601a820160205260409020849055601b01805461272d90612e23565b90556040516001600160a01b03821680825293907f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a2506001600160a01b0381166127ec575033915b813b156127e857604051631c9776b560e31b81526001600160a01b039384166004820152921660248301525f604483018190528260648183855af19182156127dd576020926127cd575b50604051908152f35b5f6127d7916129c7565b5f6127c4565b6040513d5f823e3d90fd5b5f80fd5b9161277a565b634e487b7160e01b5f52602160045260245ffd5b346127e8575f3660031901126127e857602090601c5f516020614a215f395f51905f525401548152f35b604435906001600160a01b03821682036127e857565b606435906001600160a01b03821682036127e857565b600435906001600160a01b03821682036127e857565b35906001600160a01b03821682036127e857565b9181601f840112156127e8578235916001600160401b0383116127e8576020808501948460051b0101116127e857565b9060038210156127f25752565b90602080835192838152019201905f5b8181106128e05750505090565b82516001600160a01b03168452602093840193909201916001016128d3565b9060208251805183520151602082015260018060a01b0360208301511660408201526080606061293d604085015160a08386015260a08501906128c3565b93015191015290565b606081019081106001600160401b0382111761296157604052565b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b0382111761296157604052565b61010081019081106001600160401b0382111761296157604052565b608081019081106001600160401b0382111761296157604052565b90601f801991011681019081106001600160401b0382111761296157604052565b156129ef57565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b60405190612a6782612975565b5f6020838281520152565b90604051612a7f81612975565b602060018294805484520154910152565b91908203918211612a9d57565b634e487b7160e01b5f52601160045260245ffd5b8115612abb570490565b634e487b7160e01b5f52601260045260245ffd5b91908260409103126127e857604051612ae781612975565b6020808294803584520135910152565b9291926001600160401b0382116129615760405191612b20601f8201601f1916602001846129c7565b8294818452818301116127e8578281602093845f960137010152565b6001600160401b0381116129615760051b60200190565b929190612b5f81612b3c565b93612b6d60405195866129c7565b602085838152019160051b81019283116127e857905b828210612b8f57505050565b60208091612b9c84612872565b815201910190612b83565b90604051918281549182825260208201905f5260205f20925f5b818110612bd8575050612bd6925003836129c7565b565b84546001600160a01b0316835260019485019487945060209093019201612bc1565b9190811015612c0a5760051b0190565b634e487b7160e01b5f52603260045260245ffd5b8051821015612c0a5760209160051b010190565b90604051612c3f81612975565b91546001600160401b038116835260401c6001600160801b03166020830152565b356001600160a01b03811681036127e85790565b612c8d5f516020614a215f395f51905f52544290614511565b600301905f5b838110612ca35750505050600190565b612cb1610965828685612bfa565b6001600160a01b03165f9081526020849052604090205460ff1615612cd857600101612c93565b505050505f90565b60405190612ced82612946565b5f6040838281528260208201520152565b90604051612d0b81612946565b60406002829480548452600181015460208501520154910152565b3560ff811681036127e85790565b3565ffffffffffff811681036127e85790565b60405190612d54826129ac565b5f606083604051612d6481612975565b83815283602082015281528260208201528160408201520152565b60405190612d8c826129ac565b815f81525f6020820152612d9e612d47565b60408201526060612dad612d47565b910152565b6001600160a01b03168015612e10575f516020614a015f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f198114612a9d5760010190565b803b905f19820190828211612a9d5760019060405193603e601f19910116840160405282845260208401903c90565b5f516020614a015f395f51905f52546001600160a01b03163303612e8057565b63118cdaa760e01b5f523360045260245ffd5b612e9b612ce0565b50604051612ea881612946565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b81810292918115918404141715612a9d57565b9291908051906020810191825170014551231950b75fc4402da1732fc9bebe198210918261315e575b50501561310a5751845551600184015560405190612f476021836020808201945f86528051918291018484015e81015f838201520301601f1981018452836129c7565b612f84602b604051809360208201956a600b5981380380925939f360a81b87525180918484015e81015f838201520301601f1981018352826129c7565b51905ff06001600160a01b038116156130d1576002830180546001600160a01b0319166001600160a01b039092169190911790555f5b600483018054821015612ff8575f90815260208082208301546001600160a01b0316825260038501905260409020805460ff19169055600101612fba565b5050925f5b8451811015613041576001906001600160a01b0361301b8288612c1e565b5116828060a01b03165f526003840160205260405f208260ff1982541617905501612ffd565b5092600482018151916001600160401b03831161296157600160401b83116129615781548383558084106130ab575b50602001905f5260205f205f5b83811061308e575050505060050155565b82516001600160a01b03168183015560209092019160010161307d565b825f528360205f2091820191015b8181106130c65750613070565b5f81556001016130b9565b60405162461bcd60e51b81526020600482015260116024820152701111541313d65351539517d19052531151607a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602660248201527f46524f53542061676772656761746564207075626c6963206b657920697320696044820152651b9d985b1a5960d21b6064820152608490fd5b613168925061495b565b5f80612f04565b435f1981019392908411612a9d5760ff164381106131bf57505f925b8381101561319b575b505f925050565b80408281036131ad5750600193505050565b156131ba575f190161318b565b613194565b6131c99043612a90565b9261318b565b903590601e19813603018212156127e857018035906001600160401b0382116127e857602001918160051b360383136127e857565b9060808101600161321582846131cf565b9050116137035761322681836131cf565b9050156136dc57613236916131cf565b15612c0a57803590603e19813603018212156127e857019161325883806131cf565b92906060925f95601a60fe19843603019401945b86881015613679578760051b840135858112156127e857840161328e81612c60565b6001600160a01b03165f908152602088905260409020541561361c575f608082016001600160801b036132c082614558565b16151580613609575b6135f8575b6001600160a01b036132df84612c60565b604051630427a21d60e11b81526020600482015294911691610124850191906001600160801b039061335e906001600160a01b0361331c85612872565b16602489015260208401356044890152613338604085016137a7565b151560648901526001600160a01b0361335360608601612872565b16608489015261456c565b1660a486015261337060a082016137a7565b151560c486015236819003601e190160c0820135818112156127e8578201602081359101936001600160401b0382116127e85760608202360385136127e857819061010060e48a015252610144870193905f905b8082106135ae5750505060e0820135908112156127e85701803560208201926001600160401b0382116127e8578160051b9081360385136127e85791879594936023198785030161010488015281845260208085019385010194935f9160fe19813603015b8484106134a15750505050505050602093916001600160801b03848093039316905af19081156127dd575f9161346f575b50613467906001926137b4565b97019661326c565b90506020813d8211613499575b81613489602093836129c7565b810103126127e85751600161345a565b3d915061347c565b919395979850919395601f198482030187528735828112156127e8578301602081013582526001600160a01b036134da60408301612872565b1660208301526060810135603e1936839003018112156127e8578101602081013591906040016001600160401b0383116127e85782360381136127e857829060e060408601528160e08601526101008501375f61010083850101526001600160801b036135496080830161456c565b16606084015260a0810135608084015260c081013563ffffffff60e01b81168091036127e8578360209361358b60e086956101009560a060019a0152016137a7565b151560c0830152601f80199101160101990197019401918a989796959391613429565b90919460608060019288358152838060a01b036135cd60208b01612872565b1660208201526001600160801b036135e760408b0161456c565b1660408201520196019201906133c4565b905061360381614558565b906132ce565b5061361660a0840161379a565b156132c9565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b93509450945050602091508181519101209101357fd04cd9af813f6f0b56e9411a6ee6a84eb5ac35a96f0c33d2e3a07d65baa8f4186020604051838152a160405190602082019283526040820152604081526136d66060826129c7565b51902090565b5050507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b60405162461bcd60e51b815260206004820152603460248201527f636861696e436f6d6d69746d656e7420636f756c6420636f6e7461696e206174604482015273081b5bdcdd081bdb994818dbdb5b5a5d1b595b9d60621b6064820152608490fd5b903590601e19813603018212156127e857018035906001600160401b0382116127e857602001918160061b360383136127e857565b3580151581036127e85790565b359081151582036127e857565b602080612bd6928195946040519682889351918291018585015e82019083820152030180855201836129c7565b903590605e19813603018212156127e8570190565b91908201809211612a9d57565b60c08201600161381382856131cf565b905011613c7a5761382481846131cf565b9050156136dc5761383590836131cf565b15612c0a57803590607e19813603018212156127e85701916060830190602061385d83612d34565b91019065ffffffffffff8061387184612d34565b1691161015613c1b5761388382612d34565b65ffffffffffff80600286015460201c16911610613bc0576138c965ffffffffffff6138c26138bc826138b587612d34565b1687614580565b93612d34565b1684614580565b1115613b67576007820154600690920180548435946001600160a01b0394851694604082019391925f9160209116604461390f8361390789896137e1565b01358b6137f6565b604051948593849263095ea7b360e01b84528c600485015260248401525af180156127dd57613b30575b505460405163394f179b60e11b81526001600160a01b03909116600482015260248101959095526020818101356044870152856064815f885af19485156127dd575f95613af8575b509061398c916137e1565b9161399682612d34565b9260405193637fbe95b560e01b85526040600486015260a48501918035601e19823603018112156127e8578101602081359101936001600160401b0382116127e8578160061b360385136127e85760606044890152819052869360c485019392915f5b818110613ac057505050836020959365ffffffffffff829484895f9601356064860152613a2f604060018060a01b039201612872565b16608485015216602483015203925af19182156127dd575f92613a8a575b50613a5790612d34565b6040519160208301938452604083015265ffffffffffff60d01b9060d01b166060820152604681526136d66066826129c7565b9091506020813d602011613ab8575b81613aa6602093836129c7565b810103126127e8575190613a57613a4d565b3d9150613a99565b919550919293604080600192838060a01b03613adb8a612872565b1681526020890135602082015201960191019188959493926139f9565b919094506020823d602011613b28575b81613b15602093836129c7565b810103126127e85790519361398c613981565b3d9150613b08565b6020813d602011613b5f575b81613b49602093836129c7565b810103126127e857518015158114613939575f80fd5b3d9150613b3c565b60405162461bcd60e51b815260206004820152602b60248201527f7265776172647320636f6d6d69746d656e74206d75737420746172676574207060448201526a726576696f75732065726160a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f7265776172647320636f6d6d69746d656e742074696d657374616d702070726560448201526c64617465732067656e6573697360981b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f7265776172647320636f6d6d69746d656e742074696d657374616d70206d75736044820152701d08189948199bdc881d1a19481c185cdd607a1b6064820152608490fd5b608460405162461bcd60e51b815260206004820152604060248201527f7265776172647320636f6d6d69746d656e74206d75737420626520656d70747960448201527f206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d656e746064820152fd5b903590601e19813603018212156127e857018035906001600160401b0382116127e8576020019181360383136127e857565b9060e081016001613d2782846131cf565b9050116140c557613d3881836131cf565b9050156136dc57613d48916131cf565b15612c0a57803590609e19813603018212156127e85701906060820190613d6f82846131cf565b9050156140725765ffffffffffff600282015460201c1692613d918442612a90565b613da060168401548092612ab1565b9460808301359560018101809111612a9d57860361401a57613dc586613dcb93612ec8565b906137f6565b91613dda601782015484612a90565b4210613fd557613de9906145a8565b914260058401541015613f7557613e3e906040830193613e30613e38613e0f8787613ce4565b9190613e1b8a896131cf565b949091613e28368b612acf565b943691612af7565b933691612b53565b92612edb565b7fa1a3b42179ad30022438a1ea333b38eaf4a7329beee5e2b8111c0dcd4e08821c6020604051868152a160a0813603126127e85760405191613e7f836129ac565b613e893683612acf565b8352356001600160401b0381116127e857810136601f820112156127e857613eb8903690602081359101612af7565b926020830193845235906001600160401b0382116127e8570136601f820112156127e857613ef190939291933690602081359101612b53565b928360408201528260608201525192602084519401519151602081519101209260405193849360208501968752604085015260608401526080830160208351919301905f5b818110613f53575050508152038082526136d690602001826129c7565b82516001600160a01b0316855286955060209485019490920191600101613f36565b60405162461bcd60e51b815260206004820152603260248201527f6c6f6f6b73206c696b652076616c696461746f727320666f72206e65787420656044820152711c9848185c9948185b1c9958591e481cd95d60721b6064820152608490fd5b60405162461bcd60e51b815260206004820152601b60248201527f656c656374696f6e206973206e6f7420796574207374617274656400000000006044820152606490fd5b60405162461bcd60e51b815260206004820152602a60248201527f636f6d6d69746d656e742065726120696e646578206973206e6f74206e657874604482015269040cae4c240d2dcc8caf60b31b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f6e65772076616c696461746f7273206c697374206d757374206e6f7420626520604482015264656d70747960d81b6064820152608490fd5b60405162461bcd60e51b815260206004820152604360248201527f76616c696461746f727320636f6d6d69746d656e74206d75737420626520656d60448201527f707479206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d606482015262195b9d60ea1b608482015260a490fd5b909493919365ffffffffffff600283015460201c1661415b4284614580565b61417361416d60168601548093612ec8565b836137f6565b9182841080806144d0575b1561445e575083106144195761419490836137f6565b106143c8576141a4905b82614511565b94601960f81b5f523060601b60025260165260365f209360028110156127f257806142b45750506001810361426f5715612c0a576141e5816141ec92613ce4565b3691612af7565b91606083510361421a57826020614217940151606060408301519201519260018154910154906145c3565b90565b60405162461bcd60e51b815260206004820152602760248201527f46524f5354207369676e6174757265206c656e677468206d75737420626520396044820152663620627974657360c81b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f46524f5354207369676e6174757265206d7573742062652073696e676c6500006044820152606490fd5b9193916001146142c75750505050505f90565b6142ec90600860048796970154910154906001600160801b038260801c9216906144e6565b925f9260035f9201915b868110156143bd5761432561431c6143166141e58460051b860186613ce4565b866148c1565b909291926148fb565b6001600160a01b0381165f9081526020859052604090205460ff16614350575b506001905b016142f6565b6001600160a01b03165f9081527ff02b465737fa6045c2ff53fb2df43c66916ac2166fa303264668fb2f6a1d8c0060205260409020805c15614395575060019061434a565b9460016143a392965d612e23565b938585146143b1575f614345565b50505050505050600190565b505050505050505f90565b60405162461bcd60e51b8152602060048201526024808201527f74696d657374616d70206973206f6c646572207468616e2070726576696f75736044820152632065726160e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f742076616c6964617465206265666f72652067656e6573697300006044820152606490fd5b9392915050428211614481576141a492614479575b5061419e565b90505f614473565b60405162461bcd60e51b815260206004820152602160248201527f74696d657374616d702063616e6e6f7420626520696e207468652066757475726044820152606560f81b6064820152608490fd5b506144df6018870154856137f6565b421061417e565b6001600160801b038092160291166144fe8183612ab1565b918115612abb5706156142175760010190565b9061451c90826147d8565b1561452757600f0190565b60090190565b60ff5f516020614a415f395f51905f525460401c161561454957565b631afcd79f60e31b5f5260045ffd5b356001600160801b03811681036127e85790565b35906001600160801b03821682036127e857565b601661459f6142179365ffffffffffff600285015460201c1690612a90565b91015490612ab1565b6145b242826147d8565b156145bd5760090190565b600f0190565b92939194906145d2858761495b565b156147795782156147795770014551231950b75fc4402da1732fc9bebe19831015614779576001169061010e6040519161012083018381106001600160401b038211176127e85760405260883684376002600188160160888401538760898401526002840160a984015360aa830186905260ca8301527e300046524f53542d736563703235366b312d4b454343414b3235362d76316360ea8301526303430b6160e51b61010a830152812060cc820181815290600260ec84016001815360428420809318845253604270014551231950b75fc4402da1732fc9bebe19922060801c6001600160401b0360801b8260801b16179070014551231950b75fc4402da1732fc9bebe1990600160c01b9060401c090880156143bd5784601b6080945f9660209870014551231950b75fc4402da1732fc9bebe19910970014551231950b75fc4402da1732fc9bebe19038552018684015280604084015270014551231950b75fc4402da1732fc9bebe19910970014551231950b75fc4402da1732fc9bebe1903606082015282805260015afa505f51915f5260205260018060a01b0360405f20161490565b5050505050505f90565b61478b612d47565b50600281015460058201546040519290916147cb916004916001600160a01b03166147b5866129ac565b6147be82612a72565b8652602086015201612ba7565b6040830152606082015290565b906014600e83015492015480831461487d57818184109311918215911115918190614876575b15614813578261480d57505090565b14919050565b60405162461bcd60e51b815260206004820152603560248201527f636f756c64206e6f74206964656e746966792076616c696461746f727320666f6044820152740722074686520676976656e2074696d657374616d7605c1b6064820152608490fd5b50816147fe565b606460405162461bcd60e51b815260206004820152602060248201527f657261732074696d657374616d70206d757374206e6f7420626520657175616c6044820152fd5b81519190604183036148f1576148ea9250602082015190606060408401519301515f1a9061497e565b9192909190565b50505f9160029190565b60048110156127f2578061490d575050565b600181036149245763f645eedf60e01b5f5260045ffd5b6002810361493f575063fce698f760e01b5f5260045260245ffd5b6003146149495750565b6335e2f38360e21b5f5260045260245ffd5b6401000003d01990600790829081818009900908906401000003d0199080091490565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116149f5579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156127dd575f516001600160a01b038116156149eb57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"829:23369:157:-:0;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;;;;;;7894:76:30;;-1:-1:-1;;;;;;;;;;;829:23369:157;;7983:34:30;7979:146;;-1:-1:-1;829:23369:157;;;;;;;;;7979:146:30;-1:-1:-1;;;;;;829:23369:157;-1:-1:-1;;;;;829:23369:157;;;-1:-1:-1;;;;;;;;;;;829:23369:157;;;8085:29:30;;829:23369:157;;8085:29:30;7979:146;;;;7894:76;7936:23;;;-1:-1:-1;7936:23:30;;-1:-1:-1;7936:23:30;829:23369:157;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561010a575b50361561001a575f80fd5b5f516020614a215f395f51905f5254610038600182015415156129e8565b6001600160801b033416156100ba57335f908152601a9190910160205260409020541561006157005b60405162461bcd60e51b815260206004820152602b60248201527f636f756c646e277420726563656976652045746865722066726f6d20756e6b6e60448201526a6f776e2070726f6772616d60a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f7a65726f2076616c7565207472616e73666572206973206e6f7420616c6c6f77604482015261195960f21b6064820152608490fd5b5f905f3560e01c9081627a32e714612806575080630c18d2771461230e578063120e3f1e1461218257806328e24b3d146121545780633683c4d214611ec75780633b49d01114611e805780633bd109fa14611e315780633d43b41814611ddd57806353f7fd48146118245780636c2eb35014611492578063715018a61461142957806371a8cf2d146113fb57806382bdeaad146112e357806384d22a4f1461128557806388f50cf01461124c5780638b1edf1e146111815780638da5cb5b1461114c5780638f381dbe146111065780639067088e146110bd57806396a2ddfa1461108f5780639eb939a814611038578063a5d53a4414610fca578063b24fcac014610991578063baaf020114610890578063c13911e81461084c578063c2eb812f14610520578063ca1e7819146104d0578063cacf66ab14610498578063d456fd5114610462578063e3a6684f14610423578063e6fabc09146103ea578063ed612f8c146103b2578063edc872251461035d578063f2fde38b14610330578063f4f20ac0146102f75763facd743b0361000f57346102f45760203660031901126102f4576102b661285c565b60036102d15f516020614a215f395f51905f52544290614511565b019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b80fd5b50346102f457806003193601126102f4575f516020614a215f395f51905f5254600701546040516001600160a01b039091168152602090f35b50346102f45760203660031901126102f45761035a61034d61285c565b610355612e60565b612db2565b80f35b50346102f457806003193601126102f45760206103aa5f516020614a215f395f51905f5254600860046103904284614511565b0154910154906001600160801b038260801c9216906144e6565b604051908152f35b50346102f457806003193601126102f457602060046103e05f516020614a215f395f51905f52544290614511565b0154604051908152f35b50346102f457806003193601126102f4575f516020614a215f395f51905f5254600501546040516001600160a01b039091168152602090f35b50346102f457806003193601126102f457604060085f516020614a215f395f51905f525401548151906001600160801b038116825260801c6020820152f35b50346102f457806003193601126102f457602065ffffffffffff60045f516020614a215f395f51905f5254015416604051908152f35b50346102f457806003193601126102f457602065ffffffffffff60025f516020614a215f395f51905f52540154821c16604051908152f35b50346102f457806003193601126102f45761051c61050860046105025f516020614a215f395f51905f52544290614511565b01612ba7565b6040519182916020835260208301906128c3565b0390f35b50346102f457806003193601126102f45760405161053d81612990565b610545612ce0565b815260405161055381612975565b5f8152602081015f9052602082015261056a612ce0565b6040820152610577612d7f565b606082015260405161058881612975565b5f8082526020820152608082015261059e612ce0565b60a08201528160c082015260e001525f516020614a215f395f51905f52546105c4612d7f565b506105d160098201614783565b906105de600f8201614783565b600882015492604051936105f1856129ac565b6001600160801b038116855260801c602085015260408401526060830152601b81015490601c8101546040519261062784612990565b60405161063381612946565b60018401548152600284015463ffffffff8116602083015260201c65ffffffffffff16604082015284526040519461066a86612975565b60038401548652600484015465ffffffffffff166020870152602085019586526040519061069782612946565b60058501546001600160a01b0390811683526006860154811660208401526007860154166040808401919091528601918252606086019081526106dc60158601612c32565b94608087019586526016016106f090612cfe565b9160a0870192835260c0870193845260e087019485526040519788976020895251805160208a0152602081015163ffffffff1660408a01526040015165ffffffffffff16606089015251805160808901526020015165ffffffffffff1660a088015251600160a01b6001900381511660c0880152600160a01b6001900360208201511660e0880152600160a01b60019003906040015116610100870152516101208601610200905280516001600160801b031661022087015260208101516001600160801b031661024087015260408101516102608701608090526102a087016107d9916128ff565b90606001519061021f19878203016102808801526107f6916128ff565b935180516001600160401b0316610140870152602001516001600160801b031661016086015251805161018086015260208101516101a0860152604001516101c0850152516101e0840152516102008301520390f35b50346102f45760203660031901126102f45760ff604060209260195f516020614a215f395f51905f5254016004358252845220541661088e60405180926128b6565bf35b50346102f45760203660031901126102f4576004356001600160401b03811161098d576108c1903690600401612886565b905f516020614a215f395f51905f5254906108db83612b3c565b916108e960405193846129c7565b8383526108f584612b3c565b602084019490601f1901368637601a869201915b81811061095457868587604051928392602084019060208552518091526040840192915b81811061093b575050500390f35b825184528594506020938401939092019160010161092d565b8061096a6109656001938588612bfa565b612c60565b828060a01b03165f528360205260405f20546109868288612c1e565b5201610909565b5080fd5b50346102f45760603660031901126102f4576004356001600160401b03811161098d57806004019161010060031983360301126102f457600260243510156102f4576044356001600160401b03811161098d576109f2903690600401612886565b9390917f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610fbb5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f516020614a215f395f51905f525491610a5e600184015415156129e8565b825415610ee1575b60038301908154916044870135809303610e8e57600485019765ffffffffffff89541696602489019765ffffffffffff610a9f8a612d34565b1610610e0e57610ab484889b96999a9b613204565b98606095879b8c9a60a482019860198c019c5b610ad18b8b613765565b9190501015610c99578e610ae58b8b613765565b90911015610c85578f60ff8f926040908f9360061b01928335948582526020522054166003811015610c7157600103610c0e5760408f918f928f936020830194610b2e8661379a565b15610bf657601c928782526020528481209050600260ff1982541617905501610b578154612e23565b90555b610b638361379a565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208451878152a2360312610bf25791610be9916020600194610bb760405191610baf83612975565b8483526137a7565b91829101526040519060208201928352151560f81b604082015260218152610be06041826129c7565b519020906137b4565b9e019d8e610ac7565b8c80fd5b905083918682526020522060ff198154169055610b5a565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b8e52602160045260248efd5b634e487b7160e01b8c52603260045260248cfd5b8a9950926020610d9e998f948e9794610d939665ffffffffffff98858151910120610cc4858c613803565b91610ccf868d613d16565b93610ce56064610cde8c612d34565b9701612d26565b9060405196898801983589528d60d01b9060d01b166040880152604687015260ff60f81b9060f81b1660668601526067850152608784015260a783015260c782015260c78152610d3660e7826129c7565b5190208099610d4485612d34565b8760405191610d5283612975565b8483521693849101525584198254161790557f7ebe42360bcb182fe0a88148b081e4557c89d09aa6af8307635ac2f83e2aaa656020604051898152a1612d34565b16936024359161413c565b15610dc957807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b60405162461bcd60e51b815260206004820152604c60248201527f62617463682074696d657374616d70206d75737420626520677265617465722060448201527f6f7220657175616c20746f206c617465737420636f6d6d69747465642062617460648201526b063682074696d657374616d760a41b608482015260a490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d6974746564206261746368604482015264040d0c2e6d60db1b6064820152608490fd5b610ef7610ef060648701612d26565b823561316f565b15610f675765ffffffffffff610f0f60248701612d34565b164211610a665760405162461bcd60e51b815260206004820152602360248201527f62617463682074696d657374616d70206d75737420626520696e207468652070604482015262185cdd60ea1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b633ee5aeb560e01b8152600490fd5b50346102f457806003193601126102f457604061100b5f516020614a215f395f51905f5254600261100360018060a01b03924290614511565b015416612e31565b6020825193849282845280519283918282870152018585015e828201840152601f01601f19168101030190f35b50346102f457806003193601126102f457611051612ce0565b50606061106e60165f516020614a215f395f51905f525401612cfe565b61088e60405180926040809180518452602081015160208501520151910152565b50346102f457806003193601126102f4576020601b5f516020614a215f395f51905f52540154604051908152f35b50346102f45760203660031901126102f4576110d761285c565b601a5f516020614a215f395f51905f5254019060018060a01b03165f52602052602060405f2054604051908152f35b50346102f45760203660031901126102f457600435906001600160401b0382116102f457602061114261113c3660048601612886565b90612c74565b6040519015158152f35b50346102f457806003193601126102f4575f516020614a015f395f51905f52546040516001600160a01b039091168152602090f35b50346102f457806003193601126102f4575f516020614a215f395f51905f525460018101908154611207576002015463ffffffff16409081156111c2575580f35b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b50346102f457806003193601126102f4575f516020614a215f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346102f457806003193601126102f45761129e612a5a565b5060406112bb60155f516020614a215f395f51905f525401612c32565b61088e825180926001600160801b03602080926001600160401b038151168552015116910152565b50346102f45760203660031901126102f4576004356001600160401b03811161098d57611314903690600401612886565b905f516020614a215f395f51905f52549061132e83612b3c565b9161133c60405193846129c7565b83835261134884612b3c565b602084019490601f19013686376019869201915b8181106113b157868587604051928392602084019060208552518091526040840192915b81811061138e575050500390f35b91935091602080826113a360019488516128b6565b019401910191849392611380565b6113bc818386612bfa565b3587528260205260ff6040882054166113d58287612c1e565b60038210156113e7575260010161135c565b634e487b7160e01b89526021600452602489fd5b50346102f457806003193601126102f457602060035f516020614a215f395f51905f52540154604051908152f35b50346102f457806003193601126102f457611442612e60565b5f516020614a015f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102f457806003193601126102f4575f516020614a415f395f51905f525460ff8160401c1690811561180f575b50611800575f516020614a415f395f51905f52805468ffffffffffffffffff1916680100000000000000021790555f516020614a015f395f51905f525461151b906001600160a01b031661151361452d565b61035561452d565b5f516020614a215f395f51905f5254604090815161153983826129c7565b6017815260208101907f726f757465722e73746f726167652e526f757465725632000000000000000000825261156d612e60565b5190205f1981019081116117ec57916020917fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2938251908482019081528482526115b784836129c7565b60ff19915190201690815f516020614a215f395f51905f52557f059eb9adf6e95b839d818142ed5bd5e498b6d95138e65c91525e93cc0f0339fc848451848152a1611600612e93565b80516001840155600283019063ffffffff868201511669ffffffffffff00000000868454930151881b169169ffffffffffffffffffff19161717905560058101600583019080820361179e575b5050600881016001600160801b038154169060088401916001600160801b0319835416178255546001600160801b0382549181191691161790556116d66116944283614511565b6116ab6001600160a01b0360026110034287614511565b6116c160046116ba4287614511565b0192612a72565b906116cc4293612ba7565b9160098701612edb565b60158101601583019080820361174c575b505060168101601683019181830361172c575b5050505060ff60401b195f516020614a415f395f51905f5254165f516020614a415f395f51905f52555160028152a180f35b60189283925490556017810154601785015501549101555f8080806116fa565b806001600160401b03806001600160801b03935416166001600160401b031984541617835554851c16600160401b600160c01b03825491861b1690600160401b600160c01b0319161790555f806116e7565b5481546001600160a01b03199081166001600160a01b039283161790925560068381015490850180548416918316919091179055600780840154908501805490931691161790555f8061164d565b634e487b7160e01b84526011600452602484fd5b63f92ee8a960e01b8152600490fd5b600291506001600160401b031610155f6114c1565b50346102f4576101603660031901126102f45761183f61285c565b6024356001600160a01b0381169190829003611dd95761185d612830565b611865612846565b60c435916084359160a43560403660e3190112611dd55761012435946001600160401b038611611dd15736602387011215611dd1578560040135916001600160401b038311611dcd573660248489010111611dcd57610144356001600160401b038111611dc9576118da903690600401612886565b9690945f516020614a415f395f51905f5254996001600160401b0360ff8c60401c16159b1680159081611dc1575b6001149081611db7575b159081611dae575b50611d9f5761195c908b60016001600160401b03195f516020614a415f395f51905f525416175f516020614a415f395f51905f5255611d6f575b61151361452d565b61196461452d565b4215611d19578215611cc35782821115611c6257600a6119848484612a90565b04841015611c1d5760409a8b5161199b8d826129c7565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526119cf612e60565b5190205f198101908111611c09578c51602080820192835281528d9392916119f785836129c7565b60ff19915190201698895f516020614a215f395f51905f525583518a815260207f059eb9adf6e95b839d818142ed5bd5e498b6d95138e65c91525e93cc0f0339fc91a1611a42612e93565b805160018c015560028b0190602081015163ffffffff1686835492015160201b69ffffffffffff00000000169169ffffffffffffffffffff191617179055835190611a8c82612946565b8282526001600160a01b03908116602083018190529381169490910184905260058a018054919092166001600160a01b031991821617909155600689018054821690921790915560078801805490911690911790557003000000000000000000000000000000026008870155611b00612a5a565b508951611b0c81612975565b639502f90081526509184e72a0006020909101526015860180546001600160c01b0319166d09184e72a000000000009502f900179055895183908b90611b5181612946565b8381528460208201520152601686015560178501556018840155865194611b7786612975565b60e4358652610104356020870152611b93913691602401612af7565b9042933690611ba192612b53565b9160090193611baf94612edb565b611bb7575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f516020614a415f395f51905f5254165f516020614a415f395f51905f52555160018152a180f35b634e487b7160e01b8e52601160045260248efd5b60405162461bcd60e51b815260206004820152601b60248201527f76616c69646174696f6e2064656c617920697320746f6f2062696700000000006044820152606490fd5b60405162461bcd60e51b815260206004820152603360248201527f657261206475726174696f6e206d757374206265206772656174657220746861604482015272371032b632b1ba34b7b710323ab930ba34b7b760691b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f656c656374696f6e206475726174696f6e206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f63757272656e742074696d657374616d70206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b600160401b60ff60401b195f516020614a415f395f51905f525416175f516020614a415f395f51905f5255611954565b63f92ee8a960e01b8d5260048dfd5b9050155f61191a565b303b159150611912565b8c9150611908565b8a80fd5b8980fd5b8880fd5b8780fd5b8280fd5b50346102f45760203660031901126102f457611df761285c565b611dff612e60565b5f516020614a215f395f51905f525460050180546001600160a01b0319166001600160a01b0390921691909117905580f35b50346102f457806003193601126102f457611e4a612a5a565b506040611e6e611e695f516020614a215f395f51905f52544290614511565b612a72565b60208251918051835201516020820152f35b50346102f457806003193601126102f4576020611eb95f516020614a215f395f51905f5254600261100360018060a01b03924290614511565b818151910120604051908152f35b50346102f45760603660031901126102f457600435611ee4612830565b5f516020614a215f395f51905f5254611f02600182015415156129e8565b8284526019810160205260ff6040852054166003811015612140576002036120e4576040516020810190848252602435604082015260408152611f466060826129c7565b51902060405160608101908082106001600160401b038311176120e057605a916040527f3d605080600a3d3981f3608060405263e6fabc0960e01b5f5260205f6004817381523060601b6b5afa15604c575f80805136821760208201527f80378136915af43d5f803e156048573d5ff35b3d5ffd5b5f80fd000000000000604082015286f59081156120dc576001600160a01b0382165f908152601a820160205260409020849055601b018054611ffc90612e23565b90556040516001600160a01b03821680825293907f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a2506001600160a01b0381166120d75750335b5f516020614a215f395f51905f5254600501546001600160a01b0316823b156120d357604051631c9776b560e31b81526001600160a01b039092166004830152602482015260016044820152828160648183865af180156120c8576120b3575b602082604051908152f35b6120be8380926129c7565b61098d57816120a8565b6040513d85823e3d90fd5b8380fd5b612048565b8480fd5b8680fd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b85526021600452602485fd5b50346102f457806003193601126102f457602060015f516020614a215f395f51905f52540154604051908152f35b50346102f45760203660031901126102f4576004358149156122925760195f516020614a215f395f51905f52546121be600182015415156129e8565b018183528060205260ff604084205416600381101561227e5761221d5781835260209081526040808420805460ff19166001179055519182527f5c261a095dd5720475295dc06379921c003c22164ee6cae5cf83e76ce0a1b98591a180f35b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b634e487b7160e01b84526021600452602484fd5b60405162461bcd60e51b815260206004820152604860248201527f626c6f622063616e277420626520666f756e642c20726f75746572206578706560448201527f63746564204549502d34383434207472616e73616374696f6e2077697468205760648201526720a9a690313637b160c11b608482015260a490fd5b346127e85760803660031901126127e85760043561232a612830565b90612333612846565b915f516020614a215f395f51905f5254612352600182015415156129e8565b825f526019810160205260ff60405f20541660038110156127f2576002036120e45760405160208101908482526024356040820152604081526123966060826129c7565b5190206040516102c08101908082106001600160401b038311176127e8576102b0916040527f60808060405261029e90816100128239f3fe608060405260043610610254575f81527f3560e01c806336a52a18146100ab57806342129d00146100a65780635ce6c32760208201527f146100a1578063701da98e1461009c578063704ed542146100975780637a8e0c60408201527fdd1461009257806391d5a64c1461008d5780639ce110d714610088578063affe60608201527fd0e0146100835763e43f3433036102545761023f565b610222565b6101fa565b60808201527f6101e4565b6101b1565b610181565b610165565b610143565b610106565b346160a08201527ed4575f3660031901126100d45760025460081c6001600160a01b031660809060c08201527f8152602090f35b5f80fd5b9181601f840112156100d45782359167ffffffffff60e08201527fffffff83116100d457602083818601950101116100d457565b604036600319016101008201527f126100d45760043567ffffffffffffffff81116100d4576101329036906004016101208201527f6100d8565b505060243580151514610254575f80fd5b346100d4575f366003196101408201527f01126100d457602060ff600254166040519015158152f35b346100d4575f36606101608201527f031901126100d45760205f54604051908152f35b346100d457602036600319016101808201527f126100d4576004356fffffffffffffffffffffffffffffffff811614610254576101a08201527f5f80fd5b60403660031901126100d45760243567ffffffffffffffff811161006101c08201527fd4576101dd9036906004016100d8565b5050610254565b346100d457602036606101e08201527f0319011215610254575f80fd5b346100d4575f3660031901126100d4576003546102008201527f6040516001600160a01b039091168152602090f35b346100d4575f36600319016102208201527f126100d4576020600154604051908152f35b346100d4575f36600319011215616102408201523060601c7f0254575f80fd5b63e6fabc0960e01b5f5260205f60048173000000000000000017610260820152735afa156100d4575f808051368280378136915af43060a01b176102808201526f3d5f803e1561029a573d5ff35b3d5ffd60801b6102a08201525ff59081156127e8576001600160a01b0382165f908152601a820160205260409020849055601b01805461272d90612e23565b90556040516001600160a01b03821680825293907f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a2506001600160a01b0381166127ec575033915b813b156127e857604051631c9776b560e31b81526001600160a01b039384166004820152921660248301525f604483018190528260648183855af19182156127dd576020926127cd575b50604051908152f35b5f6127d7916129c7565b5f6127c4565b6040513d5f823e3d90fd5b5f80fd5b9161277a565b634e487b7160e01b5f52602160045260245ffd5b346127e8575f3660031901126127e857602090601c5f516020614a215f395f51905f525401548152f35b604435906001600160a01b03821682036127e857565b606435906001600160a01b03821682036127e857565b600435906001600160a01b03821682036127e857565b35906001600160a01b03821682036127e857565b9181601f840112156127e8578235916001600160401b0383116127e8576020808501948460051b0101116127e857565b9060038210156127f25752565b90602080835192838152019201905f5b8181106128e05750505090565b82516001600160a01b03168452602093840193909201916001016128d3565b9060208251805183520151602082015260018060a01b0360208301511660408201526080606061293d604085015160a08386015260a08501906128c3565b93015191015290565b606081019081106001600160401b0382111761296157604052565b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b0382111761296157604052565b61010081019081106001600160401b0382111761296157604052565b608081019081106001600160401b0382111761296157604052565b90601f801991011681019081106001600160401b0382111761296157604052565b156129ef57565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b60405190612a6782612975565b5f6020838281520152565b90604051612a7f81612975565b602060018294805484520154910152565b91908203918211612a9d57565b634e487b7160e01b5f52601160045260245ffd5b8115612abb570490565b634e487b7160e01b5f52601260045260245ffd5b91908260409103126127e857604051612ae781612975565b6020808294803584520135910152565b9291926001600160401b0382116129615760405191612b20601f8201601f1916602001846129c7565b8294818452818301116127e8578281602093845f960137010152565b6001600160401b0381116129615760051b60200190565b929190612b5f81612b3c565b93612b6d60405195866129c7565b602085838152019160051b81019283116127e857905b828210612b8f57505050565b60208091612b9c84612872565b815201910190612b83565b90604051918281549182825260208201905f5260205f20925f5b818110612bd8575050612bd6925003836129c7565b565b84546001600160a01b0316835260019485019487945060209093019201612bc1565b9190811015612c0a5760051b0190565b634e487b7160e01b5f52603260045260245ffd5b8051821015612c0a5760209160051b010190565b90604051612c3f81612975565b91546001600160401b038116835260401c6001600160801b03166020830152565b356001600160a01b03811681036127e85790565b612c8d5f516020614a215f395f51905f52544290614511565b600301905f5b838110612ca35750505050600190565b612cb1610965828685612bfa565b6001600160a01b03165f9081526020849052604090205460ff1615612cd857600101612c93565b505050505f90565b60405190612ced82612946565b5f6040838281528260208201520152565b90604051612d0b81612946565b60406002829480548452600181015460208501520154910152565b3560ff811681036127e85790565b3565ffffffffffff811681036127e85790565b60405190612d54826129ac565b5f606083604051612d6481612975565b83815283602082015281528260208201528160408201520152565b60405190612d8c826129ac565b815f81525f6020820152612d9e612d47565b60408201526060612dad612d47565b910152565b6001600160a01b03168015612e10575f516020614a015f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f198114612a9d5760010190565b803b905f19820190828211612a9d5760019060405193603e601f19910116840160405282845260208401903c90565b5f516020614a015f395f51905f52546001600160a01b03163303612e8057565b63118cdaa760e01b5f523360045260245ffd5b612e9b612ce0565b50604051612ea881612946565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b81810292918115918404141715612a9d57565b9291908051906020810191825170014551231950b75fc4402da1732fc9bebe198210918261315e575b50501561310a5751845551600184015560405190612f476021836020808201945f86528051918291018484015e81015f838201520301601f1981018452836129c7565b612f84602b604051809360208201956a600b5981380380925939f360a81b87525180918484015e81015f838201520301601f1981018352826129c7565b51905ff06001600160a01b038116156130d1576002830180546001600160a01b0319166001600160a01b039092169190911790555f5b600483018054821015612ff8575f90815260208082208301546001600160a01b0316825260038501905260409020805460ff19169055600101612fba565b5050925f5b8451811015613041576001906001600160a01b0361301b8288612c1e565b5116828060a01b03165f526003840160205260405f208260ff1982541617905501612ffd565b5092600482018151916001600160401b03831161296157600160401b83116129615781548383558084106130ab575b50602001905f5260205f205f5b83811061308e575050505060050155565b82516001600160a01b03168183015560209092019160010161307d565b825f528360205f2091820191015b8181106130c65750613070565b5f81556001016130b9565b60405162461bcd60e51b81526020600482015260116024820152701111541313d65351539517d19052531151607a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602660248201527f46524f53542061676772656761746564207075626c6963206b657920697320696044820152651b9d985b1a5960d21b6064820152608490fd5b613168925061495b565b5f80612f04565b435f1981019392908411612a9d5760ff164381106131bf57505f925b8381101561319b575b505f925050565b80408281036131ad5750600193505050565b156131ba575f190161318b565b613194565b6131c99043612a90565b9261318b565b903590601e19813603018212156127e857018035906001600160401b0382116127e857602001918160051b360383136127e857565b9060808101600161321582846131cf565b9050116137035761322681836131cf565b9050156136dc57613236916131cf565b15612c0a57803590603e19813603018212156127e857019161325883806131cf565b92906060925f95601a60fe19843603019401945b86881015613679578760051b840135858112156127e857840161328e81612c60565b6001600160a01b03165f908152602088905260409020541561361c575f608082016001600160801b036132c082614558565b16151580613609575b6135f8575b6001600160a01b036132df84612c60565b604051630427a21d60e11b81526020600482015294911691610124850191906001600160801b039061335e906001600160a01b0361331c85612872565b16602489015260208401356044890152613338604085016137a7565b151560648901526001600160a01b0361335360608601612872565b16608489015261456c565b1660a486015261337060a082016137a7565b151560c486015236819003601e190160c0820135818112156127e8578201602081359101936001600160401b0382116127e85760608202360385136127e857819061010060e48a015252610144870193905f905b8082106135ae5750505060e0820135908112156127e85701803560208201926001600160401b0382116127e8578160051b9081360385136127e85791879594936023198785030161010488015281845260208085019385010194935f9160fe19813603015b8484106134a15750505050505050602093916001600160801b03848093039316905af19081156127dd575f9161346f575b50613467906001926137b4565b97019661326c565b90506020813d8211613499575b81613489602093836129c7565b810103126127e85751600161345a565b3d915061347c565b919395979850919395601f198482030187528735828112156127e8578301602081013582526001600160a01b036134da60408301612872565b1660208301526060810135603e1936839003018112156127e8578101602081013591906040016001600160401b0383116127e85782360381136127e857829060e060408601528160e08601526101008501375f61010083850101526001600160801b036135496080830161456c565b16606084015260a0810135608084015260c081013563ffffffff60e01b81168091036127e8578360209361358b60e086956101009560a060019a0152016137a7565b151560c0830152601f80199101160101990197019401918a989796959391613429565b90919460608060019288358152838060a01b036135cd60208b01612872565b1660208201526001600160801b036135e760408b0161456c565b1660408201520196019201906133c4565b905061360381614558565b906132ce565b5061361660a0840161379a565b156132c9565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b93509450945050602091508181519101209101357fd04cd9af813f6f0b56e9411a6ee6a84eb5ac35a96f0c33d2e3a07d65baa8f4186020604051838152a160405190602082019283526040820152604081526136d66060826129c7565b51902090565b5050507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b60405162461bcd60e51b815260206004820152603460248201527f636861696e436f6d6d69746d656e7420636f756c6420636f6e7461696e206174604482015273081b5bdcdd081bdb994818dbdb5b5a5d1b595b9d60621b6064820152608490fd5b903590601e19813603018212156127e857018035906001600160401b0382116127e857602001918160061b360383136127e857565b3580151581036127e85790565b359081151582036127e857565b602080612bd6928195946040519682889351918291018585015e82019083820152030180855201836129c7565b903590605e19813603018212156127e8570190565b91908201809211612a9d57565b60c08201600161381382856131cf565b905011613c7a5761382481846131cf565b9050156136dc5761383590836131cf565b15612c0a57803590607e19813603018212156127e85701916060830190602061385d83612d34565b91019065ffffffffffff8061387184612d34565b1691161015613c1b5761388382612d34565b65ffffffffffff80600286015460201c16911610613bc0576138c965ffffffffffff6138c26138bc826138b587612d34565b1687614580565b93612d34565b1684614580565b1115613b67576007820154600690920180548435946001600160a01b0394851694604082019391925f9160209116604461390f8361390789896137e1565b01358b6137f6565b604051948593849263095ea7b360e01b84528c600485015260248401525af180156127dd57613b30575b505460405163394f179b60e11b81526001600160a01b03909116600482015260248101959095526020818101356044870152856064815f885af19485156127dd575f95613af8575b509061398c916137e1565b9161399682612d34565b9260405193637fbe95b560e01b85526040600486015260a48501918035601e19823603018112156127e8578101602081359101936001600160401b0382116127e8578160061b360385136127e85760606044890152819052869360c485019392915f5b818110613ac057505050836020959365ffffffffffff829484895f9601356064860152613a2f604060018060a01b039201612872565b16608485015216602483015203925af19182156127dd575f92613a8a575b50613a5790612d34565b6040519160208301938452604083015265ffffffffffff60d01b9060d01b166060820152604681526136d66066826129c7565b9091506020813d602011613ab8575b81613aa6602093836129c7565b810103126127e8575190613a57613a4d565b3d9150613a99565b919550919293604080600192838060a01b03613adb8a612872565b1681526020890135602082015201960191019188959493926139f9565b919094506020823d602011613b28575b81613b15602093836129c7565b810103126127e85790519361398c613981565b3d9150613b08565b6020813d602011613b5f575b81613b49602093836129c7565b810103126127e857518015158114613939575f80fd5b3d9150613b3c565b60405162461bcd60e51b815260206004820152602b60248201527f7265776172647320636f6d6d69746d656e74206d75737420746172676574207060448201526a726576696f75732065726160a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f7265776172647320636f6d6d69746d656e742074696d657374616d702070726560448201526c64617465732067656e6573697360981b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f7265776172647320636f6d6d69746d656e742074696d657374616d70206d75736044820152701d08189948199bdc881d1a19481c185cdd607a1b6064820152608490fd5b608460405162461bcd60e51b815260206004820152604060248201527f7265776172647320636f6d6d69746d656e74206d75737420626520656d70747960448201527f206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d656e746064820152fd5b903590601e19813603018212156127e857018035906001600160401b0382116127e8576020019181360383136127e857565b9060e081016001613d2782846131cf565b9050116140c557613d3881836131cf565b9050156136dc57613d48916131cf565b15612c0a57803590609e19813603018212156127e85701906060820190613d6f82846131cf565b9050156140725765ffffffffffff600282015460201c1692613d918442612a90565b613da060168401548092612ab1565b9460808301359560018101809111612a9d57860361401a57613dc586613dcb93612ec8565b906137f6565b91613dda601782015484612a90565b4210613fd557613de9906145a8565b914260058401541015613f7557613e3e906040830193613e30613e38613e0f8787613ce4565b9190613e1b8a896131cf565b949091613e28368b612acf565b943691612af7565b933691612b53565b92612edb565b7fa1a3b42179ad30022438a1ea333b38eaf4a7329beee5e2b8111c0dcd4e08821c6020604051868152a160a0813603126127e85760405191613e7f836129ac565b613e893683612acf565b8352356001600160401b0381116127e857810136601f820112156127e857613eb8903690602081359101612af7565b926020830193845235906001600160401b0382116127e8570136601f820112156127e857613ef190939291933690602081359101612b53565b928360408201528260608201525192602084519401519151602081519101209260405193849360208501968752604085015260608401526080830160208351919301905f5b818110613f53575050508152038082526136d690602001826129c7565b82516001600160a01b0316855286955060209485019490920191600101613f36565b60405162461bcd60e51b815260206004820152603260248201527f6c6f6f6b73206c696b652076616c696461746f727320666f72206e65787420656044820152711c9848185c9948185b1c9958591e481cd95d60721b6064820152608490fd5b60405162461bcd60e51b815260206004820152601b60248201527f656c656374696f6e206973206e6f7420796574207374617274656400000000006044820152606490fd5b60405162461bcd60e51b815260206004820152602a60248201527f636f6d6d69746d656e742065726120696e646578206973206e6f74206e657874604482015269040cae4c240d2dcc8caf60b31b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f6e65772076616c696461746f7273206c697374206d757374206e6f7420626520604482015264656d70747960d81b6064820152608490fd5b60405162461bcd60e51b815260206004820152604360248201527f76616c696461746f727320636f6d6d69746d656e74206d75737420626520656d60448201527f707479206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d606482015262195b9d60ea1b608482015260a490fd5b909493919365ffffffffffff600283015460201c1661415b4284614580565b61417361416d60168601548093612ec8565b836137f6565b9182841080806144d0575b1561445e575083106144195761419490836137f6565b106143c8576141a4905b82614511565b94601960f81b5f523060601b60025260165260365f209360028110156127f257806142b45750506001810361426f5715612c0a576141e5816141ec92613ce4565b3691612af7565b91606083510361421a57826020614217940151606060408301519201519260018154910154906145c3565b90565b60405162461bcd60e51b815260206004820152602760248201527f46524f5354207369676e6174757265206c656e677468206d75737420626520396044820152663620627974657360c81b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f46524f5354207369676e6174757265206d7573742062652073696e676c6500006044820152606490fd5b9193916001146142c75750505050505f90565b6142ec90600860048796970154910154906001600160801b038260801c9216906144e6565b925f9260035f9201915b868110156143bd5761432561431c6143166141e58460051b860186613ce4565b866148c1565b909291926148fb565b6001600160a01b0381165f9081526020859052604090205460ff16614350575b506001905b016142f6565b6001600160a01b03165f9081527ff02b465737fa6045c2ff53fb2df43c66916ac2166fa303264668fb2f6a1d8c0060205260409020805c15614395575060019061434a565b9460016143a392965d612e23565b938585146143b1575f614345565b50505050505050600190565b505050505050505f90565b60405162461bcd60e51b8152602060048201526024808201527f74696d657374616d70206973206f6c646572207468616e2070726576696f75736044820152632065726160e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f742076616c6964617465206265666f72652067656e6573697300006044820152606490fd5b9392915050428211614481576141a492614479575b5061419e565b90505f614473565b60405162461bcd60e51b815260206004820152602160248201527f74696d657374616d702063616e6e6f7420626520696e207468652066757475726044820152606560f81b6064820152608490fd5b506144df6018870154856137f6565b421061417e565b6001600160801b038092160291166144fe8183612ab1565b918115612abb5706156142175760010190565b9061451c90826147d8565b1561452757600f0190565b60090190565b60ff5f516020614a415f395f51905f525460401c161561454957565b631afcd79f60e31b5f5260045ffd5b356001600160801b03811681036127e85790565b35906001600160801b03821682036127e857565b601661459f6142179365ffffffffffff600285015460201c1690612a90565b91015490612ab1565b6145b242826147d8565b156145bd5760090190565b600f0190565b92939194906145d2858761495b565b156147795782156147795770014551231950b75fc4402da1732fc9bebe19831015614779576001169061010e6040519161012083018381106001600160401b038211176127e85760405260883684376002600188160160888401538760898401526002840160a984015360aa830186905260ca8301527e300046524f53542d736563703235366b312d4b454343414b3235362d76316360ea8301526303430b6160e51b61010a830152812060cc820181815290600260ec84016001815360428420809318845253604270014551231950b75fc4402da1732fc9bebe19922060801c6001600160401b0360801b8260801b16179070014551231950b75fc4402da1732fc9bebe1990600160c01b9060401c090880156143bd5784601b6080945f9660209870014551231950b75fc4402da1732fc9bebe19910970014551231950b75fc4402da1732fc9bebe19038552018684015280604084015270014551231950b75fc4402da1732fc9bebe19910970014551231950b75fc4402da1732fc9bebe1903606082015282805260015afa505f51915f5260205260018060a01b0360405f20161490565b5050505050505f90565b61478b612d47565b50600281015460058201546040519290916147cb916004916001600160a01b03166147b5866129ac565b6147be82612a72565b8652602086015201612ba7565b6040830152606082015290565b906014600e83015492015480831461487d57818184109311918215911115918190614876575b15614813578261480d57505090565b14919050565b60405162461bcd60e51b815260206004820152603560248201527f636f756c64206e6f74206964656e746966792076616c696461746f727320666f6044820152740722074686520676976656e2074696d657374616d7605c1b6064820152608490fd5b50816147fe565b606460405162461bcd60e51b815260206004820152602060248201527f657261732074696d657374616d70206d757374206e6f7420626520657175616c6044820152fd5b81519190604183036148f1576148ea9250602082015190606060408401519301515f1a9061497e565b9192909190565b50505f9160029190565b60048110156127f2578061490d575050565b600181036149245763f645eedf60e01b5f5260045ffd5b6002810361493f575063fce698f760e01b5f5260045260245ffd5b6003146149495750565b6335e2f38360e21b5f5260045260245ffd5b6401000003d01990600790829081818009900908906401000003d0199080091490565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116149f5579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156127dd575f516001600160a01b038116156149eb57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"829:23369:157:-:0;;;;;;;;;;-1:-1:-1;829:23369:157;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;23824:107;23832:19;;;829:23369;23832:38;;23824:107;:::i;:::-;-1:-1:-1;;;;;23966:9:157;829:23369;23994:9;829:23369;;24071:10;-1:-1:-1;829:23369:157;;;24099:28;;;;;829:23369;;;;;;24099:42;829:23369;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;:::i;:::-;7984:40;14321:37:161;-1:-1:-1;;;;;;;;;;;829:23369:157;14342:15:161;14321:37;;:::i;:::-;7984:40:157;:52;1052:614:22;829:23369:157;;;;;-1:-1:-1;829:23369:157;;;;;;-1:-1:-1;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;6816:34;;829:23369;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;2357:1:29;829:23369:157;;:::i;:::-;2303:62:29;;:::i;:::-;2357:1;:::i;:::-;829:23369:157;;;;;;;;;;;;;;;;8697:211;-1:-1:-1;;;;;;;;;;;829:23369:157;8794:25;829:23369;14321:37:161;14342:15;14321:37;;:::i;:::-;8735:38:157;829:23369;8794:25;;829:23369;;-1:-1:-1;;;;;829:23369:157;;;;;8697:211;;:::i;:::-;829:23369;;;;;;;;;;;;;;;;;;;;;14321:37:161;-1:-1:-1;;;;;;;;;;;829:23369:157;14342:15:161;14321:37;;:::i;:::-;8506:41:157;829:23369;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;6586:23;;829:23369;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;8194:25;-1:-1:-1;;;;;;;;;;;829:23369:157;8194:25;829:23369;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;6464:40;829:23369;;;;;;;;;;;;;;;;;;;;;;;6201:32;-1:-1:-1;;;;;;;;;;;829:23369:157;6201:32;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;14321:37:161;-1:-1:-1;;;;;;;;;;;829:23369:157;14342:15:161;14321:37;;:::i;:::-;8378:41:157;829:23369;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;:::i;:::-;-1:-1:-1;829:23369:157;;;;;-1:-1:-1;829:23369:157;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;-1:-1:-1;829:23369:157;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;;;:::i;:::-;-1:-1:-1;18066:28:161;18073:20;;;18066:28;:::i;:::-;18152:20;18145:28;18152:20;;;18145:28;:::i;:::-;5492:25:157;;;829:23369;;;;;;;;:::i;:::-;-1:-1:-1;;;;;829:23369:157;;;;;;;18190:241:161;;829:23369:157;;18190:241:161;;829:23369:157;;18190:241:161;;829:23369:157;5881:33;;;829:23369;5949:39;;;;829:23369;;;;;;;:::i;:::-;;;;;;:::i;:::-;18073:20:161;5575:19:157;;829:23369;;;5881:33;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5630:27;;;829:23369;;;;;;;;;;;;;;5535:464;;829:23369;;;;;;;;;:::i;:::-;5686:20;;;829:23369;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;18152:20:161;829:23369:157;;;;;;;;;;;;5535:464;;829:23369;;;;5535:464;;829:23369;;;;5789:22;;;829:23369;:::i;:::-;5535:464;829:23369;5535:464;;829:23369;;;5836:16;;829:23369;;;:::i;:::-;5535:464;829:23369;5535:464;;829:23369;;;;5535:464;;829:23369;;;;5535:464;;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1052:614:22;829:23369:157;;1052:614:22;829:23369:157;;;;;;;;;1052:614:22;829:23369:157;;1052:614:22;829:23369:157;;;;;;;;;;;1052:614:22;829:23369:157;;1052:614:22;829:23369:157;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;;;9147:22;-1:-1:-1;;;;;;;;;;;829:23369:157;9147:22;829:23369;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;829:23369:157;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;829:23369:157;;;;10020:28;9952:13;10020:28;;9947:129;9967:23;;;;;;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;829:23369:157;;;;;;;;;10020:28;829:23369;;;9992:3;10049:15;;;10020:28;10049:15;;;;:::i;:::-;;:::i;:::-;829:23369;;;;;;-1:-1:-1;829:23369:157;;;;;-1:-1:-1;829:23369:157;;10011:54;;;;:::i;:::-;829:23369;;9952:13;;829:23369;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;:::i;:::-;3327:69:73;;;757:66:37;3327:69:73;1737:93:37;;1948:4;757:66;3556:68:73;-1:-1:-1;;;;;;;;;;;829:23369:157;12708:19;12700:107;1948:4:37;12708:19:157;;829:23369;12708:38;;12700:107;:::i;:::-;829:23369;;12971:20;12967:259;;829:23369;13339:27;;;829:23369;;;13375:33;829:23369;13375:33;;829:23369;13339:69;;;829:23369;;;13503:37;;829:23369;;;;;13544:21;829:23369;13544:21;;;829:23369;13544:21;;;:::i;:::-;829:23369;-1:-1:-1;829:23369:157;;13709:28;;;;;;;;;:::i;:::-;16470:34;829:23369;16520:13;;16539:22;;;;;;16697:19;;;;16515:826;16570:3;16539:22;;;;:::i;:::-;16535:33;;;;;;;16632:22;;;;;:::i;:::-;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13339:27;829:23369;;;;;1948:4:37;16697:79:157;829:23369;;;16882:17;;;;;;829:23369;16882:17;;;;;;:::i;:::-;;;;17005:39;829:23369;;;;;;;;;;;;;;;;;;;;17005:39;:41;829:23369;;17005:41;:::i;:::-;829:23369;;16878:270;17200:17;;;:::i;:::-;829:23369;;17167:51;829:23369;;;;;;17167:51;829:23369;;;;;;17257:73;829:23369;;1948:4:37;829:23369:157;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;8439:57:161;829:23369:157;8439:57:161;;829:23369:157;;;;;;;;;;;;8439:57:161;;;;;;:::i;:::-;829:23369:157;8429:68:161;;17257:73:157;;:::i;:::-;16570:3;829:23369;16520:13;;;;829:23369;;;;16878:270;829:23369;;;;;;;;;;;;;;;;;16878:270;;829:23369;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;16535:33;;;;;829:23369;14478:146;16535:33;;;;;;14589:21;16535:33;829:23369;16535:33;829:23369;;;;;17358:32;13849:30;;;;:::i;:::-;13925:33;;;;;:::i;:::-;14058:21;14140:13;;14058:21;;;:::i;:::-;14140:13;;;:::i;:::-;829:23369;;;6827:303:161;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6827:303:161;;;;;;:::i;:::-;829:23369:157;6804:336:161;;14383:21:157;;;;;:::i;:::-;829:23369;;;;;;;:::i;:::-;;;;;14347:58;;;;829:23369;;;;;;;;;;14420:26;829:23369;;;;;;14420:26;14589:21;:::i;:::-;829:23369;;;;14478:146;;:::i;:::-;1285:66;;;3556:68:73;757:66:37;3556:68:73;829:23369:157;;1285:66;829:23369;;-1:-1:-1;;;1285:66:157;;829:23369;;1285:66;;;;829:23369;1285:66;;829:23369;1285:66;829:23369;;;1285:66;14140:13;;1285:66;829:23369;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;12967:259;13015:56;13057:13;;;;;:::i;:::-;829:23369;;13015:56;:::i;:::-;829:23369;;;;13154:21;829:23369;13154:21;;;:::i;:::-;829:23369;13136:15;:39;12967:259;829:23369;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;13057:13:157;829:23369;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;13057:13:157;829:23369;;;;;;1737:93:37;-1:-1:-1;;;1789:30:37;;829:23369:157;;1789:30:37;829:23369:157;;;;;;;;;;;;;;7153:91;-1:-1:-1;;;;;;;;;;;829:23369:157;7166:77;14321:37:161;1052:614:22;829:23369:157;;;;14342:15:161;;14321:37;;:::i;:::-;7166:77:157;829:23369;;7153:91;:::i;:::-;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10445:19;-1:-1:-1;;;;;;;;;;;829:23369:157;10445:19;829:23369;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10181:36;-1:-1:-1;;;;;;;;;;;829:23369:157;10181:36;829:23369;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;:::i;:::-;9671:31;-1:-1:-1;;;;;;;;;;;829:23369:157;9671:31;:43;1052:614:22;829:23369:157;;;;;-1:-1:-1;829:23369:157;;;;;-1:-1:-1;829:23369:157;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;10736:19;;;829:23369;;;;;10846:26;;829:23369;;;10836:37;;10892:25;;829:23369;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;6699:35;;829:23369;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;9019:25;-1:-1:-1;;;;;;;;;;;829:23369:157;9019:25;829:23369;:::i;:::-;;;;;;-1:-1:-1;;;;;829:23369:157;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;829:23369:157;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;829:23369:157;;;;9498:19;9433:13;9498:19;;9428:120;9448:20;;;;;;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;9470:3;9524:12;;;;;:::i;:::-;829:23369;;;;;;;;;;;;9489:48;;;;:::i;:::-;829:23369;;;;;;;;;9433:13;;829:23369;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;6329:30;-1:-1:-1;;;;;;;;;;;829:23369:157;6329:30;829:23369;;;;;;;;;;;;;;;;;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;829:23369:157;;-1:-1:-1;;;;;;829:23369:157;;;;;;;-1:-1:-1;;;;;829:23369:157;3975:40:29;829:23369:157;;3975:40:29;829:23369:157;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;;;;;;6429:44:30;;;;;829:23369:157;6425:105:30;;;-1:-1:-1;;;;;;;;;;;829:23369:157;;-1:-1:-1;;829:23369:157;;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;6959:1:30;;-1:-1:-1;;;;;829:23369:157;6891:76:30;;:::i;:::-;;;:::i;6959:1::-;-1:-1:-1;;;;;;;;;;;829:23369:157;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:29;;:::i;:::-;829:23369:157;23567:27;;-1:-1:-1;;829:23369:157;;;;;;;;;;6654:20:30;829:23369:157;;;23548:52;;;;829:23369;;;23548:52;;;;;;;:::i;:::-;829:23369;;;;23538:63;;:89;829:23369;;-1:-1:-1;;;;;;;;;;;829:23369:157;23706:24;829:23369;;;;;;23706:24;3816:17;;:::i;:::-;829:23369;;6591:4:30;3791:22:157;;829:23369;3555:1;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;;3985:23;;;;3959;;829:23369;;;;;;;4133:28;;;;;-1:-1:-1;;;;;829:23369:157;;;4083:28;4133;4083;;846:1:161;-1:-1:-1;;;;;846:1:161;;;;;;;829:23369:157;-1:-1:-1;;;;;912:1:161;;846;;;912;;;;;;4571:339:157;14321:37:161;14342:15;14321:37;;:::i;:::-;4725:91:157;-1:-1:-1;;;;;3555:1:157;14321:37:161;14342:15;14321:37;;:::i;4725:91:157:-;829:23369;;14321:37:161;14342:15;14321:37;;:::i;:::-;4830:41:157;829:23369;;:::i;:::-;14342:15:161;829:23369:157;14342:15:161;829:23369:157;;:::i;:::-;4601:40;;;;4571:339;:::i;:::-;5007:25;;;;4979;;829:23369;;;;;;;5112:19;;;;;;5090;;829:23369;;;;;;;;;;;-1:-1:-1;;;829:23369:157;-1:-1:-1;;;;;;;;;;;829:23369:157;;-1:-1:-1;;;;;;;;;;;829:23369:157;;3555:1;829:23369;;6654:20:30;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;-1:-1:-1;;;;;829:23369:157;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;-1:-1:-1;;;;;;;912:1:161;;829:23369:157;;;;912:1:161;-1:-1:-1;;;;;;;912:1:161;;;;;829:23369:157;;;;;;;;-1:-1:-1;;;;;;829:23369:157;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;-1:-1:-1;;;829:23369:157;;;;;;;;6425:105:30;-1:-1:-1;;;6496:23:30;;829:23369:157;;6496:23:30;6429:44;3555:1:157;829:23369;;-1:-1:-1;;;;;829:23369:157;6448:25:30;;6429:44;;;829:23369:157;;;;;;;-1:-1:-1;;829:23369:157;;;;;;:::i;:::-;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;829:23369:157;;-1:-1:-1;;;;;829:23369:157;;;;;4301:16:30;829:23369:157;;4724:16:30;;:34;;;;829:23369:157;;4788:16:30;:50;;;;829:23369:157;4853:13:30;:30;;;;829:23369:157;4849:91:30;;;6959:1;829:23369:157;;;-1:-1:-1;;;;;829:23369:157;-1:-1:-1;;;;;;;;;;;829:23369:157;;;-1:-1:-1;;;;;;;;;;;829:23369:157;4977:67:30;;829:23369:157;6891:76:30;;:::i;6959:1::-;6891:76;;:::i;:::-;2085:15:157;:19;829:23369;;2167:21;;829:23369;;2251:32;;;829:23369;;;2564:2;2528:32;;;;:::i;:::-;829:23369;2508:58;;829:23369;;;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:29;;:::i;:::-;829:23369:157;23567:27;;-1:-1:-1;;829:23369:157;;;;;;;;;;23548:52;;;829:23369;;;23548:52;;829:23369;;;;23548:52;829:23369;;23548:52;:::i;:::-;829:23369;;;;23538:63;;:89;829:23369;;-1:-1:-1;;;;;;;;;;;829:23369:157;;;;;;;23706:24;;;2728:17;;:::i;:::-;829:23369;;;2706:19;;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;829:23369:157;;;;2778:52;;829:23369;;;;;;2778:52;;;;829:23369;;;2755:20;;;829:23369;;;;;;-1:-1:-1;;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;912:1:161;2840:25:157;;;912:1:161;829:23369:157;;:::i;:::-;;;;;;;:::i;:::-;724:13:161;829:23369:157;;1006:18:161;829:23369:157;8616:89:161;;;829:23369:157;3028:22;;;829:23369;;-1:-1:-1;;;;;;912:1:161;;;;;829:23369:157;;;;;;;;;:::i;:::-;;;;3115:65;829:23369;3115:65;;829:23369;3115:65;829:23369;3096:16;;;829:23369;;912:1:161;;829:23369:157;912:1:161;;;829:23369:157;;;;;;;:::i;:::-;;;912:1:161;;;829:23369:157;;912:1:161;;;;;829:23369:157;;;;912:1:161;:::i;:::-;2085:15:157;;829:23369;;912:1:161;;;;:::i;:::-;3262:37:157;;;3232:213;;;;:::i;:::-;5064:101:30;;829:23369:157;;;5064:101:30;829:23369:157;5140:14:30;829:23369:157;-1:-1:-1;;;829:23369:157;-1:-1:-1;;;;;;;;;;;829:23369:157;;-1:-1:-1;;;;;;;;;;;829:23369:157;;;;;5140:14:30;829:23369:157;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;4977:67:30;-1:-1:-1;;;;;;829:23369:157;-1:-1:-1;;;;;;;;;;;829:23369:157;;;-1:-1:-1;;;;;;;;;;;829:23369:157;4977:67:30;;4849:91;-1:-1:-1;;;4906:23:30;;829:23369:157;4906:23:30;;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:30;;4724:34;;;-1:-1:-1;4724:34:30;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;:::i;:::-;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;829:23369:157;10564:23;;829:23369;;-1:-1:-1;;;;;;829:23369:157;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14321:37:161;-1:-1:-1;;;;;;;;;;;829:23369:157;14342:15:161;14321:37;;:::i;:::-;829:23369:157;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7376:91;-1:-1:-1;;;;;;;;;;;829:23369:157;7389:77;14321:37:161;1052:614:22;829:23369:157;;;;14342:15:161;;14321:37;;:::i;7376:91:157:-;829:23369;;;;;7484:21;829:23369;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;829:23369:157;14880:107;829:23369;14888:19;;829:23369;14888:38;;14880:107;:::i;:::-;829:23369;;;15019:19;;;829:23369;;;;;;;;;;;;;;15057:24;15019:62;829:23369;;;;;15339:32;;829:23369;;;;;;;;;;;15339:32;;;829:23369;15339:32;;:::i;:::-;829:23369;15329:43;;829:23369;1052:614:22;829:23369:157;1052:614:22;;;;;;-1:-1:-1;;;;;1052:614:22;;;;;446:4:160;1052:614:22;829:23369:157;1052:614:22;921:66:160;3266:83:22;;15462:4:157;829:23369;;1067:66:160;1066:105;829:23369:157;3266:83:22;;;1222:66:160;829:23369:157;3266:83:22;;;1300:150:160;;;;;;;-1:-1:-1;;;;;829:23369:157;;-1:-1:-1;829:23369:157;;;15546:28;;;829:23369;;;;;;;;15603:33;;829:23369;;15603:35;;;:::i;:::-;829:23369;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;15654:32;;829:23369;;15654:32;-1:-1:-1;;;;;;829:23369:157;;1052:614:22;;11944:10:157;;11907:70;-1:-1:-1;;;;;;;;;;;829:23369:157;6586:23;;829:23369;-1:-1:-1;;;;;829:23369:157;11867:131;;;;;829:23369;;-1:-1:-1;;;11867:131:157;;-1:-1:-1;;;;;829:23369:157;;;;11867:131;;829:23369;;;;;1052:614:22;829:23369:157;;;;11867:131;829:23369;11867:131;829:23369;11867:131;;;;;;;;;;11907:70;829:23369;;;;;;;;11867:131;;;;;;:::i;:::-;829:23369;;11867:131;;;;829:23369;;;;;;;;;11867:131;829:23369;;;11907:70;;;1300:150:160;;;;1052:614:22;;;;829:23369:157;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;6087:22;-1:-1:-1;;;;;;;;;;;829:23369:157;6087:22;829:23369;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;11114:11;;:16;829:23369;;11401:19;-1:-1:-1;;;;;;;;;;;829:23369:157;11262:107;829:23369;11270:19;;829:23369;11270:38;;11262:107;:::i;:::-;11401:19;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;;;;11636:32;;;829:23369;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;;;:::i;:::-;;;;:::i;:::-;12251:37;-1:-1:-1;;;;;;;;;;;829:23369:157;14880:107;14888:19;;;829:23369;14888:38;;14880:107;:::i;:::-;829:23369;;;15019:19;;;829:23369;;;;;;;;;;;;;;15057:24;15019:62;829:23369;;;;;15339:32;;829:23369;;;;;;;;;;;15339:32;;;;;;:::i;:::-;829:23369;15329:43;;829:23369;1052:614:22;;;;;;;;-1:-1:-1;;;;;1052:614:22;;;;;441:6:159;1052:614:22;829:23369:157;1052:614:22;654:66:159;3266:83:22;;764:66:159;829:23369:157;3266:83:22;;;874:66:159;829:23369:157;3266:83:22;;;984:66:159;15339:32:157;3266:83:22;;;1094:66:159;829:23369:157;3266:83:22;;;1204:66:159;1196:6;3266:83:22;;;1314:66:159;1306:6;3266:83:22;;;1424:66:159;829:23369:157;3266:83:22;;;1534:66:159;1526:6;3266:83:22;;;1644:66:159;1636:6;3266:83:22;;;1754:66:159;1746:6;3266:83:22;;;1864:66:159;1856:6;3266:83:22;;;1974:66:159;1966:6;3266:83:22;;;2084:66:159;2076:6;3266:83:22;;;2194:66:159;2186:6;3266:83:22;;;2304:66:159;2296:6;3266:83:22;;;2414:66:159;2406:6;3266:83:22;;;2524:66:159;2516:6;3266:83:22;;;2634:66:159;2626:6;3266:83:22;;;15523:4:157;15339:32;829:23369;2782:66:159;2781:107;2761:6;3266:83:22;;;3042:66:159;15523:4:157;1196:6:159;829:23369:157;2980:129:159;2958:6;3266:83:22;;;3164:66:159;;;3156:6;3266:83:22;;;829:23369:157;3242:150:159;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;15546:28;;;829:23369;;;;;;;;15603:33;;829:23369;;15603:35;;;:::i;:::-;829:23369;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;15654:32;;829:23369;;15654:32;-1:-1:-1;;;;;;829:23369:157;;1052:614:22;;12376:10:157;;12339:70;;12299:133;;;;;829:23369;;-1:-1:-1;;;12299:133:157;;-1:-1:-1;;;;;829:23369:157;;;;12299:133;;829:23369;;;;;;;-1:-1:-1;829:23369:157;;;;;;;;;-1:-1:-1;12299:133:157;;;;;;;;829:23369;12299:133;;;12339:70;829:23369;;;;;;;12299:133;829:23369;12299:133;;;:::i;:::-;829:23369;12299:133;;;829:23369;;;;;;;;;12299:133;829:23369;;;12339:70;;;;829:23369;;;;;;;;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;10308:42;-1:-1:-1;;;;;;;;;;;829:23369:157;10308:42;829:23369;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;829:23369:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;829:23369:157;;;;;;:::o;:::-;;;-1:-1:-1;;;;;829:23369:157;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;829:23369:157;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1052:614:22;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;:::o;:::-;;;;-1:-1:-1;829:23369:157;;;;;-1:-1:-1;829:23369:157;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;829:23369:157;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;912:1:161;;;;;;;;;;;829:23369:157;;;;:::i;:::-;912:1:161;;;829:23369:157;;;912:1:161;;;829:23369:157;912:1:161;;;:::o;:::-;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;:::i;:::-;912:1:161;;;;;;;;;;;;;829:23369:157;912:1:161;;-1:-1:-1;912:1:161;;;;;;:::o;:::-;-1:-1:-1;;;;;912:1:161;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;829:23369:157;;;;;;;:::i;:::-;912:1:161;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;829:23369:157;;;;;:::i;:::-;912:1:161;;;;;;;;829:23369:157;;;;;;;;;;;;;;;;-1:-1:-1;829:23369:157;;-1:-1:-1;829:23369:157;;-1:-1:-1;829:23369:157;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;-1:-1:-1;829:23369:157;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;829:23369:157;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;:::o;:::-;;-1:-1:-1;;;;;829:23369:157;;;;;;;:::o;7518:375::-;14321:37:161;-1:-1:-1;;;;;;;;;;;829:23369:157;14342:15:161;14321:37;;:::i;:::-;7770:22:157;;;829:23369;7722:22;;;;;;7875:11;;;;829:23369;7518:375;:::o;7746:3::-;7793:14;;;;;;:::i;:::-;-1:-1:-1;;;;;829:23369:157;-1:-1:-1;829:23369:157;;;;;;;;;;;;;7769:39;7765:90;;829:23369;;7707:13;;7765:90;7828:12;;;;829:23369;7828:12;:::o;829:23369::-;;;;;;;:::i;:::-;-1:-1:-1;829:23369:157;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;829:23369:157;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;-1:-1:-1;829:23369:157;;-1:-1:-1;829:23369:157;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;:::o;3405:215:29:-;-1:-1:-1;;;;;829:23369:157;3489:22:29;;3485:91;;-1:-1:-1;;;;;;;;;;;829:23369:157;;-1:-1:-1;;;;;;829:23369:157;;;;;;;-1:-1:-1;;;;;829:23369:157;3975:40:29;-1:-1:-1;;3975:40:29;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;829:23369:157;;3509:1:29;3534:31;829:23369:157;-1:-1:-1;;829:23369:157;;;;;;;:::o;3551:161:163:-;3671:19;;;-1:-1:-1;;829:23369:157;;;;;;;;411:1:163;4514:807;;;829:23369:157;4514:807:163;829:23369:157;;4514:807:163;;;;;;;;;;;;;;;3551:161;:::o;2658:162:29:-;-1:-1:-1;;;;;;;;;;;829:23369:157;-1:-1:-1;;;;;829:23369:157;966:10:34;2717:23:29;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:29;966:10:34;2763:40:29;829:23369:157;;-1:-1:-1;2763:40:29;9131:196:161;829:23369:157;;:::i;:::-;;;;;;;:::i;:::-;9250:1:161;829:23369:157;;;9269:12:161;829:23369:157;9218:102:161;;;829:23369:157;;9302:15:161;829:23369:157;;9218:102:161;;829:23369:157;9131:196:161;:::o;829:23369:157:-;;;;;;;;;;;;;;;;:::o;21679:1428::-;;;;912:1:161;;22379:25:157;;;;912:1:161;;;1146:66:27;;1837:24:26;;:71;;;;21679:1428:157;829:23369;;;;;912:1:161;829:23369:157;;912:1:161;829:23369:157;;;;;;876:31:163;;829:23369:157;876:31:163;22379:25:157;876:31:163;;;829:23369:157;-1:-1:-1;829:23369:157;;;;;;;;;;;;;;-1:-1:-1;829:23369:157;;;;876:31:163;;829:23369:157;;876:31:163;;;;;;:::i;:::-;946:2074;829:23369:157;;;946:2074:163;;22379:25:157;946:2074:163;;829:23369:157;;;;;;;;;;;;;;;-1:-1:-1;829:23369:157;;;;946:2074:163;;829:23369:157;;946:2074:163;;;;;;:::i;:::-;3031:265;;-1:-1:-1;3031:265:163;-1:-1:-1;;;;;829:23369:157;;3314:21:163;829:23369:157;;22546:52;;;829:23369;;-1:-1:-1;;;;;;829:23369:157;-1:-1:-1;;;;;829:23369:157;;;;;;;;;-1:-1:-1;22709:3:157;22684:16;;;829:23369;;22680:27;;;;;-1:-1:-1;829:23369:157;;;22379:25;829:23369;;;;;;-1:-1:-1;;;;;829:23369:157;;;;22782:15;;829:23369;;;;;;;-1:-1:-1;;829:23369:157;;;;;22665:13;;22680:27;;;;-1:-1:-1;22884:3:157;829:23369;;22857:25;;;;;829:23369;;-1:-1:-1;;;;;22924:17:157;829:23369;22924:17;;:::i;:::-;829:23369;;;;;;;;-1:-1:-1;829:23369:157;;22955:15;;829:23369;;;-1:-1:-1;829:23369:157;;;;;;;;;;;22842:13;;22857:25;;;22684:16;23009;;829:23369;;;-1:-1:-1;;;;;829:23369:157;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;22837:163;829:23369;22379:25;829:23369;;-1:-1:-1;829:23369:157;22379:25;-1:-1:-1;829:23369:157;-1:-1:-1;829:23369:157;;;;;;23052:28;;;;;;829:23369;21679:1428::o;829:23369::-;;;-1:-1:-1;;;;;829:23369:157;;;;;22379:25;829:23369;;;;;;;;;;-1:-1:-1;829:23369:157;;22379:25;-1:-1:-1;829:23369:157;;;;;;;;;;;;;;;;-1:-1:-1;829:23369:157;;;;;;;;;-1:-1:-1;;;829:23369:157;;22379:25;829:23369;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;22379:25;829:23369;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;1837:71:26;1865:43;;;;:::i;:::-;1837:71;;;;7790:518:161;7901:12;-1:-1:-1;;829:23369:157;;;7790:518:161;;829:23369:157;;;;;;7901:12:161;7941:22;;7901:12;;7941:50;829:23369:157;7941:50:161;;8025:8;;;;;;8001:278;-1:-1:-1;829:23369:157;;-1:-1:-1;;7790:518:161:o;8006:17::-;8064:12;;8094:11;;;;;-1:-1:-1;7916:1:161;;-1:-1:-1;;;8125:11:161:o;8090:119::-;8161:8;8157:52;;-1:-1:-1;;829:23369:157;8006:17:161;;8157:52;8189:5;;7941:50;7970:21;7901:12;;7970:21;:::i;:::-;7941:50;;;829:23369:157;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;:::o;15724:620::-;;15852:22;;;15885:1;15852:22;;;;:::i;:::-;:34;;;829:23369;;15958:22;;;;:::i;:::-;:34;;;15954:85;;16093:22;;;:::i;:::-;829:23369;;;;;;;;;;;;;;;;;;16183:23;;;;;:::i;:::-;20901:30;;829:23369;20947:13;829:23369;;21104:28;829:23369;;;;;;21104:28;;20942:679;20987:3;20962:23;;;;;;829:23369;;;;;;;;;;;;;;21133:18;;;:::i;:::-;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;21104:53;829:23369;;;15852:22;21273:25;;-1:-1:-1;;;;;21273:25:157;;;:::i;:::-;829:23369;21273:30;;:72;;;20987:3;21269:144;;20987:3;-1:-1:-1;;;;;21460:18:157;;;:::i;:::-;829:23369;;-1:-1:-1;;;21452:76:157;;;;;;829:23369;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;-1:-1:-1;;;;;829:23369:157;;;:::i;:::-;;;;;;21452:76;829:23369;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;829:23369:157;;;;;;;;;;;;;21452:76;829:23369;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21452:76;829:23369;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;17167:51;829:23369;;;;;;;;;;;;21452:76;829:23369;;;;;;;;;;;;;;;;;;;;;;;21452:76;;;;;;;;;;-1:-1:-1;;;;;21452:76:157;;;;829:23369;;21452:76;;;;;;;;829:23369;21452:76;;;829:23369;21563:47;;;15885:1;21563:47;;:::i;:::-;20987:3;829:23369;20947:13;;;21452:76;;;;;;;;;;;;;829:23369;21452:76;;;:::i;:::-;;;829:23369;;;;;15885:1;21452:76;;;;;-1:-1:-1;21452:76:157;;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;;;;21452:76;829:23369;;;;;-1:-1:-1;;;;;829:23369:157;;;;;:::i;:::-;;21452:76;829:23369;;;;;;;-1:-1:-1;;829:23369:157;;;;;;;;;;;;21452:76;829:23369;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;912:1:161;829:23369:157;;912:1:161;;;;;-1:-1:-1;;;;;829:23369:157;15852:22;829:23369;;;:::i;:::-;;;;;;;;;;15852:22;829:23369;;;;;;;;;;;;;;;;;;21452:76;829:23369;;;;;;;;15885:1;829:23369;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15885:1;829:23369;;;;;;;;;;;21452:76;829:23369;;;:::i;:::-;;21452:76;829:23369;;;-1:-1:-1;;;;;829:23369:157;;;;;:::i;:::-;;;;;;;;;;;;;;21269:144;21373:25;;;;;:::i;:::-;21269:144;;;21273:72;21308:37;;829:23369;21308:37;;;:::i;:::-;21307:38;21273:72;;829:23369;;;-1:-1:-1;;;829:23369:157;;21452:76;;829:23369;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;20962:23;;;;;;;;21452:76;20962:23;;829:23369;;;;;21638:28;16242:16;;829:23369;16223:36;21452:76;829:23369;;;;;16223:36;829:23369;;7282:41:161;21452:76:157;7282:41:161;;829:23369:157;;;;;;;;7282:41:161;;;829:23369:157;7282:41:161;;:::i;:::-;829:23369:157;7272:52:161;;15724:620:157;:::o;15954:85::-;16008:20;;;16015:13;16008:20;:::o;829:23369::-;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;17439:1645::-;17582:24;;;17617:1;17582:24;;;;:::i;:::-;:36;;;829:23369;;17711:24;;;;:::i;:::-;:36;;;17707:87;;17850:24;;;;:::i;:::-;829:23369;;;;;;;;;;;;;;;;;;17896:21;;;;;17920;17896;;;:::i;:::-;17920;;;829:23369;17920:21;;;;:::i;:::-;829:23369;;;17896:45;829:23369;;;18013:21;;;:::i;:::-;829:23369;18038:29;;;;829:23369;17920:21;829:23369;;;;18013:54;829:23369;;18237:46;829:23369;18261:21;18157:46;18181:21;;;;:::i;:::-;829:23369;18157:46;;:::i;:::-;18261:21;;:::i;:::-;829:23369;18237:46;;:::i;:::-;-1:-1:-1;829:23369:157;;;18417:31;;;829:23369;18465:32;;;;829:23369;;;;;-1:-1:-1;;;;;829:23369:157;;;;18564:19;;;;829:23369;;;;17920:21;;829:23369;18458:138;18533:62;17920:21;18564:19;;829:23369;18564:19;:::i;:::-;:31;829:23369;18533:62;;:::i;:::-;18564:19;829:23369;;;;;;;;;18458:138;;;;;;829:23369;;;;;18458:138;;;;;;;;17439:1645;-1:-1:-1;829:23369:157;18564:19;829:23369;-1:-1:-1;;;18638:185:157;;-1:-1:-1;;;;;829:23369:157;;;18458:138;18638:185;;829:23369;;;;;;;;17920:21;18783:26;;;829:23369;18458:138;829:23369;;;;18638:185;829:23369;-1:-1:-1;18638:185:157;;;;;;;;829:23369;18638:185;;;17439:1645;18924:19;;;;;:::i;:::-;18945:21;;;;:::i;:::-;829:23369;18564:19;829:23369;;;;;18875:92;;18564:19;18458:138;18875:92;;829:23369;;;;;;;;;;;;;;;;;;;;17920:21;829:23369;;;;;-1:-1:-1;;;;;829:23369:157;;;;;18465:32;829:23369;;;;;;;17896:21;18458:138;829:23369;;;;;;;;;;;;;;;;;;;;;;;;;17920:21;829:23369;;;;;;;;;;;18638:185;829:23369;;;;18564:19;1052:614:22;829:23369:157;;;;;;;:::i;:::-;;;;;;;;;;;18875:92;;;;;;;;;829:23369;18875:92;;;829:23369;19054:21;;;;:::i;:::-;18564:19;829:23369;18995:81;17920:21;18995:81;;829:23369;;;18564:19;829:23369;;;;;;;;;;17896:21;829:23369;;;18995:81;;;;;;;:::i;18875:92::-;;;;17920:21;18875:92;;17920:21;18875:92;;;;;;829:23369;18875:92;;;:::i;:::-;;;829:23369;;;;;;19054:21;18875:92;;;;;-1:-1:-1;18875:92:157;;829:23369;;;;;;;18564:19;829:23369;17617:1;829:23369;;;;;;;;;:::i;:::-;;;;17920:21;829:23369;;;17920:21;829:23369;;;;;;;;;;;;;;;;18638:185;;;;;17920:21;18638:185;;17920:21;18638:185;;;;;;829:23369;18638:185;;;:::i;:::-;;;829:23369;;;;;;;18924:19;18638:185;;;;;-1:-1:-1;18638:185:157;;18458:138;17920:21;18458:138;;17920:21;18458:138;;;;;;17920:21;18458:138;;;:::i;:::-;;;829:23369;;;;;;;;;;18458:138;829:23369;;;;18458:138;;;-1:-1:-1;18458:138:157;;829:23369;;;-1:-1:-1;;;829:23369:157;;17920:21;829:23369;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;17920:21;829:23369;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;17920:21;829:23369;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;:::o;19136:1605::-;;19282:27;;;19320:1;19282:27;;;;:::i;:::-;:39;;;829:23369;;19429:27;;;;:::i;:::-;:39;;;19425:90;;19574:27;;;:::i;:::-;829:23369;;;;;;;;;;;;;;;;;;19623:22;;;;;;;;;:::i;:::-;:33;;;829:23369;;;19754:29;;;829:23369;;;;19736:15;:47;:15;;:47;:::i;:::-;19735:72;19787:16;;;829:23369;19735:72;;;:::i;:::-;19826:20;;;;829:23369;;19320:1;829:23369;;;;;;;19826:43;;829:23369;;19982:43;;19950:75;19982:43;;:::i;:::-;19950:75;;:::i;:::-;20077:25;20062:40;20077:25;;;829:23369;20062:40;;:::i;:::-;19736:15;20043:59;829:23369;;20230:34;;;:::i;:::-;19736:15;;829:23369;20282:28;;829:23369;20282:46;829:23369;;;20394:217;20494:45;;;;;912:1:161;;20494:45:157;;;;:::i;:::-;20553:22;;;;;;:::i;:::-;829:23369;;;912:1:161;829:23369:157;912:1:161;;:::i;:::-;829:23369:157;;912:1:161;;:::i;:::-;829:23369:157;;912:1:161;;:::i;:::-;20394:217:157;;:::i;:::-;20627:47;829:23369;20494:45;829:23369;;;;20627:47;829:23369;;;;;;;20494:45;829:23369;;;;;:::i;:::-;;;;;:::i;:::-;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20494:45;829:23369;;;;19623:22;829:23369;;;7522:30:161;912:1;829:23369:157;912:1:161;;7572:32;;912:1;7632:44;;829:23369:157;;;;;7622:55:161;829:23369:157;20494:45;829:23369;7488:279:161;;;829:23369:157;7488:279:161;;829:23369:157;;;20494:45;829:23369;;;19623:22;829:23369;;;19826:20;829:23369;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;7488:279:161;;;;;;829:23369:157;7488:279:161;;;:::i;829:23369:157:-;;;-1:-1:-1;;;;;829:23369:157;;;;;-1:-1:-1;829:23369:157;;;;;;;;;19320:1;829:23369;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;10639:3554:161;;;;;;829:23369:157;17350:29:161;;;829:23369:157;;;;17382:22:161;10954:15;17382:22;;:::i;:::-;17350:77;17382:45;17407:16;;;829:23369:157;17382:45:161;;;:::i;:::-;17350:77;;:::i;:::-;10984:15;;;;;;:82;;10639:3554;10980:706;;;11090:35;;;829:23369:157;;11182:25:161;;;;:::i;:::-;:39;829:23369:157;;11728:24:161;10980:706;;11728:24;;:::i;:::-;3226:200:77;-1:-1:-1;;;829:23369:157;3226:200:77;11793:4:161;3226:200:77;;17350:29:161;3226:200:77;17407:16:161;3226:200:77;;829:23369:157;3226:200:77;829:23369:157;17350:29:161;829:23369:157;;;;;11856:37:161;;;11917:23;;17350:19;11917:23;;829:23369:157;;;;;;;912:1:161;829:23369:157;;:::i;:::-;912:1:161;;;:::i;:::-;829:23369:157;3226:200:77;829:23369:157;;12052:23:161;829:23369:157;;12254:240:161;829:23369:157;12771:272:161;12254:240;;;3226:200:77;12254:240:161;;;;;;;829:23369:157;17350:19:161;829:23369:157;;12860:32:161;;829:23369:157;12771:272:161;;:::i;:::-;12764:279;:::o;829:23369:157:-;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;11852:2312:161;829:23369:157;;;17350:19:161;13064:37;13060:1104;;11852:2312;;;;;829:23369:157;10639:3554:161;:::o;13060:1104::-;13137:199;13174:15;13214:25;13174:15;;;;;829:23369:157;13214:25:161;;829:23369:157;;-1:-1:-1;;;;;829:23369:157;;;;;13137:199:161;;:::i;:::-;13351:27;829:23369:157;13398:13:161;13594:14;829:23369:157;13594:14:161;;13393:734;13437:3;13413:22;;;;;;3927:8:74;3871:27;912:1:161;829:23369:157;;;;;;;;:::i;912:1:161:-;3871:27:74;;:::i;:::-;3927:8;;;;;:::i;:::-;-1:-1:-1;;;;;829:23369:157;;;;;;;;;;;;;;;;13590:523:161;;13437:3;;17350:19;13437:3;13398:13;829:23369:157;13398:13:161;;13590:523;-1:-1:-1;;;;;2780:163:70;829:23369:157;2780:163:70;;;1285:66:157;829:23369;2780:163:70;;;;3327:69:73;;13758:50:161;;;13836:8;17350:19;13836:8;;;13754:223;3556:68:73;17350:19:161;14003:17;3556:68:73;;;14003:17:161;:::i;:::-;:30;;;;13999:96;;13590:523;;;13999:96;14061:11;;;;;;;17350:19;14061:11;:::o;13413:22::-;;;;;;;;829:23369:157;14141:12:161;:::o;829:23369:157:-;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;;;;10980:706:161;10954:15;;;;;;11463:21;;829:23369:157;;11728:24:161;11537:69;;;10980:706;;;;11537:69;11576:15;;11537:69;;;829:23369:157;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;10984:82:161;11034:32;11021:45;11034:32;;;829:23369:157;11021:45:161;;:::i;:::-;10954:15;11003:63;10984:82;;16416:446;-1:-1:-1;;;;;16416:446:161;;829:23369:157;;;;16715:24:161;;;;:::i;:::-;829:23369:157;;;;;;16827:5:161;829:23369:157;;16840:1:161;829:23369:157;16416:446:161;:::o;14956:312::-;;15079:37;14956:312;15079:37;;:::i;:::-;;;;15139;;15132:44;:::o;15075:187::-;15214:37;;15207:44;:::o;7082:141:30:-;829:23369:157;-1:-1:-1;;;;;;;;;;;829:23369:157;;;;7148:18:30;7144:73;;7082:141::o;7144:73::-;7189:17;;;-1:-1:-1;7189:17:30;;-1:-1:-1;7189:17:30;829:23369:157;;-1:-1:-1;;;;;829:23369:157;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;829:23369:157;;;;;;:::o;17050:179:161:-;17202:16;17164:34;17163:59;17050:179;829:23369:157;17169:29:161;;;829:23369:157;;;;17164:34:161;;:::i;:::-;17202:16;;829:23369:157;17163:59:161;;:::i;14511:322::-;14631:50;14665:15;14631:50;;:::i;:::-;14665:15;;;14704:37;;14697:44;:::o;14627:200::-;14779:37;;14772:44;:::o;6993:1787:20:-;;;;;;7600:63;;;;:::i;:::-;7599:64;7595:107;;7953:15;;7949:58;;-1:-1:-1;;8021:25:20;;;8017:68;;2935:1:27;2931:5;4018:14:20;829:23369:157;1052:614:22;;;;;;;;;-1:-1:-1;;;;;1052:614:22;;;;;;;425:3:20;829:23369:157;;;3883:1:27;2935;2931:5;;829:23369:157;425:3:20;3665:84:22;;;3266:83;829:23369:157;3266:83:22;;;3883:1:27;829:23369:157;;;3665:84:22;;;829:23369:157;3266:83:22;;;;;829:23369:157;3266:83:22;;;1573:66:20;829:23369:157;3266:83:22;;;-1:-1:-1;;;829:23369:157;3266:83:22;;;531:131:25;;829:23369:157;3266:83:22;;;;;;3883:1:27;829:23369:157;3665:84:22;;2935:1:27;3665:84:22;;829:23369:157;531:131:25;;5688:10:20;;;3266:83:22;;3665:84;829:23369:157;1146:66:27;;531:131:25;;6076:3:20;829:23369:157;-1:-1:-1;;;;;829:23369:157;;;6076:3:20;829:23369:157;;6054:44:20;1146:66:27;;;1852::20;1052:614:22;1852:66:20;;829:23369:157;1052:614:22;829:23369:157;6132:32:20;6125:57;8559:14;;8555:57;;1146:66:27;3389:2;6076:3:20;1146:66:27;829:23369:157;1146:66:27;648:2:20;1146:66:27;;;6396:43:26;;1146:66:27;;829:23369:157;3266:83:22;;829:23369:157;3266:83:22;;;;;1052:614;3266:83;;;1146:66:27;;6954:42:26;;-1:-1:-1;;829:23369:157;1530:4:24;3266:83:22;;;;;;2935:1:27;1640:140:24;;;829:23369:157;1640:140:24;1135:209:25;829:23369:157;1135:209:25;648:2:20;1135:209:25;1052:614:22;829:23369:157;;;;1052:614:22;829:23369:157;1135:209:25;4357:141:27;9285:100:26;6993:1787:20;:::o;8017:68::-;8062:12;;;;;;829:23369:157;8062:12:20;:::o;17440:424:161:-;829:23369:157;;:::i;:::-;-1:-1:-1;17701:51:161;;;829:23369:157;17819:27:161;;;829:23369:157;;;;;;;;17772:15:161;;-1:-1:-1;;;;;829:23369:157;;;;:::i;:::-;;;;:::i;:::-;;;17560:297:161;;;829:23369:157;17772:15:161;829:23369:157;:::i;:::-;;17560:297:161;;829:23369:157;17560:297:161;;;829:23369:157;17440:424:161;:::o;15555:855::-;;15765:54;15687;;;829:23369:157;15765:54:161;;829:23369:157;15893:10:161;;;829:23369:157;;15969:9:161;;;;16001;;;;;16033;;;16134:14;;;;;15555:855;829:23369:157;;;16373:30:161;;;16366:37;;15555:855;:::o;16373:30::-;16388:14;;15555:855;-1:-1:-1;15555:855:161:o;829:23369:157:-;;;-1:-1:-1;;;829:23369:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;829:23369:157;;;;;;;16134:14:161;;;;;829:23369:157;;;;;;;;;;;;;;;;;;;;;;;;;2129:778:74;829:23369:157;;;2129:778:74;2319:2;2299:22;;2319:2;;2751:25;2535:196;;;;;;;;;;;;;;;-1:-1:-1;2535:196:74;2751:25;;:::i;:::-;2744:32;;;;;:::o;2295:606::-;2807:83;;2823:1;2807:83;2827:35;2807:83;;:::o;7280:532::-;829:23369:157;;;;;;7366:29:74;;;7411:7;;:::o;7362:444::-;829:23369:157;7462:38:74;;829:23369:157;;7523:23:74;;;7375:20;7523:23;829:23369:157;7375:20:74;7523:23;7458:348;7576:35;7567:44;;7576:35;;7634:46;;;;7375:20;7634:46;829:23369:157;;;7375:20:74;7634:46;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;;;7375:20;7763:32;829:23369:157;;;7375:20:74;7763:32;1768:251:27;-1:-1:-1;;913:66:27;702;;913;;;;;1986:15;1976:29;;1969:43;913:66;-1:-1:-1;;913:66:27;;1950:15;:62;1768:251;:::o;5203:1551:74:-;;;6283:66;6270:79;;6266:164;;829:23369:157;;;;;;-1:-1:-1;829:23369:157;;;;;;;;;;;;;;;;;;;6541:24:74;;;;;;;;;-1:-1:-1;6541:24:74;-1:-1:-1;;;;;829:23369:157;;6579:20:74;6575:113;;6698:49;-1:-1:-1;6698:49:74;-1:-1:-1;5203:1551:74;:::o;6575:113::-;6615:62;-1:-1:-1;6615:62:74;6541:24;6615:62;-1:-1:-1;6615:62:74;:::o;6266:164::-;6365:54;;;6381:1;6365:54;6385:30;6365:54;;:::o","linkReferences":{}},"methodIdentifiers":{"areValidators(address[])":"8f381dbe","codeState(bytes32)":"c13911e8","codesStates(bytes32[])":"82bdeaad","commitBatch((bytes32,uint48,bytes32,uint8,((address,bytes32,bool,address,uint128,bool,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4),bool)[])[],bytes32)[],(bytes32,bool)[],((uint256,bytes32),((address,uint256)[],uint256,address),uint48)[],((uint256,uint256),bytes,address[],uint256)[]),uint8,bytes[])":"b24fcac0","computeSettings()":"84d22a4f","createProgram(bytes32,bytes32,address)":"3683c4d2","createProgramWithAbiInterface(bytes32,bytes32,address,address)":"0c18d277","genesisBlockHash()":"28e24b3d","genesisTimestamp()":"cacf66ab","initialize(address,address,address,address,uint256,uint256,uint256,(uint256,uint256),bytes,address[])":"53f7fd48","isValidator(address)":"facd743b","latestCommittedBatchHash()":"71a8cf2d","latestCommittedBatchTimestamp()":"d456fd51","lookupGenesisHash()":"8b1edf1e","middleware()":"f4f20ac0","mirrorImpl()":"e6fabc09","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCodeIds(address[])":"baaf0201","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32)":"120e3f1e","setMirror(address)":"3d43b418","signingThresholdFraction()":"e3a6684f","storageView()":"c2eb812f","timelines()":"9eb939a8","transferOwnership(address)":"f2fde38b","validatedCodesCount()":"007a32e7","validators()":"ca1e7819","validatorsAggregatedPublicKey()":"3bd109fa","validatorsCount()":"ed612f8c","validatorsThreshold()":"edc87225","validatorsVerifiableSecretSharingCommitment()":"a5d53a44","validatorsVssCommitmentHash()":"3b49d011","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"}],\"name\":\"AnnouncesCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"BatchCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"name\":\"ComputationSettingsChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eraIndex\",\"type\":\"uint256\"}],\"name\":\"ValidatorsCommittedForEra\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"}],\"name\":\"areValidators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_codesIds\",\"type\":\"bytes32[]\"}],\"name\":\"codesStates\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint48\",\"name\":\"blockTimestamp\",\"type\":\"uint48\"},{\"internalType\":\"bytes32\",\"name\":\"previousCommittedBatchHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"expiry\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"exited\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"inheritor\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"valueToReceiveNegativeSign\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct Gear.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"call\",\"type\":\"bool\"}],\"internalType\":\"struct Gear.Message[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"}],\"internalType\":\"struct Gear.ChainCommitment[]\",\"name\":\"chainCommitment\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct Gear.CodeCommitment[]\",\"name\":\"codeCommitments\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"internalType\":\"struct Gear.OperatorRewardsCommitment\",\"name\":\"operators\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.StakerRewards[]\",\"name\":\"distribution\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct Gear.StakerRewardsCommitment\",\"name\":\"stakers\",\"type\":\"tuple\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"}],\"internalType\":\"struct Gear.RewardsCommitment[]\",\"name\":\"rewardsCommitment\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"aggregatedPublicKey\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"verifiableSecretSharingCommitment\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"eraIndex\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.ValidatorsCommitment[]\",\"name\":\"validatorsCommitment\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.BatchCommitment\",\"name\":\"_batch\",\"type\":\"tuple\"},{\"internalType\":\"enum Gear.SignatureType\",\"name\":\"_signatureType\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"_signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeSettings\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ComputationSettings\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_overrideInitializer\",\"type\":\"address\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_overrideInitializer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_abiInterface\",\"type\":\"address\"}],\"name\":\"createProgramWithAbiInterface\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisTimestamp\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_middleware\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_eraDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_electionDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validationDelay\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"_aggregatedPublicKey\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_verifiableSecretSharingCommitment\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestCommittedBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestCommittedBatchTimestamp\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lookupGenesisHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"middleware\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_programId\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_programsIds\",\"type\":\"address[]\"}],\"name\":\"programsCodeIds\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newMirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdFraction\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storageView\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"number\",\"type\":\"uint32\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"}],\"internalType\":\"struct Gear.GenesisBlockInfo\",\"name\":\"genesisBlock\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"}],\"internalType\":\"struct Gear.CommittedBatchInfo\",\"name\":\"latestCommittedBatch\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"middleware\",\"type\":\"address\"}],\"internalType\":\"struct Gear.AddressBook\",\"name\":\"implAddresses\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"thresholdNumerator\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"thresholdDenominator\",\"type\":\"uint128\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"aggregatedPublicKey\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"verifiableSecretSharingCommitmentPointer\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"list\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"useFromTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.ValidatorsView\",\"name\":\"validators0\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"aggregatedPublicKey\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"verifiableSecretSharingCommitmentPointer\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"list\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"useFromTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.ValidatorsView\",\"name\":\"validators1\",\"type\":\"tuple\"}],\"internalType\":\"struct Gear.ValidationSettingsView\",\"name\":\"validationSettings\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ComputationSettings\",\"name\":\"computeSettings\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"era\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"election\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validationDelay\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.Timelines\",\"name\":\"timelines\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"programsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validatedCodesCount\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouter.StorageView\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timelines\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"era\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"election\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validationDelay\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.Timelines\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsAggregatedPublicKey\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.AggregatedPublicKey\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsVerifiableSecretSharingCommitment\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsVssCommitmentHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"AnnouncesCommitted(bytes32)\":{\"details\":\"This is an *informational* event, signaling that the all transitions until head were committed.\",\"params\":{\"head\":\"The hash of committed announces chain head.\"}},\"BatchCommitted(bytes32)\":{\"details\":\"This is an *informational* event, signaling that all commitments in batch has been applied.\",\"params\":{\"hash\":\"Batch keccak256 hash, see Gear.batchCommitmentHash.\"}},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"This is an *informational* event, signaling the results of code validation.\",\"params\":{\"codeId\":\"The ID of the code that was validated.\",\"valid\":\"The result of the validation: indicates whether the code ID can be used for program creation.\"}},\"CodeValidationRequested(bytes32)\":{\"details\":\"This is a *requesting* event, signaling that validators need to download and validate the code from the transaction blob.\",\"params\":{\"codeId\":\"The expected code ID of the applied WASM blob, represented as a Blake2 hash.\"}},\"ComputationSettingsChanged(uint64,uint128)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to change the computation settings. Users and program authors may want to adjust their practices, while validators need to apply the changes internally starting from the next block.\",\"params\":{\"threshold\":\"The amount of Gear gas initially allocated for free to allow the program to decide if it wants to process the incoming message.\",\"wvaraPerSecond\":\"The amount of WVara to be charged from the program's execution balance per second of computation.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProgramCreated(address,bytes32)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling the creation of a new program and its Ethereum mirror. Validators need to initialize it with a zeroed hash state internally.\",\"params\":{\"actorId\":\"ID of the actor that was created. It is accessible inside the co-processor and on Ethereum by this identifier.\",\"codeId\":\"The code ID of the WASM implementation of the created program.\"}},\"StorageSlotChanged(bytes32)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to wipe the router state, rendering all previously existing codes and programs ineligible. Validators need to wipe their databases immediately.\"},\"ValidatorsCommittedForEra(uint256)\":{\"details\":\"This is an *informational* and *request* event, signaling that validators has been set for the next era.\",\"params\":{\"eraIndex\":\"The index of the era for which the validators have been committed.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"reinitialize()\":{\"custom:oz-upgrades-validate-as-initializer\":\"\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"storageView()\":{\"details\":\"Returns the storage view of the contract storage.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"AnnouncesCommitted(bytes32)\":{\"notice\":\"Emitted when all necessary state transitions have been applied and states have changed.\"},\"BatchCommitted(bytes32)\":{\"notice\":\"Emitted when batch of commitments has been applied.\"},\"CodeGotValidated(bytes32,bool)\":{\"notice\":\"Emitted when a code, previously requested for validation, receives validation results, so its CodeStatus changed.\"},\"CodeValidationRequested(bytes32)\":{\"notice\":\"Emitted when a new code validation request is submitted.\"},\"ComputationSettingsChanged(uint64,uint128)\":{\"notice\":\"Emitted when the computation settings have been changed.\"},\"ProgramCreated(address,bytes32)\":{\"notice\":\"Emitted when a new program within the co-processor is created and is now available on-chain.\"},\"StorageSlotChanged(bytes32)\":{\"notice\":\"Emitted when the router's storage slot has been changed.\"},\"ValidatorsCommittedForEra(uint256)\":{\"notice\":\"Emitted when validators for the next era has been set.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@symbioticfi/core/=lib/symbiotic-rewards/lib/core/\",\":core/=lib/symbiotic-rewards/lib/core/\",\":ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":script/=script/\",\":src/=src/\",\":symbiotic-core/=lib/symbiotic-core/\",\":symbiotic-rewards/=lib/symbiotic-rewards/\",\":test/=test/\"],\"viaIR\":true},\"sources\":{\"lib/frost-secp256k1-evm/src/FROST.sol\":{\"keccak256\":\"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8\",\"dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA\"]},\"lib/frost-secp256k1-evm/src/utils/Memory.sol\":{\"keccak256\":\"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294\",\"dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb\",\"dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab\",\"dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol\":{\"keccak256\":\"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a\",\"dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv\"]},\"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol\":{\"keccak256\":\"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf\",\"dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol\":{\"keccak256\":\"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c\",\"dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"lib/openzeppelin-contracts/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de\",\"dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol\":{\"keccak256\":\"0x5360739db087f427430f8566608e9267df704d96928337a3a3b3e5382925c57f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec939f4b4f68ca36961fd5ea7a417a6a390715173a6999254a2f0a34e9298503\",\"dweb:/ipfs/QmVEE8fRTjXE9jQ5pyKrPSyb9FPPtaWwsqjCdcxaPvAWwW\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"src/IMiddleware.sol\":{\"keccak256\":\"0x0875a0367485080460121eb75740dec89415b59f9940a781c6ccf684cccf1a90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abf8522c1c60625ecfab48ca43fec7ce61d787d71cfaa7b5ecff22682ad38570\",\"dweb:/ipfs/QmR7uYiQieqGkFk6tJsMuUFFFZTXN4DEdyTbxSHQE6mw3D\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x2b43176b08617d83a2940156abcfcbcc44e9f764501b35b5b81ddbfb80a7e904\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5cf6c062db5bc4daa511f2b4c1ba3899dbf2b43e6addf8f0e81539bd67471b53\",\"dweb:/ipfs/QmVNrK3QkTC2F4a9Yu6kJb9hu12YXAQDKi2jhZAkZAhgab\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xa774e6ad8cad715a5dda22c1a328bb06b71e54629352d3e027502d1c80ea0a8e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://403f2ebf24110c6d767ddbd0d4fc1f5f55d94fdc656272cf08b68d95f06d7d1d\",\"dweb:/ipfs/QmPkCszf5rWqQHj99J62cdJyn4qpHsKbqyi36pXaDVEeMY\"]},\"src/Router.sol\":{\"keccak256\":\"0x8333f35d6f8dc3984402c0685ff6af8f69b977fa3b127d9bc632045f36de39a3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://723c26358cf6be220ff853bbd2a43acbabbb1e4ab37557e440986857aea10836\",\"dweb:/ipfs/QmWwb2ZSMfecSDh51EVzm7gUeeqNsjHqvgzWZZ6fmH8jqV\"]},\"src/libraries/Clones.sol\":{\"keccak256\":\"0xecec126e66d2c9a3afcdba6ec4f0e2d8e900f82cc10b98ce6bc6de684b3486f4\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5216b8a2d3fecab77bbc611dc62601a82f199fbe12ed24133a7a106b3e715451\",\"dweb:/ipfs/Qma88bB6S8DPiiqodfCrSxzXoZZZPkQnagEbDwMxVBabQe\"]},\"src/libraries/ClonesSmall.sol\":{\"keccak256\":\"0x3e1ea4f9c4d5c3a7715cd3937748a9e945b89de4c5c5570a6dce28fefabf0afb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8bbc0e90470a4f2204bb4041e15f641302e00f46dabfc47e6576ed18f61caf4c\",\"dweb:/ipfs/QmfHcgAJvTgesjbP3YGKtK1BFCqngDZxisvoZQ329RvQcm\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0x4ed891c99c612ab3aa6c740a62fce18921e6e5ea4454acbf85c55e674d4fa77c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a8736bf7c0228ef51626284c1da0b9d1cda396a38d1c3aec5e9bac54627e6f80\",\"dweb:/ipfs/QmdEMYjzn5a7Crm5RXZSZoX4RFZ9GHzAvkuKHu6TtyKvxk\"]},\"src/libraries/SSTORE2.sol\":{\"keccak256\":\"0xfd3e14bf6ac87bb6c3b08afd021efb1126dc40aaa9b46ec2a30033a19e895b02\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a99b52f0b327b40bea0ec74c312e6503263ab819141ab0c219c25aaa0b0014b8\",\"dweb:/ipfs/QmWT89Zrj1KQ1QXWvZ3WeVQANeWJ6RwqdTa5HncGxy3Zaq\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"bytes32","name":"head","type":"bytes32","indexed":false}],"type":"event","name":"AnnouncesCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32","indexed":false}],"type":"event","name":"BatchCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"threshold","type":"uint64","indexed":false},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128","indexed":false}],"type":"event","name":"ComputationSettingsChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"actorId","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32","indexed":false}],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[{"internalType":"uint256","name":"eraIndex","type":"uint256","indexed":false}],"type":"event","name":"ValidatorsCommittedForEra","anonymous":false},{"inputs":[{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"view","type":"function","name":"areValidators","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum Gear.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32[]","name":"_codesIds","type":"bytes32[]"}],"stateMutability":"view","type":"function","name":"codesStates","outputs":[{"internalType":"enum Gear.CodeState[]","name":"","type":"uint8[]"}]},{"inputs":[{"internalType":"struct Gear.BatchCommitment","name":"_batch","type":"tuple","components":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint48","name":"blockTimestamp","type":"uint48"},{"internalType":"bytes32","name":"previousCommittedBatchHash","type":"bytes32"},{"internalType":"uint8","name":"expiry","type":"uint8"},{"internalType":"struct Gear.ChainCommitment[]","name":"chainCommitment","type":"tuple[]","components":[{"internalType":"struct Gear.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"bool","name":"exited","type":"bool"},{"internalType":"address","name":"inheritor","type":"address"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"bool","name":"valueToReceiveNegativeSign","type":"bool"},{"internalType":"struct Gear.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct Gear.Message[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct Gear.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]},{"internalType":"bool","name":"call","type":"bool"}]}]},{"internalType":"bytes32","name":"head","type":"bytes32"}]},{"internalType":"struct Gear.CodeCommitment[]","name":"codeCommitments","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"struct Gear.RewardsCommitment[]","name":"rewardsCommitment","type":"tuple[]","components":[{"internalType":"struct Gear.OperatorRewardsCommitment","name":"operators","type":"tuple","components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"}]},{"internalType":"struct Gear.StakerRewardsCommitment","name":"stakers","type":"tuple","components":[{"internalType":"struct Gear.StakerRewards[]","name":"distribution","type":"tuple[]","components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}]},{"internalType":"uint48","name":"timestamp","type":"uint48"}]},{"internalType":"struct Gear.ValidatorsCommitment[]","name":"validatorsCommitment","type":"tuple[]","components":[{"internalType":"struct Gear.AggregatedPublicKey","name":"aggregatedPublicKey","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"internalType":"bytes","name":"verifiableSecretSharingCommitment","type":"bytes"},{"internalType":"address[]","name":"validators","type":"address[]"},{"internalType":"uint256","name":"eraIndex","type":"uint256"}]}]},{"internalType":"enum Gear.SignatureType","name":"_signatureType","type":"uint8"},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBatch"},{"inputs":[],"stateMutability":"view","type":"function","name":"computeSettings","outputs":[{"internalType":"struct Gear.ComputationSettings","name":"","type":"tuple","components":[{"internalType":"uint64","name":"threshold","type":"uint64"},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128"}]}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"address","name":"_overrideInitializer","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"address","name":"_overrideInitializer","type":"address"},{"internalType":"address","name":"_abiInterface","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"createProgramWithAbiInterface","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisTimestamp","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"address","name":"_middleware","type":"address"},{"internalType":"uint256","name":"_eraDuration","type":"uint256"},{"internalType":"uint256","name":"_electionDuration","type":"uint256"},{"internalType":"uint256","name":"_validationDelay","type":"uint256"},{"internalType":"struct Gear.AggregatedPublicKey","name":"_aggregatedPublicKey","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"internalType":"bytes","name":"_verifiableSecretSharingCommitment","type":"bytes"},{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"view","type":"function","name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"latestCommittedBatchHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"latestCommittedBatchTimestamp","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"lookupGenesisHash"},{"inputs":[],"stateMutability":"view","type":"function","name":"middleware","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorImpl","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_programId","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address[]","name":"_programsIds","type":"address[]"}],"stateMutability":"view","type":"function","name":"programsCodeIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"address","name":"newMirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdFraction","outputs":[{"internalType":"uint128","name":"","type":"uint128"},{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"storageView","outputs":[{"internalType":"struct IRouter.StorageView","name":"","type":"tuple","components":[{"internalType":"struct Gear.GenesisBlockInfo","name":"genesisBlock","type":"tuple","components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint32","name":"number","type":"uint32"},{"internalType":"uint48","name":"timestamp","type":"uint48"}]},{"internalType":"struct Gear.CommittedBatchInfo","name":"latestCommittedBatch","type":"tuple","components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint48","name":"timestamp","type":"uint48"}]},{"internalType":"struct Gear.AddressBook","name":"implAddresses","type":"tuple","components":[{"internalType":"address","name":"mirror","type":"address"},{"internalType":"address","name":"wrappedVara","type":"address"},{"internalType":"address","name":"middleware","type":"address"}]},{"internalType":"struct Gear.ValidationSettingsView","name":"validationSettings","type":"tuple","components":[{"internalType":"uint128","name":"thresholdNumerator","type":"uint128"},{"internalType":"uint128","name":"thresholdDenominator","type":"uint128"},{"internalType":"struct Gear.ValidatorsView","name":"validators0","type":"tuple","components":[{"internalType":"struct Gear.AggregatedPublicKey","name":"aggregatedPublicKey","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"internalType":"address","name":"verifiableSecretSharingCommitmentPointer","type":"address"},{"internalType":"address[]","name":"list","type":"address[]"},{"internalType":"uint256","name":"useFromTimestamp","type":"uint256"}]},{"internalType":"struct Gear.ValidatorsView","name":"validators1","type":"tuple","components":[{"internalType":"struct Gear.AggregatedPublicKey","name":"aggregatedPublicKey","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"internalType":"address","name":"verifiableSecretSharingCommitmentPointer","type":"address"},{"internalType":"address[]","name":"list","type":"address[]"},{"internalType":"uint256","name":"useFromTimestamp","type":"uint256"}]}]},{"internalType":"struct Gear.ComputationSettings","name":"computeSettings","type":"tuple","components":[{"internalType":"uint64","name":"threshold","type":"uint64"},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128"}]},{"internalType":"struct Gear.Timelines","name":"timelines","type":"tuple","components":[{"internalType":"uint256","name":"era","type":"uint256"},{"internalType":"uint256","name":"election","type":"uint256"},{"internalType":"uint256","name":"validationDelay","type":"uint256"}]},{"internalType":"uint256","name":"programsCount","type":"uint256"},{"internalType":"uint256","name":"validatedCodesCount","type":"uint256"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"timelines","outputs":[{"internalType":"struct Gear.Timelines","name":"","type":"tuple","components":[{"internalType":"uint256","name":"era","type":"uint256"},{"internalType":"uint256","name":"election","type":"uint256"},{"internalType":"uint256","name":"validationDelay","type":"uint256"}]}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsAggregatedPublicKey","outputs":[{"internalType":"struct Gear.AggregatedPublicKey","name":"","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsVerifiableSecretSharingCommitment","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsVssCommitmentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"reinitialize()":{"custom:oz-upgrades-validate-as-initializer":""},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"storageView()":{"details":"Returns the storage view of the contract storage."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@symbioticfi/core/=lib/symbiotic-rewards/lib/core/","core/=lib/symbiotic-rewards/lib/core/","ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","script/=script/","src/=src/","symbiotic-core/=lib/symbiotic-core/","symbiotic-rewards/=lib/symbiotic-rewards/","test/=test/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"lib/frost-secp256k1-evm/src/FROST.sol":{"keccak256":"0xc37b8096d9d4597e7dda23fd7de93af34b3894c0691c93e8dd9270663326ad7f","urls":["bzz-raw://bc72630ad2b23cfdb1257f3360e35c4aaa3186d887e5d5e4f9a060425034c0a8","dweb:/ipfs/QmbKQq2isq95JNF6j8eSzY8Mn1PudzD9sw23ByJZnViHFA"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/Memory.sol":{"keccak256":"0xf10f541a5befe201ff5d3f42648bb5152ff144a03400ff5440d8fec64d4dd859","urls":["bzz-raw://0eb9ce5a0095748d9c3e1a428a3809266262d69e5782b775bed9704d93a3f294","dweb:/ipfs/QmXwjnrfvULFJqKxogvYqPZfQ2sLL9Gaa2gPwZMmHeaVFf"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/ECDSA.sol":{"keccak256":"0x4ae543858b7c07ab16b55e8fecab2c12c6dfe5f8e054d0320ee98d76174ffa56","urls":["bzz-raw://5c7416bb4a7d09febb9cb3eee062cc3d72e53a93b14505fcabc7a63b25968deb","dweb:/ipfs/QmUp5eEJXsm5XECi8YbMAAqEAwvqojFEBX1M4CuEAPhLCF"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Hashes.sol":{"keccak256":"0x95e49ee62184f42ed4289a6a9c37e0202fadc1c18eba9064d4d7f9417a32defc","urls":["bzz-raw://034820307fcb2ccdc9cdf6788c149d525d07e7426c09e2c31c584517f0d505ab","dweb:/ipfs/QmdgfZKbnrHEMwPfYCunNXLY4RXeTpitEVo1xeem3YjkfD"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Schnorr.sol":{"keccak256":"0xe2d604d35f469e2779ca05738036cd802464fa075437ecca8cadfafddcad916b","urls":["bzz-raw://9b900c1eb913adb1cb40b4b0724751bc15859791d1eb65da8a8d6d562f397d9a","dweb:/ipfs/QmPyorx16J8VTmXf3uebaP1mVezV48gBuANJPV2cnoqtFv"],"license":"MIT"},"lib/frost-secp256k1-evm/src/utils/cryptography/Secp256k1.sol":{"keccak256":"0xef6566d26fe2038c3a0e6a735d4a3df2d1f0a8253a96a897a26b3f482391726a","urls":["bzz-raw://82d883305ba0104e27e1ba17e580783c61347049c034980f5ecefc5967a1f6cf","dweb:/ipfs/QmZDUJmZpyswiSASXkWUyx4eNqVcULpDTkUQrnpNe93Xoh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol":{"keccak256":"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba","urls":["bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c","dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Arrays.sol":{"keccak256":"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e","urls":["bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d","dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Comparators.sol":{"keccak256":"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58","urls":["bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd","dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26","urls":["bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2","dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4","urls":["bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e","dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946","urls":["bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de","dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631","urls":["bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59","dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol":{"keccak256":"0x5360739db087f427430f8566608e9267df704d96928337a3a3b3e5382925c57f","urls":["bzz-raw://ec939f4b4f68ca36961fd5ea7a417a6a390715173a6999254a2f0a34e9298503","dweb:/ipfs/QmVEE8fRTjXE9jQ5pyKrPSyb9FPPtaWwsqjCdcxaPvAWwW"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77","urls":["bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b","dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS"],"license":"MIT"},"src/IMiddleware.sol":{"keccak256":"0x0875a0367485080460121eb75740dec89415b59f9940a781c6ccf684cccf1a90","urls":["bzz-raw://abf8522c1c60625ecfab48ca43fec7ce61d787d71cfaa7b5ecff22682ad38570","dweb:/ipfs/QmR7uYiQieqGkFk6tJsMuUFFFZTXN4DEdyTbxSHQE6mw3D"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x2b43176b08617d83a2940156abcfcbcc44e9f764501b35b5b81ddbfb80a7e904","urls":["bzz-raw://5cf6c062db5bc4daa511f2b4c1ba3899dbf2b43e6addf8f0e81539bd67471b53","dweb:/ipfs/QmVNrK3QkTC2F4a9Yu6kJb9hu12YXAQDKi2jhZAkZAhgab"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xa774e6ad8cad715a5dda22c1a328bb06b71e54629352d3e027502d1c80ea0a8e","urls":["bzz-raw://403f2ebf24110c6d767ddbd0d4fc1f5f55d94fdc656272cf08b68d95f06d7d1d","dweb:/ipfs/QmPkCszf5rWqQHj99J62cdJyn4qpHsKbqyi36pXaDVEeMY"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0x8333f35d6f8dc3984402c0685ff6af8f69b977fa3b127d9bc632045f36de39a3","urls":["bzz-raw://723c26358cf6be220ff853bbd2a43acbabbb1e4ab37557e440986857aea10836","dweb:/ipfs/QmWwb2ZSMfecSDh51EVzm7gUeeqNsjHqvgzWZZ6fmH8jqV"],"license":"UNLICENSED"},"src/libraries/Clones.sol":{"keccak256":"0xecec126e66d2c9a3afcdba6ec4f0e2d8e900f82cc10b98ce6bc6de684b3486f4","urls":["bzz-raw://5216b8a2d3fecab77bbc611dc62601a82f199fbe12ed24133a7a106b3e715451","dweb:/ipfs/Qma88bB6S8DPiiqodfCrSxzXoZZZPkQnagEbDwMxVBabQe"],"license":"UNLICENSED"},"src/libraries/ClonesSmall.sol":{"keccak256":"0x3e1ea4f9c4d5c3a7715cd3937748a9e945b89de4c5c5570a6dce28fefabf0afb","urls":["bzz-raw://8bbc0e90470a4f2204bb4041e15f641302e00f46dabfc47e6576ed18f61caf4c","dweb:/ipfs/QmfHcgAJvTgesjbP3YGKtK1BFCqngDZxisvoZQ329RvQcm"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0x4ed891c99c612ab3aa6c740a62fce18921e6e5ea4454acbf85c55e674d4fa77c","urls":["bzz-raw://a8736bf7c0228ef51626284c1da0b9d1cda396a38d1c3aec5e9bac54627e6f80","dweb:/ipfs/QmdEMYjzn5a7Crm5RXZSZoX4RFZ9GHzAvkuKHu6TtyKvxk"],"license":"UNLICENSED"},"src/libraries/SSTORE2.sol":{"keccak256":"0xfd3e14bf6ac87bb6c3b08afd021efb1126dc40aaa9b46ec2a30033a19e895b02","urls":["bzz-raw://a99b52f0b327b40bea0ec74c312e6503263ab819141ab0c219c25aaa0b0014b8","dweb:/ipfs/QmWT89Zrj1KQ1QXWvZ3WeVQANeWJ6RwqdTa5HncGxy3Zaq"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":79316,"exportedSymbols":{"Clones":[79688],"ClonesSmall":[79769],"FROST":[40134],"Gear":[80917],"IERC20":[45587],"IMiddleware":[72281],"IMirror":[72455],"IRouter":[72769],"OwnableUpgradeable":[41409],"ReentrancyGuardTransientUpgradeable":[42870],"Router":[79315],"SSTORE2":[81333],"StorageSlot":[47840]},"nodeType":"SourceUnit","src":"39:24160:157","nodes":[{"id":77258,"nodeType":"PragmaDirective","src":"39:24:157","nodes":[],"literals":["solidity","^","0.8",".28"]},{"id":77260,"nodeType":"ImportDirective","src":"65:46:157","nodes":[],"absolutePath":"src/libraries/Clones.sol","file":"./libraries/Clones.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":79689,"symbolAliases":[{"foreign":{"id":77259,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79688,"src":"73:6:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77262,"nodeType":"ImportDirective","src":"112:56:157","nodes":[],"absolutePath":"src/libraries/ClonesSmall.sol","file":"./libraries/ClonesSmall.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":79770,"symbolAliases":[{"foreign":{"id":77261,"name":"ClonesSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79769,"src":"120:11:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77264,"nodeType":"ImportDirective","src":"169:42:157","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":80918,"symbolAliases":[{"foreign":{"id":77263,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"177:4:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77266,"nodeType":"ImportDirective","src":"212:48:157","nodes":[],"absolutePath":"src/libraries/SSTORE2.sol","file":"./libraries/SSTORE2.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":81334,"symbolAliases":[{"foreign":{"id":77265,"name":"SSTORE2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81333,"src":"220:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77268,"nodeType":"ImportDirective","src":"261:52:157","nodes":[],"absolutePath":"lib/frost-secp256k1-evm/src/FROST.sol","file":"frost-secp256k1-evm/FROST.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":40135,"symbolAliases":[{"foreign":{"id":77267,"name":"FROST","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40134,"src":"269:5:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77270,"nodeType":"ImportDirective","src":"314:38:157","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":72456,"symbolAliases":[{"foreign":{"id":77269,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"322:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77272,"nodeType":"ImportDirective","src":"353:38:157","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":72770,"symbolAliases":[{"foreign":{"id":77271,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72769,"src":"361:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77274,"nodeType":"ImportDirective","src":"392:46:157","nodes":[],"absolutePath":"src/IMiddleware.sol","file":"./IMiddleware.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":72282,"symbolAliases":[{"foreign":{"id":77273,"name":"IMiddleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72281,"src":"400:11:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77276,"nodeType":"ImportDirective","src":"439:101:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":41410,"symbolAliases":[{"foreign":{"id":77275,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41409,"src":"447:18:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77278,"nodeType":"ImportDirective","src":"541:140:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardTransientUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":42871,"symbolAliases":[{"foreign":{"id":77277,"name":"ReentrancyGuardTransientUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42870,"src":"554:35:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77280,"nodeType":"ImportDirective","src":"682:74:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":47841,"symbolAliases":[{"foreign":{"id":77279,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"690:11:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77282,"nodeType":"ImportDirective","src":"757:70:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":79316,"sourceUnit":45588,"symbolAliases":[{"foreign":{"id":77281,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45587,"src":"765:6:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79315,"nodeType":"ContractDefinition","src":"829:23369:157","nodes":[{"id":77291,"nodeType":"VariableDeclaration","src":"1021:106:157","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"1046:12:157","scope":79315,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77289,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1021:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":77290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1061:66:157","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":77294,"nodeType":"VariableDeclaration","src":"1240:111:157","nodes":[],"constant":true,"mutability":"constant","name":"TRANSIENT_STORAGE","nameLocation":"1265:17:157","scope":79315,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77292,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1240:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307866303262343635373337666136303435633266663533666232646634336336363931366163323136366661333033323634363638666232663661316438633030","id":77293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1285:66:157","typeDescriptions":{"typeIdentifier":"t_rational_108631543557424213897897473785501454225913773503351157840763824611960129686528_by_1","typeString":"int_const 1086...(70 digits omitted)...6528"},"value":"0xf02b465737fa6045c2ff53fb2df43c66916ac2166fa303264668fb2f6a1d8c00"},"visibility":"private"},{"id":77302,"nodeType":"FunctionDefinition","src":"1411:53:157","nodes":[],"body":{"id":77301,"nodeType":"Block","src":"1425:39:157","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77298,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41631,"src":"1435:20:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":77299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1435:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77300,"nodeType":"ExpressionStatement","src":"1435:22:157"}]},"documentation":{"id":77295,"nodeType":"StructuredDocumentation","src":"1358:48:157","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":77296,"nodeType":"ParameterList","parameters":[],"src":"1422:2:157"},"returnParameters":{"id":77297,"nodeType":"ParameterList","parameters":[],"src":"1425:0:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":77448,"nodeType":"FunctionDefinition","src":"1470:1982:157","nodes":[],"body":{"id":77447,"nodeType":"Block","src":"1885:1567:157","nodes":[],"statements":[{"expression":{"arguments":[{"id":77330,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77304,"src":"1910:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":77329,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"1895:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":77331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1895:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77332,"nodeType":"ExpressionStatement","src":"1895:22:157"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77333,"name":"__ReentrancyGuardTransient_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42819,"src":"1927:31:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":77334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1927:33:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77335,"nodeType":"ExpressionStatement","src":"1927:33:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":77337,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2085:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":77338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2091:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"2085:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":77339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2103:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2085:19:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"63757272656e742074696d657374616d70206d7573742062652067726561746572207468616e2030","id":77341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2106:42:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_010a1bc0b39cf96528374edb07c79052766d9dbc6322e9b022f045d426584476","typeString":"literal_string \"current timestamp must be greater than 0\""},"value":"current timestamp must be greater than 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_010a1bc0b39cf96528374edb07c79052766d9dbc6322e9b022f045d426584476","typeString":"literal_string \"current timestamp must be greater than 0\""}],"id":77336,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2077:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":77342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2077:72:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77343,"nodeType":"ExpressionStatement","src":"2077:72:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77345,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77314,"src":"2167:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":77346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2187:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2167:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"656c656374696f6e206475726174696f6e206d7573742062652067726561746572207468616e2030","id":77348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2190:42:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_22f70577ade1b9c6246323ca38a4066fa51456aa417f5a924af9df8299c24ade","typeString":"literal_string \"election duration must be greater than 0\""},"value":"election duration must be greater than 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_22f70577ade1b9c6246323ca38a4066fa51456aa417f5a924af9df8299c24ade","typeString":"literal_string \"election duration must be greater than 0\""}],"id":77344,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2159:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":77349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2159:74:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77350,"nodeType":"ExpressionStatement","src":"2159:74:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77352,"name":"_eraDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77312,"src":"2251:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":77353,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77314,"src":"2266:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2251:32:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"657261206475726174696f6e206d7573742062652067726561746572207468616e20656c656374696f6e206475726174696f6e","id":77355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2285:53:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_07fe5d445d3047744132d2b933786d7532224c888580fad1eb3bf2fab68d889a","typeString":"literal_string \"era duration must be greater than election duration\""},"value":"era duration must be greater than election duration"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_07fe5d445d3047744132d2b933786d7532224c888580fad1eb3bf2fab68d889a","typeString":"literal_string \"era duration must be greater than election duration\""}],"id":77351,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2243:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":77356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2243:96:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77357,"nodeType":"ExpressionStatement","src":"2243:96:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77359,"name":"_validationDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77316,"src":"2508:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77360,"name":"_eraDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77312,"src":"2528:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":77361,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77314,"src":"2543:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2528:32:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":77363,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2527:34:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":77364,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2564:2:157","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"2527:39:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2508:58:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"76616c69646174696f6e2064656c617920697320746f6f20626967","id":77367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2568:29:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_eddca39051ee2213f896dfc64728cc0230d9b810a7506c1cb5def9eec7f1fd26","typeString":"literal_string \"validation delay is too big\""},"value":"validation delay is too big"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_eddca39051ee2213f896dfc64728cc0230d9b810a7506c1cb5def9eec7f1fd26","typeString":"literal_string \"validation delay is too big\""}],"id":77358,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2500:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":77368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2500:98:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77369,"nodeType":"ExpressionStatement","src":"2500:98:157"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":77371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2625:25:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":77370,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79261,"src":"2609:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":77372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2609:42:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77373,"nodeType":"ExpressionStatement","src":"2609:42:157"},{"assignments":[77376],"declarations":[{"constant":false,"id":77376,"mutability":"mutable","name":"router","nameLocation":"2677:6:157","nodeType":"VariableDeclaration","scope":77447,"src":"2661:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77375,"nodeType":"UserDefinedTypeName","pathNode":{"id":77374,"name":"Storage","nameLocations":["2661:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"2661:7:157"},"referencedDeclaration":72524,"src":"2661:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77379,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77377,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"2686:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2686:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2661:34:157"},{"expression":{"id":77386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77380,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77376,"src":"2706:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77382,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2713:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"2706:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":77383,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"2728:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2733:10:157","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":80298,"src":"2728:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$79950_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":77385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2728:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"2706:39:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":77387,"nodeType":"ExpressionStatement","src":"2706:39:157"},{"expression":{"id":77397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77388,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77376,"src":"2755:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2762:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"2755:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":77393,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77306,"src":"2795:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":77394,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77308,"src":"2804:12:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":77395,"name":"_middleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77310,"src":"2818:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":77391,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"2778:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2783:11:157","memberName":"AddressBook","nodeType":"MemberAccess","referencedDeclaration":79843,"src":"2778:16:157","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddressBook_$79843_storage_ptr_$","typeString":"type(struct Gear.AddressBook storage pointer)"}},"id":77396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2778:52:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_memory_ptr","typeString":"struct Gear.AddressBook memory"}},"src":"2755:75:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77398,"nodeType":"ExpressionStatement","src":"2755:75:157"},{"expression":{"id":77406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":77399,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77376,"src":"2840:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77402,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2847:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"2840:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2866:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":80014,"src":"2840:44:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77404,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"2887:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2892:30:157","memberName":"VALIDATORS_THRESHOLD_NUMERATOR","nodeType":"MemberAccess","referencedDeclaration":79799,"src":"2887:35:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2840:82:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":77407,"nodeType":"ExpressionStatement","src":"2840:82:157"},{"expression":{"id":77415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":77408,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77376,"src":"2932:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77411,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2939:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"2932:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2958:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":80016,"src":"2932:46:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77413,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"2981:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77414,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2986:32:157","memberName":"VALIDATORS_THRESHOLD_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":79802,"src":"2981:37:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2932:86:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":77416,"nodeType":"ExpressionStatement","src":"2932:86:157"},{"expression":{"id":77423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77417,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77376,"src":"3028:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77419,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3035:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"3028:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":77420,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"3053:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3058:26:157","memberName":"defaultComputationSettings","nodeType":"MemberAccess","referencedDeclaration":80243,"src":"3053:31:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_ComputationSettings_$79943_memory_ptr_$","typeString":"function () pure returns (struct Gear.ComputationSettings memory)"}},"id":77422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3053:33:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_memory_ptr","typeString":"struct Gear.ComputationSettings memory"}},"src":"3028:58:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":77424,"nodeType":"ExpressionStatement","src":"3028:58:157"},{"expression":{"id":77434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77425,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77376,"src":"3096:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3103:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"3096:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":77430,"name":"_eraDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77312,"src":"3130:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":77431,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77314,"src":"3144:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":77432,"name":"_validationDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77316,"src":"3163:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":77428,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"3115:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3120:9:157","memberName":"Timelines","nodeType":"MemberAccess","referencedDeclaration":80012,"src":"3115:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Timelines_$80012_storage_ptr_$","typeString":"type(struct Gear.Timelines storage pointer)"}},"id":77433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3115:65:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_memory_ptr","typeString":"struct Gear.Timelines memory"}},"src":"3096:84:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},"id":77435,"nodeType":"ExpressionStatement","src":"3096:84:157"},{"expression":{"arguments":[{"expression":{"expression":{"id":77437,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77376,"src":"3262:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3269:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"3262:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77439,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3288:11:157","memberName":"validators0","nodeType":"MemberAccess","referencedDeclaration":80019,"src":"3262:37:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage","typeString":"struct Gear.Validators storage ref"}},{"id":77440,"name":"_aggregatedPublicKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77319,"src":"3313:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey calldata"}},{"id":77441,"name":"_verifiableSecretSharingCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77321,"src":"3347:34:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":77442,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77324,"src":"3395:11:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"expression":{"id":77443,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3420:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":77444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3426:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"3420:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Validators_$79825_storage","typeString":"struct Gear.Validators storage ref"},{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77436,"name":"_resetValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79187,"src":"3232:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Validators_$79825_storage_ptr_$_t_struct$_AggregatedPublicKey_$79810_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct Gear.Validators storage pointer,struct Gear.AggregatedPublicKey memory,bytes memory,address[] memory,uint256)"}},"id":77445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3232:213:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77446,"nodeType":"ExpressionStatement","src":"3232:213:157"}]},"functionSelector":"53f7fd48","implemented":true,"kind":"function","modifiers":[{"id":77327,"kind":"modifierInvocation","modifierName":{"id":77326,"name":"initializer","nameLocations":["1873:11:157"],"nodeType":"IdentifierPath","referencedDeclaration":41517,"src":"1873:11:157"},"nodeType":"ModifierInvocation","src":"1873:11:157"}],"name":"initialize","nameLocation":"1479:10:157","parameters":{"id":77325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77304,"mutability":"mutable","name":"_owner","nameLocation":"1507:6:157","nodeType":"VariableDeclaration","scope":77448,"src":"1499:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77303,"name":"address","nodeType":"ElementaryTypeName","src":"1499:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":77306,"mutability":"mutable","name":"_mirror","nameLocation":"1531:7:157","nodeType":"VariableDeclaration","scope":77448,"src":"1523:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77305,"name":"address","nodeType":"ElementaryTypeName","src":"1523:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":77308,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1556:12:157","nodeType":"VariableDeclaration","scope":77448,"src":"1548:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77307,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":77310,"mutability":"mutable","name":"_middleware","nameLocation":"1586:11:157","nodeType":"VariableDeclaration","scope":77448,"src":"1578:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77309,"name":"address","nodeType":"ElementaryTypeName","src":"1578:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":77312,"mutability":"mutable","name":"_eraDuration","nameLocation":"1615:12:157","nodeType":"VariableDeclaration","scope":77448,"src":"1607:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77311,"name":"uint256","nodeType":"ElementaryTypeName","src":"1607:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":77314,"mutability":"mutable","name":"_electionDuration","nameLocation":"1645:17:157","nodeType":"VariableDeclaration","scope":77448,"src":"1637:25:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77313,"name":"uint256","nodeType":"ElementaryTypeName","src":"1637:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":77316,"mutability":"mutable","name":"_validationDelay","nameLocation":"1680:16:157","nodeType":"VariableDeclaration","scope":77448,"src":"1672:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77315,"name":"uint256","nodeType":"ElementaryTypeName","src":"1672:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":77319,"mutability":"mutable","name":"_aggregatedPublicKey","nameLocation":"1740:20:157","nodeType":"VariableDeclaration","scope":77448,"src":"1706:54:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey"},"typeName":{"id":77318,"nodeType":"UserDefinedTypeName","pathNode":{"id":77317,"name":"Gear.AggregatedPublicKey","nameLocations":["1706:4:157","1711:19:157"],"nodeType":"IdentifierPath","referencedDeclaration":79810,"src":"1706:24:157"},"referencedDeclaration":79810,"src":"1706:24:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_storage_ptr","typeString":"struct Gear.AggregatedPublicKey"}},"visibility":"internal"},{"constant":false,"id":77321,"mutability":"mutable","name":"_verifiableSecretSharingCommitment","nameLocation":"1785:34:157","nodeType":"VariableDeclaration","scope":77448,"src":"1770:49:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":77320,"name":"bytes","nodeType":"ElementaryTypeName","src":"1770:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":77324,"mutability":"mutable","name":"_validators","nameLocation":"1848:11:157","nodeType":"VariableDeclaration","scope":77448,"src":"1829:30:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":77322,"name":"address","nodeType":"ElementaryTypeName","src":"1829:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":77323,"nodeType":"ArrayTypeName","src":"1829:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1489:376:157"},"returnParameters":{"id":77328,"nodeType":"ParameterList","parameters":[],"src":"1885:0:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":77552,"nodeType":"FunctionDefinition","src":"3510:1710:157","nodes":[],"body":{"id":77551,"nodeType":"Block","src":"3558:1662:157","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77456,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41320,"src":"3583:5:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":77457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3583:7:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":77455,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"3568:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":77458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3568:23:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77459,"nodeType":"ExpressionStatement","src":"3568:23:157"},{"assignments":[77462],"declarations":[{"constant":false,"id":77462,"mutability":"mutable","name":"oldRouter","nameLocation":"3618:9:157","nodeType":"VariableDeclaration","scope":77551,"src":"3602:25:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77461,"nodeType":"UserDefinedTypeName","pathNode":{"id":77460,"name":"Storage","nameLocations":["3602:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"3602:7:157"},"referencedDeclaration":72524,"src":"3602:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77465,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77463,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"3630:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3630:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3602:37:157"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":77467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3666:25:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":77466,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79261,"src":"3650:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":77468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3650:42:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77469,"nodeType":"ExpressionStatement","src":"3650:42:157"},{"assignments":[77472],"declarations":[{"constant":false,"id":77472,"mutability":"mutable","name":"newRouter","nameLocation":"3718:9:157","nodeType":"VariableDeclaration","scope":77551,"src":"3702:25:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77471,"nodeType":"UserDefinedTypeName","pathNode":{"id":77470,"name":"Storage","nameLocations":["3702:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"3702:7:157"},"referencedDeclaration":72524,"src":"3702:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77475,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77473,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"3730:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3730:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3702:37:157"},{"expression":{"id":77482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77476,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77472,"src":"3791:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3801:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"3791:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":77479,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"3816:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3821:10:157","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":80298,"src":"3816:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$79950_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":77481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3816:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"3791:42:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":77483,"nodeType":"ExpressionStatement","src":"3791:42:157"},{"expression":{"id":77489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77484,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77472,"src":"3959:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3969:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"3959:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77487,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77462,"src":"3985:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77488,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3995:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"3985:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"src":"3959:49:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77490,"nodeType":"ExpressionStatement","src":"3959:49:157"},{"expression":{"id":77499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":77491,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77472,"src":"4083:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4093:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4083:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4112:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":80014,"src":"4083:47:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":77496,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77462,"src":"4133:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77497,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4143:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4133:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77498,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4162:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":80014,"src":"4133:47:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4083:97:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":77500,"nodeType":"ExpressionStatement","src":"4083:97:157"},{"expression":{"id":77509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":77501,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77472,"src":"4190:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77504,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4200:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4190:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4219:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":80016,"src":"4190:49:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":77506,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77462,"src":"4242:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77507,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4252:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4242:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4271:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":80016,"src":"4242:49:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4190:101:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":77510,"nodeType":"ExpressionStatement","src":"4190:101:157"},{"expression":{"arguments":[{"expression":{"expression":{"id":77512,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77472,"src":"4601:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77513,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4611:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"4601:28:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4630:11:157","memberName":"validators0","nodeType":"MemberAccess","referencedDeclaration":80019,"src":"4601:40:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage","typeString":"struct Gear.Validators storage ref"}},{"expression":{"arguments":[{"id":77517,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77462,"src":"4681:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77515,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"4655:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4660:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"4655:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4655:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4692:19:157","memberName":"aggregatedPublicKey","nodeType":"MemberAccess","referencedDeclaration":79813,"src":"4655:56:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"}},{"arguments":[{"expression":{"arguments":[{"id":77524,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77462,"src":"4764:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77522,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"4738:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4743:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"4738:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4738:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4775:40:157","memberName":"verifiableSecretSharingCommitmentPointer","nodeType":"MemberAccess","referencedDeclaration":79815,"src":"4738:77:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":77520,"name":"SSTORE2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81333,"src":"4725:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SSTORE2_$81333_$","typeString":"type(library SSTORE2)"}},"id":77521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4733:4:157","memberName":"read","nodeType":"MemberAccess","referencedDeclaration":81258,"src":"4725:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bytes_memory_ptr_$","typeString":"function (address) view returns (bytes memory)"}},"id":77527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4725:91:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"arguments":[{"id":77530,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77462,"src":"4856:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77528,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"4830:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4835:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"4830:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4830:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77532,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4867:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79822,"src":"4830:41:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},{"expression":{"id":77533,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4885:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":77534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4891:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"4885:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Validators_$79825_storage","typeString":"struct Gear.Validators storage ref"},{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77511,"name":"_resetValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79187,"src":"4571:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Validators_$79825_storage_ptr_$_t_struct$_AggregatedPublicKey_$79810_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct Gear.Validators storage pointer,struct Gear.AggregatedPublicKey memory,bytes memory,address[] memory,uint256)"}},"id":77535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4571:339:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":77536,"nodeType":"ExpressionStatement","src":"4571:339:157"},{"expression":{"id":77542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77537,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77472,"src":"4979:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4989:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"4979:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77540,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77462,"src":"5007:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5017:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"5007:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"src":"4979:53:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":77543,"nodeType":"ExpressionStatement","src":"4979:53:157"},{"expression":{"id":77549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77544,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77472,"src":"5090:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77546,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5100:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"5090:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":77547,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77462,"src":"5112:9:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77548,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5122:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"5112:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},"src":"5090:41:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},"id":77550,"nodeType":"ExpressionStatement","src":"5090:41:157"}]},"documentation":{"id":77449,"nodeType":"StructuredDocumentation","src":"3458:47:157","text":"@custom:oz-upgrades-validate-as-initializer"},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"arguments":[{"hexValue":"32","id":77452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3555:1:157","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":77453,"kind":"modifierInvocation","modifierName":{"id":77451,"name":"reinitializer","nameLocations":["3541:13:157"],"nodeType":"IdentifierPath","referencedDeclaration":41564,"src":"3541:13:157"},"nodeType":"ModifierInvocation","src":"3541:16:157"}],"name":"reinitialize","nameLocation":"3519:12:157","parameters":{"id":77450,"nodeType":"ParameterList","parameters":[],"src":"3531:2:157"},"returnParameters":{"id":77454,"nodeType":"ParameterList","parameters":[],"src":"3558:0:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":77597,"nodeType":"FunctionDefinition","src":"5306:700:157","nodes":[],"body":{"id":77596,"nodeType":"Block","src":"5370:636:157","nodes":[],"statements":[{"assignments":[77561],"declarations":[{"constant":false,"id":77561,"mutability":"mutable","name":"router","nameLocation":"5396:6:157","nodeType":"VariableDeclaration","scope":77596,"src":"5380:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77560,"nodeType":"UserDefinedTypeName","pathNode":{"id":77559,"name":"Storage","nameLocations":["5380:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"5380:7:157"},"referencedDeclaration":72524,"src":"5380:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77564,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77562,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"5405:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5405:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5380:34:157"},{"assignments":[77569],"declarations":[{"constant":false,"id":77569,"mutability":"mutable","name":"validationSettings","nameLocation":"5459:18:157","nodeType":"VariableDeclaration","scope":77596,"src":"5424:53:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettingsView_$80034_memory_ptr","typeString":"struct Gear.ValidationSettingsView"},"typeName":{"id":77568,"nodeType":"UserDefinedTypeName","pathNode":{"id":77567,"name":"Gear.ValidationSettingsView","nameLocations":["5424:4:157","5429:22:157"],"nodeType":"IdentifierPath","referencedDeclaration":80034,"src":"5424:27:157"},"referencedDeclaration":80034,"src":"5424:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettingsView_$80034_storage_ptr","typeString":"struct Gear.ValidationSettingsView"}},"visibility":"internal"}],"id":77575,"initialValue":{"arguments":[{"expression":{"id":77572,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77561,"src":"5492:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77573,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5499:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"5492:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}],"expression":{"id":77570,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"5480:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5485:6:157","memberName":"toView","nodeType":"MemberAccess","referencedDeclaration":80916,"src":"5480:11:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ValidationSettings_$80023_storage_ptr_$returns$_t_struct$_ValidationSettingsView_$80034_memory_ptr_$","typeString":"function (struct Gear.ValidationSettings storage pointer) view returns (struct Gear.ValidationSettingsView memory)"}},"id":77574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5480:38:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettingsView_$80034_memory_ptr","typeString":"struct Gear.ValidationSettingsView memory"}},"nodeType":"VariableDeclarationStatement","src":"5424:94:157"},{"expression":{"arguments":[{"expression":{"id":77577,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77561,"src":"5575:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77578,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5582:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"5575:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},{"expression":{"id":77579,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77561,"src":"5630:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77580,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5637:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"5630:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79938_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},{"expression":{"id":77581,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77561,"src":"5686:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5693:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"5686:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},{"id":77583,"name":"validationSettings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77569,"src":"5740:18:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettingsView_$80034_memory_ptr","typeString":"struct Gear.ValidationSettingsView memory"}},{"expression":{"id":77584,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77561,"src":"5789:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5796:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"5789:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_storage","typeString":"struct Gear.ComputationSettings storage ref"}},{"expression":{"id":77586,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77561,"src":"5836:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5843:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"5836:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},{"expression":{"expression":{"id":77588,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77561,"src":"5881:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77589,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5888:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"5881:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77590,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5901:13:157","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":79975,"src":"5881:33:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":77591,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77561,"src":"5949:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77592,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5956:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"5949:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77593,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5969:19:157","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":79977,"src":"5949:39:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"},{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79938_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"},{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"},{"typeIdentifier":"t_struct$_ValidationSettingsView_$80034_memory_ptr","typeString":"struct Gear.ValidationSettingsView memory"},{"typeIdentifier":"t_struct$_ComputationSettings_$79943_storage","typeString":"struct Gear.ComputationSettings storage ref"},{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77576,"name":"StorageView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72491,"src":"5535:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_StorageView_$72491_storage_ptr_$","typeString":"type(struct IRouter.StorageView storage pointer)"}},"id":77594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5561:12:157","5608:20:157","5671:13:157","5720:18:157","5772:15:157","5825:9:157","5866:13:157","5928:19:157"],"names":["genesisBlock","latestCommittedBatch","implAddresses","validationSettings","computeSettings","timelines","programsCount","validatedCodesCount"],"nodeType":"FunctionCall","src":"5535:464:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StorageView_$72491_memory_ptr","typeString":"struct IRouter.StorageView memory"}},"functionReturnParameters":77558,"id":77595,"nodeType":"Return","src":"5528:471:157"}]},"documentation":{"id":77553,"nodeType":"StructuredDocumentation","src":"5243:58:157","text":"@dev Returns the storage view of the contract storage."},"functionSelector":"c2eb812f","implemented":true,"kind":"function","modifiers":[],"name":"storageView","nameLocation":"5315:11:157","parameters":{"id":77554,"nodeType":"ParameterList","parameters":[],"src":"5326:2:157"},"returnParameters":{"id":77558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77557,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77597,"src":"5350:18:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_StorageView_$72491_memory_ptr","typeString":"struct IRouter.StorageView"},"typeName":{"id":77556,"nodeType":"UserDefinedTypeName","pathNode":{"id":77555,"name":"StorageView","nameLocations":["5350:11:157"],"nodeType":"IdentifierPath","referencedDeclaration":72491,"src":"5350:11:157"},"referencedDeclaration":72491,"src":"5350:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_StorageView_$72491_storage_ptr","typeString":"struct IRouter.StorageView"}},"visibility":"internal"}],"src":"5349:20:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77608,"nodeType":"FunctionDefinition","src":"6012:109:157","nodes":[],"body":{"id":77607,"nodeType":"Block","src":"6070:51:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77602,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"6087:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6087:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6097:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"6087:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":77605,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6110:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79945,"src":"6087:27:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":77601,"id":77606,"nodeType":"Return","src":"6080:34:157"}]},"baseFunctions":[72575],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"6021:16:157","parameters":{"id":77598,"nodeType":"ParameterList","parameters":[],"src":"6037:2:157"},"returnParameters":{"id":77601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77608,"src":"6061:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77599,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6061:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6060:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77619,"nodeType":"FunctionDefinition","src":"6127:113:157","nodes":[],"body":{"id":77618,"nodeType":"Block","src":"6184:56:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77613,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"6201:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6201:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6211:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"6201:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":77616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6224:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79949,"src":"6201:32:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":77612,"id":77617,"nodeType":"Return","src":"6194:39:157"}]},"baseFunctions":[72580],"functionSelector":"cacf66ab","implemented":true,"kind":"function","modifiers":[],"name":"genesisTimestamp","nameLocation":"6136:16:157","parameters":{"id":77609,"nodeType":"ParameterList","parameters":[],"src":"6152:2:157"},"returnParameters":{"id":77612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77619,"src":"6176:6:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":77610,"name":"uint48","nodeType":"ElementaryTypeName","src":"6176:6:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6175:8:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77630,"nodeType":"FunctionDefinition","src":"6246:125:157","nodes":[],"body":{"id":77629,"nodeType":"Block","src":"6312:59:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77624,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"6329:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6339:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"6329:30:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79938_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":77627,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6360:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79935,"src":"6329:35:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":77623,"id":77628,"nodeType":"Return","src":"6322:42:157"}]},"baseFunctions":[72585],"functionSelector":"71a8cf2d","implemented":true,"kind":"function","modifiers":[],"name":"latestCommittedBatchHash","nameLocation":"6255:24:157","parameters":{"id":77620,"nodeType":"ParameterList","parameters":[],"src":"6279:2:157"},"returnParameters":{"id":77623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77622,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77630,"src":"6303:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77621,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6303:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6302:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77641,"nodeType":"FunctionDefinition","src":"6377:134:157","nodes":[],"body":{"id":77640,"nodeType":"Block","src":"6447:64:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77635,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"6464:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6464:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6474:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"6464:30:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79938_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":77638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6495:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79937,"src":"6464:40:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":77634,"id":77639,"nodeType":"Return","src":"6457:47:157"}]},"baseFunctions":[72590],"functionSelector":"d456fd51","implemented":true,"kind":"function","modifiers":[],"name":"latestCommittedBatchTimestamp","nameLocation":"6386:29:157","parameters":{"id":77631,"nodeType":"ParameterList","parameters":[],"src":"6415:2:157"},"returnParameters":{"id":77634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77633,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77641,"src":"6439:6:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":77632,"name":"uint48","nodeType":"ElementaryTypeName","src":"6439:6:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6438:8:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77652,"nodeType":"FunctionDefinition","src":"6517:106:157","nodes":[],"body":{"id":77651,"nodeType":"Block","src":"6569:54:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77646,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"6586:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6586:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6596:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"6586:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77649,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6610:6:157","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":79838,"src":"6586:30:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":77645,"id":77650,"nodeType":"Return","src":"6579:37:157"}]},"baseFunctions":[72595],"functionSelector":"e6fabc09","implemented":true,"kind":"function","modifiers":[],"name":"mirrorImpl","nameLocation":"6526:10:157","parameters":{"id":77642,"nodeType":"ParameterList","parameters":[],"src":"6536:2:157"},"returnParameters":{"id":77645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77644,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77652,"src":"6560:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77643,"name":"address","nodeType":"ElementaryTypeName","src":"6560:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6559:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77663,"nodeType":"FunctionDefinition","src":"6629:112:157","nodes":[],"body":{"id":77662,"nodeType":"Block","src":"6682:59:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77657,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"6699:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6699:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6709:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"6699:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6723:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":79840,"src":"6699:35:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":77656,"id":77661,"nodeType":"Return","src":"6692:42:157"}]},"baseFunctions":[72600],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"6638:11:157","parameters":{"id":77653,"nodeType":"ParameterList","parameters":[],"src":"6649:2:157"},"returnParameters":{"id":77656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77655,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77663,"src":"6673:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77654,"name":"address","nodeType":"ElementaryTypeName","src":"6673:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6672:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77674,"nodeType":"FunctionDefinition","src":"6747:110:157","nodes":[],"body":{"id":77673,"nodeType":"Block","src":"6799:58:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77668,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"6816:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6816:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6826:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"6816:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":77671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6840:10:157","memberName":"middleware","nodeType":"MemberAccess","referencedDeclaration":79842,"src":"6816:34:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":77667,"id":77672,"nodeType":"Return","src":"6809:41:157"}]},"baseFunctions":[72605],"functionSelector":"f4f20ac0","implemented":true,"kind":"function","modifiers":[],"name":"middleware","nameLocation":"6756:10:157","parameters":{"id":77664,"nodeType":"ParameterList","parameters":[],"src":"6766:2:157"},"returnParameters":{"id":77667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77666,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77674,"src":"6790:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77665,"name":"address","nodeType":"ElementaryTypeName","src":"6790:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6789:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77688,"nodeType":"FunctionDefinition","src":"6863:175:157","nodes":[],"body":{"id":77687,"nodeType":"Block","src":"6958:80:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77682,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"7001:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7001:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77680,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"6975:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6980:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"6975:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6975:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7012:19:157","memberName":"aggregatedPublicKey","nodeType":"MemberAccess","referencedDeclaration":79813,"src":"6975:56:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"}},"functionReturnParameters":77679,"id":77686,"nodeType":"Return","src":"6968:63:157"}]},"baseFunctions":[72611],"functionSelector":"3bd109fa","implemented":true,"kind":"function","modifiers":[],"name":"validatorsAggregatedPublicKey","nameLocation":"6872:29:157","parameters":{"id":77675,"nodeType":"ParameterList","parameters":[],"src":"6901:2:157"},"returnParameters":{"id":77679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77688,"src":"6925:31:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_memory_ptr","typeString":"struct Gear.AggregatedPublicKey"},"typeName":{"id":77677,"nodeType":"UserDefinedTypeName","pathNode":{"id":77676,"name":"Gear.AggregatedPublicKey","nameLocations":["6925:4:157","6930:19:157"],"nodeType":"IdentifierPath","referencedDeclaration":79810,"src":"6925:24:157"},"referencedDeclaration":79810,"src":"6925:24:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_storage_ptr","typeString":"struct Gear.AggregatedPublicKey"}},"visibility":"internal"}],"src":"6924:33:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77704,"nodeType":"FunctionDefinition","src":"7044:207:157","nodes":[],"body":{"id":77703,"nodeType":"Block","src":"7136:115:157","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77697,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"7192:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7192:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77695,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"7166:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7171:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"7166:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7166:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77700,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7203:40:157","memberName":"verifiableSecretSharingCommitmentPointer","nodeType":"MemberAccess","referencedDeclaration":79815,"src":"7166:77:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":77693,"name":"SSTORE2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81333,"src":"7153:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SSTORE2_$81333_$","typeString":"type(library SSTORE2)"}},"id":77694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7161:4:157","memberName":"read","nodeType":"MemberAccess","referencedDeclaration":81258,"src":"7153:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bytes_memory_ptr_$","typeString":"function (address) view returns (bytes memory)"}},"id":77701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7153:91:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":77692,"id":77702,"nodeType":"Return","src":"7146:98:157"}]},"baseFunctions":[72616],"functionSelector":"a5d53a44","implemented":true,"kind":"function","modifiers":[],"name":"validatorsVerifiableSecretSharingCommitment","nameLocation":"7053:43:157","parameters":{"id":77689,"nodeType":"ParameterList","parameters":[],"src":"7096:2:157"},"returnParameters":{"id":77692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77691,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77704,"src":"7122:12:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":77690,"name":"bytes","nodeType":"ElementaryTypeName","src":"7122:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7121:14:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":77726,"nodeType":"FunctionDefinition","src":"7257:255:157","nodes":[],"body":{"id":77725,"nodeType":"Block","src":"7328:184:157","nodes":[],"statements":[{"assignments":[77710],"declarations":[{"constant":false,"id":77710,"mutability":"mutable","name":"commitment","nameLocation":"7351:10:157","nodeType":"VariableDeclaration","scope":77725,"src":"7338:23:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":77709,"name":"bytes","nodeType":"ElementaryTypeName","src":"7338:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":77720,"initialValue":{"arguments":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77715,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"7415:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7415:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77713,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"7389:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7394:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"7389:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7389:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77718,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7426:40:157","memberName":"verifiableSecretSharingCommitmentPointer","nodeType":"MemberAccess","referencedDeclaration":79815,"src":"7389:77:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":77711,"name":"SSTORE2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81333,"src":"7376:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SSTORE2_$81333_$","typeString":"type(library SSTORE2)"}},"id":77712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7384:4:157","memberName":"read","nodeType":"MemberAccess","referencedDeclaration":81258,"src":"7376:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bytes_memory_ptr_$","typeString":"function (address) view returns (bytes memory)"}},"id":77719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7376:91:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"7338:129:157"},{"expression":{"arguments":[{"id":77722,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77710,"src":"7494:10:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":77721,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"7484:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":77723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7484:21:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":77708,"id":77724,"nodeType":"Return","src":"7477:28:157"}]},"baseFunctions":[72621],"functionSelector":"3b49d011","implemented":true,"kind":"function","modifiers":[],"name":"validatorsVssCommitmentHash","nameLocation":"7266:27:157","parameters":{"id":77705,"nodeType":"ParameterList","parameters":[],"src":"7293:2:157"},"returnParameters":{"id":77708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77707,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77726,"src":"7319:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77706,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7319:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7318:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":77772,"nodeType":"FunctionDefinition","src":"7518:375:157","nodes":[],"body":{"id":77771,"nodeType":"Block","src":"7600:293:157","nodes":[],"statements":[{"assignments":[77738],"declarations":[{"constant":false,"id":77738,"mutability":"mutable","name":"_currentValidators","nameLocation":"7634:18:157","nodeType":"VariableDeclaration","scope":77771,"src":"7610:42:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators"},"typeName":{"id":77737,"nodeType":"UserDefinedTypeName","pathNode":{"id":77736,"name":"Gear.Validators","nameLocations":["7610:4:157","7615:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":79825,"src":"7610:15:157"},"referencedDeclaration":79825,"src":"7610:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators"}},"visibility":"internal"}],"id":77744,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77741,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"7681:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7681:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77739,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"7655:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7660:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"7655:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7655:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7610:81:157"},{"body":{"id":77767,"nodeType":"Block","src":"7751:114:157","statements":[{"condition":{"id":77762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7769:39:157","subExpression":{"baseExpression":{"expression":{"id":77756,"name":"_currentValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77738,"src":"7770:18:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7789:3:157","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":79819,"src":"7770:22:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":77761,"indexExpression":{"baseExpression":{"id":77758,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77729,"src":"7793:11:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":77760,"indexExpression":{"id":77759,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77746,"src":"7805:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7793:14:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7770:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":77766,"nodeType":"IfStatement","src":"7765:90:157","trueBody":{"id":77765,"nodeType":"Block","src":"7810:45:157","statements":[{"expression":{"hexValue":"66616c7365","id":77763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7835:5:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":77733,"id":77764,"nodeType":"Return","src":"7828:12:157"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77749,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77746,"src":"7722:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":77750,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77729,"src":"7726:11:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":77751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7738:6:157","memberName":"length","nodeType":"MemberAccess","src":"7726:18:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7722:22:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":77768,"initializationExpression":{"assignments":[77746],"declarations":[{"constant":false,"id":77746,"mutability":"mutable","name":"i","nameLocation":"7715:1:157","nodeType":"VariableDeclaration","scope":77768,"src":"7707:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77745,"name":"uint256","nodeType":"ElementaryTypeName","src":"7707:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":77748,"initialValue":{"hexValue":"30","id":77747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7719:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7707:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":77754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"7746:3:157","subExpression":{"id":77753,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77746,"src":"7746:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":77755,"nodeType":"ExpressionStatement","src":"7746:3:157"},"nodeType":"ForStatement","src":"7702:163:157"},{"expression":{"hexValue":"74727565","id":77769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7882:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":77733,"id":77770,"nodeType":"Return","src":"7875:11:157"}]},"baseFunctions":[72629],"functionSelector":"8f381dbe","implemented":true,"kind":"function","modifiers":[],"name":"areValidators","nameLocation":"7527:13:157","parameters":{"id":77730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77729,"mutability":"mutable","name":"_validators","nameLocation":"7560:11:157","nodeType":"VariableDeclaration","scope":77772,"src":"7541:30:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":77727,"name":"address","nodeType":"ElementaryTypeName","src":"7541:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":77728,"nodeType":"ArrayTypeName","src":"7541:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7540:32:157"},"returnParameters":{"id":77733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77772,"src":"7594:4:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":77731,"name":"bool","nodeType":"ElementaryTypeName","src":"7594:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7593:6:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77789,"nodeType":"FunctionDefinition","src":"7899:144:157","nodes":[],"body":{"id":77788,"nodeType":"Block","src":"7967:76:157","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77781,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"8010:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8010:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77779,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"7984:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7989:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"7984:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7984:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77784,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8021:3:157","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":79819,"src":"7984:40:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":77786,"indexExpression":{"id":77785,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77774,"src":"8025:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7984:52:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":77778,"id":77787,"nodeType":"Return","src":"7977:59:157"}]},"baseFunctions":[72636],"functionSelector":"facd743b","implemented":true,"kind":"function","modifiers":[],"name":"isValidator","nameLocation":"7908:11:157","parameters":{"id":77775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77774,"mutability":"mutable","name":"_validator","nameLocation":"7928:10:157","nodeType":"VariableDeclaration","scope":77789,"src":"7920:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77773,"name":"address","nodeType":"ElementaryTypeName","src":"7920:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7919:20:157"},"returnParameters":{"id":77778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77777,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77789,"src":"7961:4:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":77776,"name":"bool","nodeType":"ElementaryTypeName","src":"7961:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7960:6:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77813,"nodeType":"FunctionDefinition","src":"8049:245:157","nodes":[],"body":{"id":77812,"nodeType":"Block","src":"8124:170:157","nodes":[],"statements":[{"assignments":[77800],"declarations":[{"constant":false,"id":77800,"mutability":"mutable","name":"router","nameLocation":"8158:6:157","nodeType":"VariableDeclaration","scope":77812,"src":"8134:30:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77799,"nodeType":"UserDefinedTypeName","pathNode":{"id":77798,"name":"IRouter.Storage","nameLocations":["8134:7:157","8142:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"8134:15:157"},"referencedDeclaration":72524,"src":"8134:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77803,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77801,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"8167:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8167:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8134:42:157"},{"expression":{"components":[{"expression":{"expression":{"id":77804,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77800,"src":"8194:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8201:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"8194:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77806,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8220:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":80014,"src":"8194:44:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":77807,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77800,"src":"8240:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77808,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8247:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"8240:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77809,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8266:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":80016,"src":"8240:46:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":77810,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8193:94:157","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint128_$_t_uint128_$","typeString":"tuple(uint128,uint128)"}},"functionReturnParameters":77795,"id":77811,"nodeType":"Return","src":"8186:101:157"}]},"baseFunctions":[72643],"functionSelector":"e3a6684f","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdFraction","nameLocation":"8058:24:157","parameters":{"id":77790,"nodeType":"ParameterList","parameters":[],"src":"8082:2:157"},"returnParameters":{"id":77795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77792,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77813,"src":"8106:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":77791,"name":"uint128","nodeType":"ElementaryTypeName","src":"8106:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":77794,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77813,"src":"8115:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":77793,"name":"uint128","nodeType":"ElementaryTypeName","src":"8115:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"8105:18:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77827,"nodeType":"FunctionDefinition","src":"8300:126:157","nodes":[],"body":{"id":77826,"nodeType":"Block","src":"8361:65:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77821,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"8404:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8404:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77819,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"8378:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8383:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"8378:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8378:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8415:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79822,"src":"8378:41:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":77818,"id":77825,"nodeType":"Return","src":"8371:48:157"}]},"baseFunctions":[72649],"functionSelector":"ca1e7819","implemented":true,"kind":"function","modifiers":[],"name":"validators","nameLocation":"8309:10:157","parameters":{"id":77814,"nodeType":"ParameterList","parameters":[],"src":"8319:2:157"},"returnParameters":{"id":77818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77827,"src":"8343:16:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":77815,"name":"address","nodeType":"ElementaryTypeName","src":"8343:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":77816,"nodeType":"ArrayTypeName","src":"8343:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"8342:18:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77841,"nodeType":"FunctionDefinition","src":"8432:129:157","nodes":[],"body":{"id":77840,"nodeType":"Block","src":"8489:72:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77834,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"8532:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8532:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77832,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"8506:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8511:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"8506:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8506:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8543:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79822,"src":"8506:41:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":77838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8548:6:157","memberName":"length","nodeType":"MemberAccess","src":"8506:48:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":77831,"id":77839,"nodeType":"Return","src":"8499:55:157"}]},"baseFunctions":[72654],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"8441:15:157","parameters":{"id":77828,"nodeType":"ParameterList","parameters":[],"src":"8456:2:157"},"returnParameters":{"id":77831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77830,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77841,"src":"8480:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77829,"name":"uint256","nodeType":"ElementaryTypeName","src":"8480:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8479:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77871,"nodeType":"FunctionDefinition","src":"8567:348:157","nodes":[],"body":{"id":77870,"nodeType":"Block","src":"8628:287:157","nodes":[],"statements":[{"assignments":[77850],"declarations":[{"constant":false,"id":77850,"mutability":"mutable","name":"router","nameLocation":"8662:6:157","nodeType":"VariableDeclaration","scope":77870,"src":"8638:30:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77849,"nodeType":"UserDefinedTypeName","pathNode":{"id":77848,"name":"IRouter.Storage","nameLocations":["8638:7:157","8646:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"8638:15:157"},"referencedDeclaration":72524,"src":"8638:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77853,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77851,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"8671:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8671:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8638:42:157"},{"expression":{"arguments":[{"expression":{"expression":{"arguments":[{"id":77858,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77850,"src":"8761:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":77856,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"8735:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8740:20:157","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":80624,"src":"8735:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":77859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8735:33:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":77860,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8769:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79822,"src":"8735:38:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":77861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8774:6:157","memberName":"length","nodeType":"MemberAccess","src":"8735:45:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":77862,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77850,"src":"8794:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8801:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"8794:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77864,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8820:18:157","memberName":"thresholdNumerator","nodeType":"MemberAccess","referencedDeclaration":80014,"src":"8794:44:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":77865,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77850,"src":"8852:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8859:18:157","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":72511,"src":"8852:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$80023_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":77867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8878:20:157","memberName":"thresholdDenominator","nodeType":"MemberAccess","referencedDeclaration":80016,"src":"8852:46:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":77854,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"8697:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":77855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8702:19:157","memberName":"validatorsThreshold","nodeType":"MemberAccess","referencedDeclaration":80789,"src":"8697:24:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint128_$_t_uint128_$returns$_t_uint256_$","typeString":"function (uint256,uint128,uint128) pure returns (uint256)"}},"id":77868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8697:211:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":77845,"id":77869,"nodeType":"Return","src":"8690:218:157"}]},"baseFunctions":[72659],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"8576:19:157","parameters":{"id":77842,"nodeType":"ParameterList","parameters":[],"src":"8595:2:157"},"returnParameters":{"id":77845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77844,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77871,"src":"8619:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77843,"name":"uint256","nodeType":"ElementaryTypeName","src":"8619:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8618:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77882,"nodeType":"FunctionDefinition","src":"8921:130:157","nodes":[],"body":{"id":77881,"nodeType":"Block","src":"9002:49:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77877,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"9019:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9019:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77879,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9029:15:157","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":72515,"src":"9019:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"functionReturnParameters":77876,"id":77880,"nodeType":"Return","src":"9012:32:157"}]},"baseFunctions":[72665],"functionSelector":"84d22a4f","implemented":true,"kind":"function","modifiers":[],"name":"computeSettings","nameLocation":"8930:15:157","parameters":{"id":77872,"nodeType":"ParameterList","parameters":[],"src":"8945:2:157"},"returnParameters":{"id":77876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77875,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77882,"src":"8969:31:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_memory_ptr","typeString":"struct Gear.ComputationSettings"},"typeName":{"id":77874,"nodeType":"UserDefinedTypeName","pathNode":{"id":77873,"name":"Gear.ComputationSettings","nameLocations":["8969:4:157","8974:19:157"],"nodeType":"IdentifierPath","referencedDeclaration":79943,"src":"8969:24:157"},"referencedDeclaration":79943,"src":"8969:24:157","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$79943_storage_ptr","typeString":"struct Gear.ComputationSettings"}},"visibility":"internal"}],"src":"8968:33:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77898,"nodeType":"FunctionDefinition","src":"9057:134:157","nodes":[],"body":{"id":77897,"nodeType":"Block","src":"9130:61:157","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77890,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"9147:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9147:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77892,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9157:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"9147:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77893,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9170:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"9147:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79933_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":77895,"indexExpression":{"id":77894,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77884,"src":"9176:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9147:37:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"functionReturnParameters":77889,"id":77896,"nodeType":"Return","src":"9140:44:157"}]},"baseFunctions":[72673],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"9066:9:157","parameters":{"id":77885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77884,"mutability":"mutable","name":"_codeId","nameLocation":"9084:7:157","nodeType":"VariableDeclaration","scope":77898,"src":"9076:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77883,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9076:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9075:17:157"},"returnParameters":{"id":77889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77888,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77898,"src":"9114:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"},"typeName":{"id":77887,"nodeType":"UserDefinedTypeName","pathNode":{"id":77886,"name":"Gear.CodeState","nameLocations":["9114:4:157","9119:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":79933,"src":"9114:14:157"},"referencedDeclaration":79933,"src":"9114:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"visibility":"internal"}],"src":"9113:16:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77956,"nodeType":"FunctionDefinition","src":"9197:378:157","nodes":[],"body":{"id":77955,"nodeType":"Block","src":"9294:281:157","nodes":[],"statements":[{"assignments":[77910],"declarations":[{"constant":false,"id":77910,"mutability":"mutable","name":"router","nameLocation":"9320:6:157","nodeType":"VariableDeclaration","scope":77955,"src":"9304:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77909,"nodeType":"UserDefinedTypeName","pathNode":{"id":77908,"name":"Storage","nameLocations":["9304:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"9304:7:157"},"referencedDeclaration":72524,"src":"9304:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77913,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77911,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"9329:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9329:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9304:34:157"},{"assignments":[77919],"declarations":[{"constant":false,"id":77919,"mutability":"mutable","name":"res","nameLocation":"9373:3:157","nodeType":"VariableDeclaration","scope":77955,"src":"9349:27:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79933_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":77917,"nodeType":"UserDefinedTypeName","pathNode":{"id":77916,"name":"Gear.CodeState","nameLocations":["9349:4:157","9354:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":79933,"src":"9349:14:157"},"referencedDeclaration":79933,"src":"9349:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"id":77918,"nodeType":"ArrayTypeName","src":"9349:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79933_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"id":77927,"initialValue":{"arguments":[{"expression":{"id":77924,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77901,"src":"9400:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":77925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9410:6:157","memberName":"length","nodeType":"MemberAccess","src":"9400:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77923,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9379:20:157","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_enum$_CodeState_$79933_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (enum Gear.CodeState[] memory)"},"typeName":{"baseType":{"id":77921,"nodeType":"UserDefinedTypeName","pathNode":{"id":77920,"name":"Gear.CodeState","nameLocations":["9383:4:157","9388:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":79933,"src":"9383:14:157"},"referencedDeclaration":79933,"src":"9383:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"id":77922,"nodeType":"ArrayTypeName","src":"9383:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79933_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}}},"id":77926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9379:38:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79933_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9349:68:157"},{"body":{"id":77951,"nodeType":"Block","src":"9475:73:157","statements":[{"expression":{"id":77949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":77939,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77919,"src":"9489:3:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79933_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"id":77941,"indexExpression":{"id":77940,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77929,"src":"9493:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9489:6:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":77942,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77910,"src":"9498:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9505:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"9498:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9518:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"9498:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79933_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":77948,"indexExpression":{"baseExpression":{"id":77945,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77901,"src":"9524:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":77947,"indexExpression":{"id":77946,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77929,"src":"9534:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9524:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9498:39:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"src":"9489:48:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"id":77950,"nodeType":"ExpressionStatement","src":"9489:48:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":77935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":77932,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77929,"src":"9448:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":77933,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77901,"src":"9452:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":77934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9462:6:157","memberName":"length","nodeType":"MemberAccess","src":"9452:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9448:20:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":77952,"initializationExpression":{"assignments":[77929],"declarations":[{"constant":false,"id":77929,"mutability":"mutable","name":"i","nameLocation":"9441:1:157","nodeType":"VariableDeclaration","scope":77952,"src":"9433:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77928,"name":"uint256","nodeType":"ElementaryTypeName","src":"9433:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":77931,"initialValue":{"hexValue":"30","id":77930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9445:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9433:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":77937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9470:3:157","subExpression":{"id":77936,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77929,"src":"9470:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":77938,"nodeType":"ExpressionStatement","src":"9470:3:157"},"nodeType":"ForStatement","src":"9428:120:157"},{"expression":{"id":77953,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77919,"src":"9565:3:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79933_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"functionReturnParameters":77907,"id":77954,"nodeType":"Return","src":"9558:10:157"}]},"baseFunctions":[72683],"functionSelector":"82bdeaad","implemented":true,"kind":"function","modifiers":[],"name":"codesStates","nameLocation":"9206:11:157","parameters":{"id":77902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77901,"mutability":"mutable","name":"_codesIds","nameLocation":"9237:9:157","nodeType":"VariableDeclaration","scope":77956,"src":"9218:28:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":77899,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9218:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":77900,"nodeType":"ArrayTypeName","src":"9218:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"9217:30:157"},"returnParameters":{"id":77907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77906,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77956,"src":"9269:23:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79933_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":77904,"nodeType":"UserDefinedTypeName","pathNode":{"id":77903,"name":"Gear.CodeState","nameLocations":["9269:4:157","9274:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":79933,"src":"9269:14:157"},"referencedDeclaration":79933,"src":"9269:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"id":77905,"nodeType":"ArrayTypeName","src":"9269:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$79933_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"src":"9268:25:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":77971,"nodeType":"FunctionDefinition","src":"9581:140:157","nodes":[],"body":{"id":77970,"nodeType":"Block","src":"9654:67:157","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":77963,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"9671:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9671:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":77965,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9681:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"9671:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":77966,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9694:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79973,"src":"9671:31:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":77968,"indexExpression":{"id":77967,"name":"_programId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77958,"src":"9703:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9671:43:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":77962,"id":77969,"nodeType":"Return","src":"9664:50:157"}]},"baseFunctions":[72690],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"9590:13:157","parameters":{"id":77959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77958,"mutability":"mutable","name":"_programId","nameLocation":"9612:10:157","nodeType":"VariableDeclaration","scope":77971,"src":"9604:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":77957,"name":"address","nodeType":"ElementaryTypeName","src":"9604:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9603:20:157"},"returnParameters":{"id":77962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":77971,"src":"9645:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77960,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9645:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9644:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":78026,"nodeType":"FunctionDefinition","src":"9727:376:157","nodes":[],"body":{"id":78025,"nodeType":"Block","src":"9824:279:157","nodes":[],"statements":[{"assignments":[77982],"declarations":[{"constant":false,"id":77982,"mutability":"mutable","name":"router","nameLocation":"9850:6:157","nodeType":"VariableDeclaration","scope":78025,"src":"9834:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":77981,"nodeType":"UserDefinedTypeName","pathNode":{"id":77980,"name":"Storage","nameLocations":["9834:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"9834:7:157"},"referencedDeclaration":72524,"src":"9834:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":77985,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":77983,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"9859:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":77984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9859:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9834:34:157"},{"assignments":[77990],"declarations":[{"constant":false,"id":77990,"mutability":"mutable","name":"res","nameLocation":"9896:3:157","nodeType":"VariableDeclaration","scope":78025,"src":"9879:20:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":77988,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9879:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":77989,"nodeType":"ArrayTypeName","src":"9879:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":77997,"initialValue":{"arguments":[{"expression":{"id":77994,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77974,"src":"9916:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":77995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9929:6:157","memberName":"length","nodeType":"MemberAccess","src":"9916:19:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":77993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9902:13:157","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":77991,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9906:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":77992,"nodeType":"ArrayTypeName","src":"9906:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":77996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9902:34:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9879:57:157"},{"body":{"id":78021,"nodeType":"Block","src":"9997:79:157","statements":[{"expression":{"id":78019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":78009,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77990,"src":"10011:3:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":78011,"indexExpression":{"id":78010,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77999,"src":"10015:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10011:6:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":78012,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77982,"src":"10020:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78013,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10027:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"10020:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10040:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79973,"src":"10020:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":78018,"indexExpression":{"baseExpression":{"id":78015,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77974,"src":"10049:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":78017,"indexExpression":{"id":78016,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77999,"src":"10062:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10049:15:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10020:45:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10011:54:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":78020,"nodeType":"ExpressionStatement","src":"10011:54:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78002,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77999,"src":"9967:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":78003,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77974,"src":"9971:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":78004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9984:6:157","memberName":"length","nodeType":"MemberAccess","src":"9971:19:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9967:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78022,"initializationExpression":{"assignments":[77999],"declarations":[{"constant":false,"id":77999,"mutability":"mutable","name":"i","nameLocation":"9960:1:157","nodeType":"VariableDeclaration","scope":78022,"src":"9952:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77998,"name":"uint256","nodeType":"ElementaryTypeName","src":"9952:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78001,"initialValue":{"hexValue":"30","id":78000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9964:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9952:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":78007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9992:3:157","subExpression":{"id":78006,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77999,"src":"9992:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":78008,"nodeType":"ExpressionStatement","src":"9992:3:157"},"nodeType":"ForStatement","src":"9947:129:157"},{"expression":{"id":78023,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77990,"src":"10093:3:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":77979,"id":78024,"nodeType":"Return","src":"10086:10:157"}]},"baseFunctions":[72699],"functionSelector":"baaf0201","implemented":true,"kind":"function","modifiers":[],"name":"programsCodeIds","nameLocation":"9736:15:157","parameters":{"id":77975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77974,"mutability":"mutable","name":"_programsIds","nameLocation":"9771:12:157","nodeType":"VariableDeclaration","scope":78026,"src":"9752:31:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":77972,"name":"address","nodeType":"ElementaryTypeName","src":"9752:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":77973,"nodeType":"ArrayTypeName","src":"9752:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"9751:33:157"},"returnParameters":{"id":77979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":77978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78026,"src":"9806:16:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":77976,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9806:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":77977,"nodeType":"ArrayTypeName","src":"9806:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"9805:18:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":78037,"nodeType":"FunctionDefinition","src":"10109:115:157","nodes":[],"body":{"id":78036,"nodeType":"Block","src":"10164:60:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":78031,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"10181:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10181:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78033,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10191:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"10181:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78034,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10204:13:157","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":79975,"src":"10181:36:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":78030,"id":78035,"nodeType":"Return","src":"10174:43:157"}]},"baseFunctions":[72704],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"10118:13:157","parameters":{"id":78027,"nodeType":"ParameterList","parameters":[],"src":"10131:2:157"},"returnParameters":{"id":78030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78029,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78037,"src":"10155:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78028,"name":"uint256","nodeType":"ElementaryTypeName","src":"10155:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10154:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":78048,"nodeType":"FunctionDefinition","src":"10230:127:157","nodes":[],"body":{"id":78047,"nodeType":"Block","src":"10291:66:157","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":78042,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"10308:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10308:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10318:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"10308:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78045,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10331:19:157","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":79977,"src":"10308:42:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":78041,"id":78046,"nodeType":"Return","src":"10301:49:157"}]},"baseFunctions":[72709],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"10239:19:157","parameters":{"id":78038,"nodeType":"ParameterList","parameters":[],"src":"10258:2:157"},"returnParameters":{"id":78041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78048,"src":"10282:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78039,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10281:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":78059,"nodeType":"FunctionDefinition","src":"10363:108:157","nodes":[],"body":{"id":78058,"nodeType":"Block","src":"10428:43:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":78054,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"10445:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10445:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10455:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"10445:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},"functionReturnParameters":78053,"id":78057,"nodeType":"Return","src":"10438:26:157"}]},"baseFunctions":[72715],"functionSelector":"9eb939a8","implemented":true,"kind":"function","modifiers":[],"name":"timelines","nameLocation":"10372:9:157","parameters":{"id":78049,"nodeType":"ParameterList","parameters":[],"src":"10381:2:157"},"returnParameters":{"id":78053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78052,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78059,"src":"10405:21:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_memory_ptr","typeString":"struct Gear.Timelines"},"typeName":{"id":78051,"nodeType":"UserDefinedTypeName","pathNode":{"id":78050,"name":"Gear.Timelines","nameLocations":["10405:4:157","10410:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":80012,"src":"10405:14:157"},"referencedDeclaration":80012,"src":"10405:14:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage_ptr","typeString":"struct Gear.Timelines"}},"visibility":"internal"}],"src":"10404:23:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":78074,"nodeType":"FunctionDefinition","src":"10497:116:157","nodes":[],"body":{"id":78073,"nodeType":"Block","src":"10554:59:157","nodes":[],"statements":[{"expression":{"id":78071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":78066,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"10564:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10564:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10574:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"10564:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":78069,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10588:6:157","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":79838,"src":"10564:30:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":78070,"name":"newMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78061,"src":"10597:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10564:42:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":78072,"nodeType":"ExpressionStatement","src":"10564:42:157"}]},"baseFunctions":[72720],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":78064,"kind":"modifierInvocation","modifierName":{"id":78063,"name":"onlyOwner","nameLocations":["10544:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"10544:9:157"},"nodeType":"ModifierInvocation","src":"10544:9:157"}],"name":"setMirror","nameLocation":"10506:9:157","parameters":{"id":78062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78061,"mutability":"mutable","name":"newMirror","nameLocation":"10524:9:157","nodeType":"VariableDeclaration","scope":78074,"src":"10516:17:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78060,"name":"address","nodeType":"ElementaryTypeName","src":"10516:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10515:19:157"},"returnParameters":{"id":78065,"nodeType":"ParameterList","parameters":[],"src":"10554:0:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78126,"nodeType":"FunctionDefinition","src":"10635:398:157","nodes":[],"body":{"id":78125,"nodeType":"Block","src":"10673:360:157","nodes":[],"statements":[{"assignments":[78079],"declarations":[{"constant":false,"id":78079,"mutability":"mutable","name":"router","nameLocation":"10699:6:157","nodeType":"VariableDeclaration","scope":78125,"src":"10683:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78078,"nodeType":"UserDefinedTypeName","pathNode":{"id":78077,"name":"Storage","nameLocations":["10683:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"10683:7:157"},"referencedDeclaration":72524,"src":"10683:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":78082,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":78080,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"10708:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10708:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10683:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78084,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78079,"src":"10736:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10743:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"10736:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78086,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10756:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79945,"src":"10736:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":78089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10772:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10764:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78087,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10764:7:157","typeDescriptions":{}}},"id":78090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10764:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10736:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"67656e65736973206861736820616c726561647920736574","id":78092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10776:26:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""},"value":"genesis hash already set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""}],"id":78083,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10728:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10728:75:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78094,"nodeType":"ExpressionStatement","src":"10728:75:157"},{"assignments":[78096],"declarations":[{"constant":false,"id":78096,"mutability":"mutable","name":"genesisHash","nameLocation":"10822:11:157","nodeType":"VariableDeclaration","scope":78125,"src":"10814:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78095,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10814:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78102,"initialValue":{"arguments":[{"expression":{"expression":{"id":78098,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78079,"src":"10846:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78099,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10853:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"10846:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10866:6:157","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":79947,"src":"10846:26:157","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":78097,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"10836:9:157","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":78101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10836:37:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"10814:59:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78104,"name":"genesisHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78096,"src":"10892:11:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":78107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10915:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78106,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10907:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78105,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10907:7:157","typeDescriptions":{}}},"id":78108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10907:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10892:25:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"756e61626c6520746f206c6f6f6b75702067656e657369732068617368","id":78110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10919:31:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""},"value":"unable to lookup genesis hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""}],"id":78103,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10884:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10884:67:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78112,"nodeType":"ExpressionStatement","src":"10884:67:157"},{"expression":{"id":78123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":78113,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78079,"src":"10962:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10969:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"10962:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10982:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79945,"src":"10962:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":78119,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78079,"src":"10999:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78120,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11006:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"10999:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11019:6:157","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":79947,"src":"10999:26:157","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":78118,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"10989:9:157","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":78122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10989:37:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10962:64:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":78124,"nodeType":"ExpressionStatement","src":"10962:64:157"}]},"baseFunctions":[72723],"functionSelector":"8b1edf1e","implemented":true,"kind":"function","modifiers":[],"name":"lookupGenesisHash","nameLocation":"10644:17:157","parameters":{"id":78075,"nodeType":"ParameterList","parameters":[],"src":"10661:2:157"},"returnParameters":{"id":78076,"nodeType":"ParameterList","parameters":[],"src":"10673:0:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78188,"nodeType":"FunctionDefinition","src":"11039:636:157","nodes":[],"body":{"id":78187,"nodeType":"Block","src":"11096:579:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":78133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11123:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78132,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"11114:8:157","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":78134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11114:11:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":78135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11129:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11114:16:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f622063616e277420626520666f756e642c20726f75746572206578706563746564204549502d34383434207472616e73616374696f6e2077697468205741534d20626c6f62","id":78137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11132:74:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_af0f866770c8aa103a2a4d7a589ebda1bb4a2ed5d00b4f369fe2be0485c7bbf0","typeString":"literal_string \"blob can't be found, router expected EIP-4844 transaction with WASM blob\""},"value":"blob can't be found, router expected EIP-4844 transaction with WASM blob"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_af0f866770c8aa103a2a4d7a589ebda1bb4a2ed5d00b4f369fe2be0485c7bbf0","typeString":"literal_string \"blob can't be found, router expected EIP-4844 transaction with WASM blob\""}],"id":78131,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11106:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11106:101:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78139,"nodeType":"ExpressionStatement","src":"11106:101:157"},{"assignments":[78142],"declarations":[{"constant":false,"id":78142,"mutability":"mutable","name":"router","nameLocation":"11234:6:157","nodeType":"VariableDeclaration","scope":78187,"src":"11218:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78141,"nodeType":"UserDefinedTypeName","pathNode":{"id":78140,"name":"Storage","nameLocations":["11218:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"11218:7:157"},"referencedDeclaration":72524,"src":"11218:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":78145,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":78143,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"11243:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11243:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"11218:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78147,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78142,"src":"11270:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78148,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11277:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"11270:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11290:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79945,"src":"11270:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":78152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11306:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78151,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11298:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11298:7:157","typeDescriptions":{}}},"id":78153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11298:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11270:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":78155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11310:58:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":78146,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11262:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11262:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78157,"nodeType":"ExpressionStatement","src":"11262:107:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"},"id":78167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":78159,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78142,"src":"11401:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78160,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11408:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"11401:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11421:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"11401:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79933_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78163,"indexExpression":{"id":78162,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78128,"src":"11427:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11401:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":78164,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"11439:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11444:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79933,"src":"11439:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79933_$","typeString":"type(enum Gear.CodeState)"}},"id":78166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11454:7:157","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":79930,"src":"11439:22:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"src":"11401:60:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"676976656e20636f646520696420697320616c7265616479206f6e2076616c69646174696f6e206f722076616c696461746564","id":78168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11475:53:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""},"value":"given code id is already on validation or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""}],"id":78158,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11380:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11380:158:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78170,"nodeType":"ExpressionStatement","src":"11380:158:157"},{"expression":{"id":78181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":78171,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78142,"src":"11549:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78175,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11556:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"11549:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11569:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"11549:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79933_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78177,"indexExpression":{"id":78174,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78128,"src":"11575:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11549:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":78178,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"11586:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11591:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79933,"src":"11586:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79933_$","typeString":"type(enum Gear.CodeState)"}},"id":78180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11601:19:157","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"11586:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"src":"11549:71:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"id":78182,"nodeType":"ExpressionStatement","src":"11549:71:157"},{"eventCall":{"arguments":[{"id":78184,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78128,"src":"11660:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":78183,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72546,"src":"11636:23:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":78185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11636:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78186,"nodeType":"EmitStatement","src":"11631:37:157"}]},"baseFunctions":[72729],"functionSelector":"120e3f1e","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"11048:21:157","parameters":{"id":78129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78128,"mutability":"mutable","name":"_codeId","nameLocation":"11078:7:157","nodeType":"VariableDeclaration","scope":78188,"src":"11070:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78127,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11070:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11069:17:157"},"returnParameters":{"id":78130,"nodeType":"ParameterList","parameters":[],"src":"11096:0:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78229,"nodeType":"FunctionDefinition","src":"11681:348:157","nodes":[],"body":{"id":78228,"nodeType":"Block","src":"11793:236:157","nodes":[],"statements":[{"assignments":[78200],"declarations":[{"constant":false,"id":78200,"mutability":"mutable","name":"mirror","nameLocation":"11811:6:157","nodeType":"VariableDeclaration","scope":78228,"src":"11803:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78199,"name":"address","nodeType":"ElementaryTypeName","src":"11803:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":78206,"initialValue":{"arguments":[{"id":78202,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78190,"src":"11835:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78203,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78192,"src":"11844:5:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":78204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11851:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":78201,"name":"_createProgram","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78523,"src":"11820:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_bool_$returns$_t_address_$","typeString":"function (bytes32,bytes32,bool) returns (address)"}},"id":78205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11820:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11803:53:157"},{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":78216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78211,"name":"_overrideInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78194,"src":"11907:20:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":78214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11939:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11931:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":78212,"name":"address","nodeType":"ElementaryTypeName","src":"11931:7:157","typeDescriptions":{}}},"id":78215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11931:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11907:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":78219,"name":"_overrideInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78194,"src":"11957:20:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":78220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11907:70:157","trueExpression":{"expression":{"id":78217,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11944:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":78218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11948:6:157","memberName":"sender","nodeType":"MemberAccess","src":"11944:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":78221,"name":"mirrorImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77652,"src":"11979:10:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":78222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11979:12:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":78223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11993:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[{"id":78208,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78200,"src":"11875:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78207,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"11867:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$72455_$","typeString":"type(contract IMirror)"}},"id":78209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11867:15:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$72455","typeString":"contract IMirror"}},"id":78210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11896:10:157","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":72446,"src":"11867:39:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool) external"}},"id":78224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11867:131:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78225,"nodeType":"ExpressionStatement","src":"11867:131:157"},{"expression":{"id":78226,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78200,"src":"12016:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":78198,"id":78227,"nodeType":"Return","src":"12009:13:157"}]},"baseFunctions":[72741],"functionSelector":"3683c4d2","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"11690:13:157","parameters":{"id":78195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78190,"mutability":"mutable","name":"_codeId","nameLocation":"11712:7:157","nodeType":"VariableDeclaration","scope":78229,"src":"11704:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78189,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11704:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78192,"mutability":"mutable","name":"_salt","nameLocation":"11729:5:157","nodeType":"VariableDeclaration","scope":78229,"src":"11721:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11721:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78194,"mutability":"mutable","name":"_overrideInitializer","nameLocation":"11744:20:157","nodeType":"VariableDeclaration","scope":78229,"src":"11736:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78193,"name":"address","nodeType":"ElementaryTypeName","src":"11736:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11703:62:157"},"returnParameters":{"id":78198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78197,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78229,"src":"11784:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78196,"name":"address","nodeType":"ElementaryTypeName","src":"11784:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11783:9:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78271,"nodeType":"FunctionDefinition","src":"12035:428:157","nodes":[],"body":{"id":78270,"nodeType":"Block","src":"12224:239:157","nodes":[],"statements":[{"assignments":[78243],"declarations":[{"constant":false,"id":78243,"mutability":"mutable","name":"mirror","nameLocation":"12242:6:157","nodeType":"VariableDeclaration","scope":78270,"src":"12234:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78242,"name":"address","nodeType":"ElementaryTypeName","src":"12234:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":78249,"initialValue":{"arguments":[{"id":78245,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78231,"src":"12266:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78246,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78233,"src":"12275:5:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"66616c7365","id":78247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12282:5:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":78244,"name":"_createProgram","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78523,"src":"12251:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_bool_$returns$_t_address_$","typeString":"function (bytes32,bytes32,bool) returns (address)"}},"id":78248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12251:37:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"12234:54:157"},{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":78259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78254,"name":"_overrideInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78235,"src":"12339:20:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":78257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12371:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78256,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12363:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":78255,"name":"address","nodeType":"ElementaryTypeName","src":"12363:7:157","typeDescriptions":{}}},"id":78258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12363:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12339:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":78262,"name":"_overrideInitializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78235,"src":"12389:20:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":78263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12339:70:157","trueExpression":{"expression":{"id":78260,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12376:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":78261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12380:6:157","memberName":"sender","nodeType":"MemberAccess","src":"12376:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":78264,"name":"_abiInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78237,"src":"12411:13:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":78265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12426:5:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[{"id":78251,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78243,"src":"12307:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78250,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"12299:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$72455_$","typeString":"type(contract IMirror)"}},"id":78252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12299:15:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$72455","typeString":"contract IMirror"}},"id":78253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12328:10:157","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":72446,"src":"12299:39:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool) external"}},"id":78266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12299:133:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78267,"nodeType":"ExpressionStatement","src":"12299:133:157"},{"expression":{"id":78268,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78243,"src":"12450:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":78241,"id":78269,"nodeType":"Return","src":"12443:13:157"}]},"baseFunctions":[72755],"functionSelector":"0c18d277","implemented":true,"kind":"function","modifiers":[],"name":"createProgramWithAbiInterface","nameLocation":"12044:29:157","parameters":{"id":78238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78231,"mutability":"mutable","name":"_codeId","nameLocation":"12091:7:157","nodeType":"VariableDeclaration","scope":78271,"src":"12083:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78230,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12083:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78233,"mutability":"mutable","name":"_salt","nameLocation":"12116:5:157","nodeType":"VariableDeclaration","scope":78271,"src":"12108:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78232,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12108:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78235,"mutability":"mutable","name":"_overrideInitializer","nameLocation":"12139:20:157","nodeType":"VariableDeclaration","scope":78271,"src":"12131:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78234,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":78237,"mutability":"mutable","name":"_abiInterface","nameLocation":"12177:13:157","nodeType":"VariableDeclaration","scope":78271,"src":"12169:21:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78236,"name":"address","nodeType":"ElementaryTypeName","src":"12169:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12073:123:157"},"returnParameters":{"id":78241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78240,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78271,"src":"12215:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78239,"name":"address","nodeType":"ElementaryTypeName","src":"12215:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12214:9:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78425,"nodeType":"FunctionDefinition","src":"12469:2218:157","nodes":[],"body":{"id":78424,"nodeType":"Block","src":"12645:2042:157","nodes":[],"statements":[{"assignments":[78287],"declarations":[{"constant":false,"id":78287,"mutability":"mutable","name":"router","nameLocation":"12671:6:157","nodeType":"VariableDeclaration","scope":78424,"src":"12655:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78286,"nodeType":"UserDefinedTypeName","pathNode":{"id":78285,"name":"Storage","nameLocations":["12655:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"12655:7:157"},"referencedDeclaration":72524,"src":"12655:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":78290,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":78288,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"12680:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12680:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12655:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78292,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"12708:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12715:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"12708:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12728:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79945,"src":"12708:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":78297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12744:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12736:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78295,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12736:7:157","typeDescriptions":{}}},"id":78298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12736:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12708:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":78300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12748:58:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":78291,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12700:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12700:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78302,"nodeType":"ExpressionStatement","src":"12700:107:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78303,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"12971:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12978:8:157","memberName":"reserved","nodeType":"MemberAccess","referencedDeclaration":72495,"src":"12971:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":78305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12990:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12971:20:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78328,"nodeType":"IfStatement","src":"12967:259:157","trueBody":{"id":78327,"nodeType":"Block","src":"12993:233:157","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":78310,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"13039:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13046:9:157","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":79871,"src":"13039:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78312,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"13057:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13064:6:157","memberName":"expiry","nodeType":"MemberAccess","referencedDeclaration":79880,"src":"13057:13:157","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":78308,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"13015:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13020:18:157","memberName":"blockIsPredecessor","nodeType":"MemberAccess","referencedDeclaration":80212,"src":"13015:23:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_uint8_$returns$_t_bool_$","typeString":"function (bytes32,uint8) view returns (bool)"}},"id":78314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13015:56:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b207761736e277420666f756e64","id":78315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13073:40:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""},"value":"allowed predecessor block wasn't found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""}],"id":78307,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"13007:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13007:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78317,"nodeType":"ExpressionStatement","src":"13007:107:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78319,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"13136:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":78320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13142:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"13136:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":78321,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"13154:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13161:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79874,"src":"13154:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"13136:39:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"62617463682074696d657374616d70206d75737420626520696e207468652070617374","id":78324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13177:37:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e97677af8fd3d6db2bba783b1126d9720b52e7ce22f9dd002ac530194accd2e","typeString":"literal_string \"batch timestamp must be in the past\""},"value":"batch timestamp must be in the past"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8e97677af8fd3d6db2bba783b1126d9720b52e7ce22f9dd002ac530194accd2e","typeString":"literal_string \"batch timestamp must be in the past\""}],"id":78318,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"13128:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13128:87:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78326,"nodeType":"ExpressionStatement","src":"13128:87:157"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78330,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"13339:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78331,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13346:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"13339:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79938_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":78332,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13367:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79935,"src":"13339:32:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":78333,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"13375:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13382:26:157","memberName":"previousCommittedBatchHash","nodeType":"MemberAccess","referencedDeclaration":79877,"src":"13375:33:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"13339:69:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d69747465642062617463682068617368","id":78336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13422:39:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_95e5a4d2857f70c180e6f7fbcfe184f0ada58708c5b8d34699db125950a65e1f","typeString":"literal_string \"invalid previous committed batch hash\""},"value":"invalid previous committed batch hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_95e5a4d2857f70c180e6f7fbcfe184f0ada58708c5b8d34699db125950a65e1f","typeString":"literal_string \"invalid previous committed batch hash\""}],"id":78329,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"13318:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13318:153:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78338,"nodeType":"ExpressionStatement","src":"13318:153:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":78345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78340,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"13503:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78341,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13510:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"13503:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79938_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":78342,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13531:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79937,"src":"13503:37:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":78343,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"13544:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13551:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79874,"src":"13544:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"13503:62:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"62617463682074696d657374616d70206d7573742062652067726561746572206f7220657175616c20746f206c617465737420636f6d6d69747465642062617463682074696d657374616d70","id":78346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13579:78:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_38732c780a7ec5ee19f9f891d164b448dcdb267a227cba9428e8953292a463cf","typeString":"literal_string \"batch timestamp must be greater or equal to latest committed batch timestamp\""},"value":"batch timestamp must be greater or equal to latest committed batch timestamp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_38732c780a7ec5ee19f9f891d164b448dcdb267a227cba9428e8953292a463cf","typeString":"literal_string \"batch timestamp must be greater or equal to latest committed batch timestamp\""}],"id":78339,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"13482:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13482:185:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78348,"nodeType":"ExpressionStatement","src":"13482:185:157"},{"assignments":[78350],"declarations":[{"constant":false,"id":78350,"mutability":"mutable","name":"_chainCommitmentHash","nameLocation":"13686:20:157","nodeType":"VariableDeclaration","scope":78424,"src":"13678:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78349,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13678:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78355,"initialValue":{"arguments":[{"id":78352,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"13722:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78353,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"13730:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}],"id":78351,"name":"_commitChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78585,"src":"13709:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_struct$_BatchCommitment_$79901_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BatchCommitment calldata) returns (bytes32)"}},"id":78354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13709:28:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13678:59:157"},{"assignments":[78357],"declarations":[{"constant":false,"id":78357,"mutability":"mutable","name":"_codeCommitmentsHash","nameLocation":"13755:20:157","nodeType":"VariableDeclaration","scope":78424,"src":"13747:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78356,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13747:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78362,"initialValue":{"arguments":[{"id":78359,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"13791:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78360,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"13799:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}],"id":78358,"name":"_commitCodes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78694,"src":"13778:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_struct$_BatchCommitment_$79901_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BatchCommitment calldata) returns (bytes32)"}},"id":78361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13778:28:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13747:59:157"},{"assignments":[78364],"declarations":[{"constant":false,"id":78364,"mutability":"mutable","name":"_rewardsCommitmentHash","nameLocation":"13824:22:157","nodeType":"VariableDeclaration","scope":78424,"src":"13816:30:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78363,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13816:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78369,"initialValue":{"arguments":[{"id":78366,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"13864:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78367,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"13872:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}],"id":78365,"name":"_commitRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78841,"src":"13849:14:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_struct$_BatchCommitment_$79901_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BatchCommitment calldata) returns (bytes32)"}},"id":78368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13849:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13816:63:157"},{"assignments":[78371],"declarations":[{"constant":false,"id":78371,"mutability":"mutable","name":"_validatorsCommitmentHash","nameLocation":"13897:25:157","nodeType":"VariableDeclaration","scope":78424,"src":"13889:33:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78370,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13889:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78376,"initialValue":{"arguments":[{"id":78373,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"13943:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78374,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"13951:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}],"id":78372,"name":"_commitValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78982,"src":"13925:17:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_struct$_BatchCommitment_$79901_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BatchCommitment calldata) returns (bytes32)"}},"id":78375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13925:33:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13889:69:157"},{"assignments":[78378],"declarations":[{"constant":false,"id":78378,"mutability":"mutable","name":"_batchHash","nameLocation":"13977:10:157","nodeType":"VariableDeclaration","scope":78424,"src":"13969:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78377,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13969:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78394,"initialValue":{"arguments":[{"expression":{"id":78381,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"14028:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14035:9:157","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":79871,"src":"14028:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78383,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"14058:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14065:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79874,"src":"14058:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"expression":{"id":78385,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"14093:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14100:26:157","memberName":"previousCommittedBatchHash","nodeType":"MemberAccess","referencedDeclaration":79877,"src":"14093:33:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78387,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"14140:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14147:6:157","memberName":"expiry","nodeType":"MemberAccess","referencedDeclaration":79880,"src":"14140:13:157","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":78389,"name":"_chainCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78350,"src":"14167:20:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78390,"name":"_codeCommitmentsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78357,"src":"14201:20:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78391,"name":"_rewardsCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78364,"src":"14235:22:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78392,"name":"_validatorsCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78371,"src":"14271:25:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78379,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"13990:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13995:19:157","memberName":"batchCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":80101,"src":"13990:24:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint48_$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint48,bytes32,uint8,bytes32,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":78393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13990:316:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13969:337:157"},{"expression":{"id":78404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":78395,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"14317:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14324:20:157","memberName":"latestCommittedBatch","nodeType":"MemberAccess","referencedDeclaration":72503,"src":"14317:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79938_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":78400,"name":"_batchHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78378,"src":"14371:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78401,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"14383:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14390:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79874,"src":"14383:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78398,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"14347:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14352:18:157","memberName":"CommittedBatchInfo","nodeType":"MemberAccess","referencedDeclaration":79938,"src":"14347:23:157","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CommittedBatchInfo_$79938_storage_ptr_$","typeString":"type(struct Gear.CommittedBatchInfo storage pointer)"}},"id":78403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14347:58:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79938_memory_ptr","typeString":"struct Gear.CommittedBatchInfo memory"}},"src":"14317:88:157","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBatchInfo_$79938_storage","typeString":"struct Gear.CommittedBatchInfo storage ref"}},"id":78405,"nodeType":"ExpressionStatement","src":"14317:88:157"},{"eventCall":{"arguments":[{"id":78407,"name":"_batchHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78378,"src":"14435:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":78406,"name":"BatchCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72529,"src":"14420:14:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":78408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14420:26:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78409,"nodeType":"EmitStatement","src":"14415:31:157"},{"expression":{"arguments":[{"arguments":[{"id":78413,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78287,"src":"14521:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":78414,"name":"TRANSIENT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77294,"src":"14529:17:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78415,"name":"_batchHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78378,"src":"14548:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78416,"name":"_signatureType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78277,"src":"14560:14:157","typeDescriptions":{"typeIdentifier":"t_enum$_SignatureType_$80065","typeString":"enum Gear.SignatureType"}},{"id":78417,"name":"_signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78280,"src":"14576:11:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},{"expression":{"id":78418,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78274,"src":"14589:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14596:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79874,"src":"14589:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_SignatureType_$80065","typeString":"enum Gear.SignatureType"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78411,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"14478:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14483:20:157","memberName":"validateSignaturesAt","nodeType":"MemberAccess","referencedDeclaration":80608,"src":"14478:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_bytes32_$_t_bytes32_$_t_enum$_SignatureType_$80065_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_uint256_$returns$_t_bool_$","typeString":"function (struct IRouter.Storage storage pointer,bytes32,bytes32,enum Gear.SignatureType,bytes calldata[] calldata,uint256) returns (bool)"}},"id":78420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14478:146:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7369676e61747572657320766572696669636174696f6e206661696c6564","id":78421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14638:32:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""},"value":"signatures verification failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""}],"id":78410,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14457:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14457:223:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78423,"nodeType":"ExpressionStatement","src":"14457:223:157"}]},"baseFunctions":[72768],"functionSelector":"b24fcac0","implemented":true,"kind":"function","modifiers":[{"id":78283,"kind":"modifierInvocation","modifierName":{"id":78282,"name":"nonReentrant","nameLocations":["12632:12:157"],"nodeType":"IdentifierPath","referencedDeclaration":42813,"src":"12632:12:157"},"nodeType":"ModifierInvocation","src":"12632:12:157"}],"name":"commitBatch","nameLocation":"12478:11:157","parameters":{"id":78281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78274,"mutability":"mutable","name":"_batch","nameLocation":"12529:6:157","nodeType":"VariableDeclaration","scope":78425,"src":"12499:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78273,"nodeType":"UserDefinedTypeName","pathNode":{"id":78272,"name":"Gear.BatchCommitment","nameLocations":["12499:4:157","12504:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79901,"src":"12499:20:157"},"referencedDeclaration":79901,"src":"12499:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"},{"constant":false,"id":78277,"mutability":"mutable","name":"_signatureType","nameLocation":"12564:14:157","nodeType":"VariableDeclaration","scope":78425,"src":"12545:33:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SignatureType_$80065","typeString":"enum Gear.SignatureType"},"typeName":{"id":78276,"nodeType":"UserDefinedTypeName","pathNode":{"id":78275,"name":"Gear.SignatureType","nameLocations":["12545:4:157","12550:13:157"],"nodeType":"IdentifierPath","referencedDeclaration":80065,"src":"12545:18:157"},"referencedDeclaration":80065,"src":"12545:18:157","typeDescriptions":{"typeIdentifier":"t_enum$_SignatureType_$80065","typeString":"enum Gear.SignatureType"}},"visibility":"internal"},{"constant":false,"id":78280,"mutability":"mutable","name":"_signatures","nameLocation":"12605:11:157","nodeType":"VariableDeclaration","scope":78425,"src":"12588:28:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":78278,"name":"bytes","nodeType":"ElementaryTypeName","src":"12588:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":78279,"nodeType":"ArrayTypeName","src":"12588:7:157","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"12489:133:157"},"returnParameters":{"id":78284,"nodeType":"ParameterList","parameters":[],"src":"12645:0:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":78523,"nodeType":"FunctionDefinition","src":"14729:989:157","nodes":[],"body":{"id":78522,"nodeType":"Block","src":"14826:892:157","nodes":[],"statements":[{"assignments":[78438],"declarations":[{"constant":false,"id":78438,"mutability":"mutable","name":"router","nameLocation":"14852:6:157","nodeType":"VariableDeclaration","scope":78522,"src":"14836:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78437,"nodeType":"UserDefinedTypeName","pathNode":{"id":78436,"name":"Storage","nameLocations":["14836:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"14836:7:157"},"referencedDeclaration":72524,"src":"14836:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":78441,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":78439,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"14861:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":78440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14861:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"14836:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":78450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78443,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78438,"src":"14888:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14895:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"14888:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78445,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14908:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79945,"src":"14888:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":78448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14924:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":78447,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14916:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":78446,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14916:7:157","typeDescriptions":{}}},"id":78449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14916:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"14888:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":78451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14928:58:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":78442,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14880:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14880:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78453,"nodeType":"ExpressionStatement","src":"14880:107:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"},"id":78463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":78455,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78438,"src":"15019:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78456,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15026:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"15019:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15039:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"15019:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79933_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78459,"indexExpression":{"id":78458,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78427,"src":"15045:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15019:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":78460,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"15057:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15062:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79933,"src":"15057:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79933_$","typeString":"type(enum Gear.CodeState)"}},"id":78462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15072:9:157","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":79932,"src":"15057:24:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"src":"15019:62:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":78464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15095:48:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":78454,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14998:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14998:155:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78466,"nodeType":"ExpressionStatement","src":"14998:155:157"},{"assignments":[78468],"declarations":[{"constant":false,"id":78468,"mutability":"mutable","name":"salt","nameLocation":"15322:4:157","nodeType":"VariableDeclaration","scope":78522,"src":"15314:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78467,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15314:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78476,"initialValue":{"arguments":[{"arguments":[{"id":78472,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78427,"src":"15356:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78473,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78429,"src":"15365:5:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78470,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15339:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":78471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15343:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"15339:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":78474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15339:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":78469,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15329:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15329:43:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15314:58:157"},{"assignments":[78478],"declarations":[{"constant":false,"id":78478,"mutability":"mutable","name":"actorId","nameLocation":"15390:7:157","nodeType":"VariableDeclaration","scope":78522,"src":"15382:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78477,"name":"address","nodeType":"ElementaryTypeName","src":"15382:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":78497,"initialValue":{"condition":{"id":78479,"name":"_isSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78431,"src":"15400:8:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"arguments":[{"id":78492,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"15523:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$79315","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$79315","typeString":"contract Router"}],"id":78491,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15515:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":78490,"name":"address","nodeType":"ElementaryTypeName","src":"15515:7:157","typeDescriptions":{}}},"id":78493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15515:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":78494,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78468,"src":"15530:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78488,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79688,"src":"15489:6:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$79688_$","typeString":"type(library Clones)"}},"id":78489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15496:18:157","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":79460,"src":"15489:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":78495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15489:46:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":78496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"15400:135:157","trueExpression":{"arguments":[{"arguments":[{"id":78484,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"15462:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$79315","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$79315","typeString":"contract Router"}],"id":78483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15454:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":78482,"name":"address","nodeType":"ElementaryTypeName","src":"15454:7:157","typeDescriptions":{}}},"id":78485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15454:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":78486,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78468,"src":"15469:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78480,"name":"ClonesSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79769,"src":"15423:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ClonesSmall_$79769_$","typeString":"type(library ClonesSmall)"}},"id":78481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15435:18:157","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":79708,"src":"15423:30:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":78487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15423:51:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"15382:153:157"},{"expression":{"id":78506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":78498,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78438,"src":"15546:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15553:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"15546:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15566:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79973,"src":"15546:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":78504,"indexExpression":{"id":78501,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78478,"src":"15575:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15546:37:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":78505,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78427,"src":"15586:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"15546:47:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":78507,"nodeType":"ExpressionStatement","src":"15546:47:157"},{"expression":{"id":78513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15603:35:157","subExpression":{"expression":{"expression":{"id":78508,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78438,"src":"15603:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78511,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15610:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"15603:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15623:13:157","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":79975,"src":"15603:33:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":78514,"nodeType":"ExpressionStatement","src":"15603:35:157"},{"eventCall":{"arguments":[{"id":78516,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78478,"src":"15669:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":78517,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78427,"src":"15678:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":78515,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72565,"src":"15654:14:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":78518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15654:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78519,"nodeType":"EmitStatement","src":"15649:37:157"},{"expression":{"id":78520,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78478,"src":"15704:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":78435,"id":78521,"nodeType":"Return","src":"15697:14:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_createProgram","nameLocation":"14738:14:157","parameters":{"id":78432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78427,"mutability":"mutable","name":"_codeId","nameLocation":"14761:7:157","nodeType":"VariableDeclaration","scope":78523,"src":"14753:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78426,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14753:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78429,"mutability":"mutable","name":"_salt","nameLocation":"14778:5:157","nodeType":"VariableDeclaration","scope":78523,"src":"14770:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78428,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14770:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":78431,"mutability":"mutable","name":"_isSmall","nameLocation":"14790:8:157","nodeType":"VariableDeclaration","scope":78523,"src":"14785:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":78430,"name":"bool","nodeType":"ElementaryTypeName","src":"14785:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14752:47:157"},"returnParameters":{"id":78435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78434,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78523,"src":"14817:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78433,"name":"address","nodeType":"ElementaryTypeName","src":"14817:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14816:9:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":78585,"nodeType":"FunctionDefinition","src":"15724:620:157","nodes":[],"body":{"id":78584,"nodeType":"Block","src":"15834:510:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78535,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78529,"src":"15852:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15859:15:157","memberName":"chainCommitment","nodeType":"MemberAccess","referencedDeclaration":79885,"src":"15852:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ChainCommitment_$79857_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata[] calldata"}},"id":78537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15875:6:157","memberName":"length","nodeType":"MemberAccess","src":"15852:29:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":78538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15885:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15852:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636861696e436f6d6d69746d656e7420636f756c6420636f6e7461696e206174206d6f7374206f6e6520636f6d6d69746d656e74","id":78540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15888:54:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_fd5534e67800b86a8fdec17ab2ad998a1a611e97d47621723d73a7d0da2ef477","typeString":"literal_string \"chainCommitment could contain at most one commitment\""},"value":"chainCommitment could contain at most one commitment"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fd5534e67800b86a8fdec17ab2ad998a1a611e97d47621723d73a7d0da2ef477","typeString":"literal_string \"chainCommitment could contain at most one commitment\""}],"id":78534,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"15844:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15844:99:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78542,"nodeType":"ExpressionStatement","src":"15844:99:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78543,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78529,"src":"15958:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15965:15:157","memberName":"chainCommitment","nodeType":"MemberAccess","referencedDeclaration":79885,"src":"15958:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ChainCommitment_$79857_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata[] calldata"}},"id":78545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15981:6:157","memberName":"length","nodeType":"MemberAccess","src":"15958:29:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":78546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15991:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15958:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78553,"nodeType":"IfStatement","src":"15954:85:157","trueBody":{"id":78552,"nodeType":"Block","src":"15994:45:157","statements":[{"expression":{"arguments":[{"hexValue":"","id":78549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16025:2:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":78548,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16015:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16015:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78533,"id":78551,"nodeType":"Return","src":"16008:20:157"}]}},{"assignments":[78558],"declarations":[{"constant":false,"id":78558,"mutability":"mutable","name":"_commitment","nameLocation":"16079:11:157","nodeType":"VariableDeclaration","scope":78584,"src":"16049:41:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79857_calldata_ptr","typeString":"struct Gear.ChainCommitment"},"typeName":{"id":78557,"nodeType":"UserDefinedTypeName","pathNode":{"id":78556,"name":"Gear.ChainCommitment","nameLocations":["16049:4:157","16054:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79857,"src":"16049:20:157"},"referencedDeclaration":79857,"src":"16049:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79857_storage_ptr","typeString":"struct Gear.ChainCommitment"}},"visibility":"internal"}],"id":78563,"initialValue":{"baseExpression":{"expression":{"id":78559,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78529,"src":"16093:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16100:15:157","memberName":"chainCommitment","nodeType":"MemberAccess","referencedDeclaration":79885,"src":"16093:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ChainCommitment_$79857_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata[] calldata"}},"id":78562,"indexExpression":{"hexValue":"30","id":78561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16116:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16093:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79857_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"16049:69:157"},{"assignments":[78565],"declarations":[{"constant":false,"id":78565,"mutability":"mutable","name":"_transitionsHash","nameLocation":"16137:16:157","nodeType":"VariableDeclaration","scope":78584,"src":"16129:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78564,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16129:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78571,"initialValue":{"arguments":[{"id":78567,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78526,"src":"16175:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"expression":{"id":78568,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78558,"src":"16183:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79857_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata"}},"id":78569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16195:11:157","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":79853,"src":"16183:23:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$80005_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_array$_t_struct$_StateTransition_$80005_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}],"id":78566,"name":"_commitTransitions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79076,"src":"16156:18:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$72524_storage_ptr_$_t_array$_t_struct$_StateTransition_$80005_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.StateTransition calldata[] calldata) returns (bytes32)"}},"id":78570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16156:51:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"16129:78:157"},{"eventCall":{"arguments":[{"expression":{"id":78573,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78558,"src":"16242:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79857_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata"}},"id":78574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16254:4:157","memberName":"head","nodeType":"MemberAccess","referencedDeclaration":79856,"src":"16242:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":78572,"name":"AnnouncesCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72534,"src":"16223:18:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":78575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16223:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78576,"nodeType":"EmitStatement","src":"16218:41:157"},{"expression":{"arguments":[{"id":78579,"name":"_transitionsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78565,"src":"16302:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78580,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78558,"src":"16320:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ChainCommitment_$79857_calldata_ptr","typeString":"struct Gear.ChainCommitment calldata"}},"id":78581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16332:4:157","memberName":"head","nodeType":"MemberAccess","referencedDeclaration":79856,"src":"16320:16:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78577,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"16277:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16282:19:157","memberName":"chainCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":80119,"src":"16277:24:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32) pure returns (bytes32)"}},"id":78582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16277:60:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78533,"id":78583,"nodeType":"Return","src":"16270:67:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitChain","nameLocation":"15733:12:157","parameters":{"id":78530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78526,"mutability":"mutable","name":"router","nameLocation":"15762:6:157","nodeType":"VariableDeclaration","scope":78585,"src":"15746:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78525,"nodeType":"UserDefinedTypeName","pathNode":{"id":78524,"name":"Storage","nameLocations":["15746:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"15746:7:157"},"referencedDeclaration":72524,"src":"15746:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78529,"mutability":"mutable","name":"_batch","nameLocation":"15800:6:157","nodeType":"VariableDeclaration","scope":78585,"src":"15770:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78528,"nodeType":"UserDefinedTypeName","pathNode":{"id":78527,"name":"Gear.BatchCommitment","nameLocations":["15770:4:157","15775:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79901,"src":"15770:20:157"},"referencedDeclaration":79901,"src":"15770:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"}],"src":"15745:62:157"},"returnParameters":{"id":78533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78585,"src":"15825:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78531,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15825:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15824:9:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":78694,"nodeType":"FunctionDefinition","src":"16350:1047:157","nodes":[],"body":{"id":78693,"nodeType":"Block","src":"16460:937:157","nodes":[],"statements":[{"assignments":[78597],"declarations":[{"constant":false,"id":78597,"mutability":"mutable","name":"_codeCommitmentHashes","nameLocation":"16483:21:157","nodeType":"VariableDeclaration","scope":78693,"src":"16470:34:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":78596,"name":"bytes","nodeType":"ElementaryTypeName","src":"16470:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":78598,"nodeType":"VariableDeclarationStatement","src":"16470:34:157"},{"body":{"id":78687,"nodeType":"Block","src":"16575:766:157","statements":[{"assignments":[78615],"declarations":[{"constant":false,"id":78615,"mutability":"mutable","name":"_commitment","nameLocation":"16618:11:157","nodeType":"VariableDeclaration","scope":78687,"src":"16589:40:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment"},"typeName":{"id":78614,"nodeType":"UserDefinedTypeName","pathNode":{"id":78613,"name":"Gear.CodeCommitment","nameLocations":["16589:4:157","16594:14:157"],"nodeType":"IdentifierPath","referencedDeclaration":79848,"src":"16589:19:157"},"referencedDeclaration":79848,"src":"16589:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_storage_ptr","typeString":"struct Gear.CodeCommitment"}},"visibility":"internal"}],"id":78620,"initialValue":{"baseExpression":{"expression":{"id":78616,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78591,"src":"16632:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16639:15:157","memberName":"codeCommitments","nodeType":"MemberAccess","referencedDeclaration":79890,"src":"16632:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$79848_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":78619,"indexExpression":{"id":78618,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78600,"src":"16655:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16632:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"16589:68:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"},"id":78631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":78622,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"16697:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78623,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16704:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"16697:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78624,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16717:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"16697:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79933_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78627,"indexExpression":{"expression":{"id":78625,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78615,"src":"16723:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16735:2:157","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79845,"src":"16723:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16697:41:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":78628,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"16742:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16747:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79933,"src":"16742:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79933_$","typeString":"type(enum Gear.CodeState)"}},"id":78630,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16757:19:157","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":79931,"src":"16742:34:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"src":"16697:79:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652072657175657374656420666f722076616c69646174696f6e20746f20626520636f6d6d6974746564","id":78632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16794:55:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""},"value":"code must be requested for validation to be committed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""}],"id":78621,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16672:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16672:191:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78634,"nodeType":"ExpressionStatement","src":"16672:191:157"},{"condition":{"expression":{"id":78635,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78615,"src":"16882:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16894:5:157","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":79847,"src":"16882:17:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":78666,"nodeType":"Block","src":"17067:81:157","statements":[{"expression":{"id":78664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"17085:48:157","subExpression":{"baseExpression":{"expression":{"expression":{"id":78658,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"17092:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17099:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"17092:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17112:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"17092:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79933_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78663,"indexExpression":{"expression":{"id":78661,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78615,"src":"17118:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17130:2:157","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79845,"src":"17118:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17092:41:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78665,"nodeType":"ExpressionStatement","src":"17085:48:157"}]},"id":78667,"nodeType":"IfStatement","src":"16878:270:157","trueBody":{"id":78657,"nodeType":"Block","src":"16901:160:157","statements":[{"expression":{"id":78648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":78637,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"16919:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78642,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16926:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"16919:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78643,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16939:5:157","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":79969,"src":"16919:25:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$79933_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":78644,"indexExpression":{"expression":{"id":78640,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78615,"src":"16945:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16957:2:157","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79845,"src":"16945:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16919:41:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":78645,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"16963:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16968:9:157","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":79933,"src":"16963:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$79933_$","typeString":"type(enum Gear.CodeState)"}},"id":78647,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16978:9:157","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":79932,"src":"16963:24:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"src":"16919:68:157","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$79933","typeString":"enum Gear.CodeState"}},"id":78649,"nodeType":"ExpressionStatement","src":"16919:68:157"},{"expression":{"id":78655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"17005:41:157","subExpression":{"expression":{"expression":{"id":78650,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78588,"src":"17005:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78653,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17012:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"17005:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":78654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"17025:19:157","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":79977,"src":"17005:39:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":78656,"nodeType":"ExpressionStatement","src":"17005:41:157"}]}},{"eventCall":{"arguments":[{"expression":{"id":78669,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78615,"src":"17184:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17196:2:157","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":79845,"src":"17184:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78671,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78615,"src":"17200:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":78672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17212:5:157","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":79847,"src":"17200:17:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":78668,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72541,"src":"17167:16:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":78673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17167:51:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78674,"nodeType":"EmitStatement","src":"17162:56:157"},{"expression":{"id":78685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":78675,"name":"_codeCommitmentHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78597,"src":"17233:21:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":78679,"name":"_codeCommitmentHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78597,"src":"17270:21:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":78682,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78615,"src":"17317:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$79848_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}],"expression":{"id":78680,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"17293:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17298:18:157","memberName":"codeCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":80231,"src":"17293:23:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$79848_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.CodeCommitment memory) pure returns (bytes32)"}},"id":78683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17293:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":78677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17257:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":78676,"name":"bytes","nodeType":"ElementaryTypeName","src":"17257:5:157","typeDescriptions":{}}},"id":78678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17263:6:157","memberName":"concat","nodeType":"MemberAccess","src":"17257:12:157","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":78684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17257:73:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"17233:97:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":78686,"nodeType":"ExpressionStatement","src":"17233:97:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78603,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78600,"src":"16535:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":78604,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78591,"src":"16539:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16546:15:157","memberName":"codeCommitments","nodeType":"MemberAccess","referencedDeclaration":79890,"src":"16539:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$79848_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":78606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16562:6:157","memberName":"length","nodeType":"MemberAccess","src":"16539:29:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16535:33:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78688,"initializationExpression":{"assignments":[78600],"declarations":[{"constant":false,"id":78600,"mutability":"mutable","name":"i","nameLocation":"16528:1:157","nodeType":"VariableDeclaration","scope":78688,"src":"16520:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78599,"name":"uint256","nodeType":"ElementaryTypeName","src":"16520:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78602,"initialValue":{"hexValue":"30","id":78601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16532:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16520:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":78609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16570:3:157","subExpression":{"id":78608,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78600,"src":"16570:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":78610,"nodeType":"ExpressionStatement","src":"16570:3:157"},"nodeType":"ForStatement","src":"16515:826:157"},{"expression":{"arguments":[{"id":78690,"name":"_codeCommitmentHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78597,"src":"17368:21:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":78689,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"17358:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17358:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78595,"id":78692,"nodeType":"Return","src":"17351:39:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitCodes","nameLocation":"16359:12:157","parameters":{"id":78592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78588,"mutability":"mutable","name":"router","nameLocation":"16388:6:157","nodeType":"VariableDeclaration","scope":78694,"src":"16372:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78587,"nodeType":"UserDefinedTypeName","pathNode":{"id":78586,"name":"Storage","nameLocations":["16372:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"16372:7:157"},"referencedDeclaration":72524,"src":"16372:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78591,"mutability":"mutable","name":"_batch","nameLocation":"16426:6:157","nodeType":"VariableDeclaration","scope":78694,"src":"16396:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78590,"nodeType":"UserDefinedTypeName","pathNode":{"id":78589,"name":"Gear.BatchCommitment","nameLocations":["16396:4:157","16401:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79901,"src":"16396:20:157"},"referencedDeclaration":79901,"src":"16396:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"}],"src":"16371:62:157"},"returnParameters":{"id":78595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78694,"src":"16451:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78593,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16451:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16450:9:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":78841,"nodeType":"FunctionDefinition","src":"17439:1645:157","nodes":[],"body":{"id":78840,"nodeType":"Block","src":"17551:1533:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78706,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78700,"src":"17582:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17589:17:157","memberName":"rewardsCommitment","nodeType":"MemberAccess","referencedDeclaration":79895,"src":"17582:24:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsCommitment_$79910_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata[] calldata"}},"id":78708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17607:6:157","memberName":"length","nodeType":"MemberAccess","src":"17582:31:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":78709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17617:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"17582:36:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7265776172647320636f6d6d69746d656e74206d75737420626520656d707479206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d656e74","id":78711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17620:66:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_c3cb7cda35f329d061929db32e4b728fcd5a7bc61949b1d5212af87c625d8ab0","typeString":"literal_string \"rewards commitment must be empty or contains only one commitment\""},"value":"rewards commitment must be empty or contains only one commitment"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c3cb7cda35f329d061929db32e4b728fcd5a7bc61949b1d5212af87c625d8ab0","typeString":"literal_string \"rewards commitment must be empty or contains only one commitment\""}],"id":78705,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17561:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17561:135:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78713,"nodeType":"ExpressionStatement","src":"17561:135:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78714,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78700,"src":"17711:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17718:17:157","memberName":"rewardsCommitment","nodeType":"MemberAccess","referencedDeclaration":79895,"src":"17711:24:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsCommitment_$79910_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata[] calldata"}},"id":78716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17736:6:157","memberName":"length","nodeType":"MemberAccess","src":"17711:31:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":78717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17746:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17711:36:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78724,"nodeType":"IfStatement","src":"17707:87:157","trueBody":{"id":78723,"nodeType":"Block","src":"17749:45:157","statements":[{"expression":{"arguments":[{"hexValue":"","id":78720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17780:2:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":78719,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"17770:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17770:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78704,"id":78722,"nodeType":"Return","src":"17763:20:157"}]}},{"assignments":[78729],"declarations":[{"constant":false,"id":78729,"mutability":"mutable","name":"_commitment","nameLocation":"17836:11:157","nodeType":"VariableDeclaration","scope":78840,"src":"17804:43:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment"},"typeName":{"id":78728,"nodeType":"UserDefinedTypeName","pathNode":{"id":78727,"name":"Gear.RewardsCommitment","nameLocations":["17804:4:157","17809:17:157"],"nodeType":"IdentifierPath","referencedDeclaration":79910,"src":"17804:22:157"},"referencedDeclaration":79910,"src":"17804:22:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_storage_ptr","typeString":"struct Gear.RewardsCommitment"}},"visibility":"internal"}],"id":78734,"initialValue":{"baseExpression":{"expression":{"id":78730,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78700,"src":"17850:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17857:17:157","memberName":"rewardsCommitment","nodeType":"MemberAccess","referencedDeclaration":79895,"src":"17850:24:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsCommitment_$79910_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata[] calldata"}},"id":78733,"indexExpression":{"hexValue":"30","id":78732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17875:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17850:27:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"17804:73:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":78740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78736,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"17896:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17908:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79909,"src":"17896:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":78738,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78700,"src":"17920:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17927:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79874,"src":"17920:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"17896:45:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7265776172647320636f6d6d69746d656e742074696d657374616d70206d75737420626520666f72207468652070617374","id":78741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17943:51:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_29800c627e371f26ea90a88483e0bf62df9129f58fe1e9f884bd5a95e948b2c6","typeString":"literal_string \"rewards commitment timestamp must be for the past\""},"value":"rewards commitment timestamp must be for the past"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_29800c627e371f26ea90a88483e0bf62df9129f58fe1e9f884bd5a95e948b2c6","typeString":"literal_string \"rewards commitment timestamp must be for the past\""}],"id":78735,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"17888:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17888:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78743,"nodeType":"ExpressionStatement","src":"17888:107:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":78750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78745,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"18013:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18025:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79909,"src":"18013:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"expression":{"id":78747,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78697,"src":"18038:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18045:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"18038:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18058:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79949,"src":"18038:29:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"18013:54:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7265776172647320636f6d6d69746d656e742074696d657374616d702070726564617465732067656e65736973","id":78751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18069:47:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2b3cd0274b4fcdffda77e6b2c6d36090b26f122587234ee8b80bbce7a098f6","typeString":"literal_string \"rewards commitment timestamp predates genesis\""},"value":"rewards commitment timestamp predates genesis"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_db2b3cd0274b4fcdffda77e6b2c6d36090b26f122587234ee8b80bbce7a098f6","typeString":"literal_string \"rewards commitment timestamp predates genesis\""}],"id":78744,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18005:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18005:112:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78753,"nodeType":"ExpressionStatement","src":"18005:112:157"},{"assignments":[78755],"declarations":[{"constant":false,"id":78755,"mutability":"mutable","name":"commitmentEraIndex","nameLocation":"18136:18:157","nodeType":"VariableDeclaration","scope":78840,"src":"18128:26:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78754,"name":"uint256","nodeType":"ElementaryTypeName","src":"18128:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78762,"initialValue":{"arguments":[{"id":78758,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78697,"src":"18173:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"expression":{"id":78759,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"18181:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18193:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79909,"src":"18181:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78756,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"18157:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18162:10:157","memberName":"eraIndexAt","nodeType":"MemberAccess","referencedDeclaration":80830,"src":"18157:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct IRouter.Storage storage pointer,uint256) view returns (uint256)"}},"id":78761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18157:46:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18128:75:157"},{"assignments":[78764],"declarations":[{"constant":false,"id":78764,"mutability":"mutable","name":"batchEraIndex","nameLocation":"18221:13:157","nodeType":"VariableDeclaration","scope":78840,"src":"18213:21:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78763,"name":"uint256","nodeType":"ElementaryTypeName","src":"18213:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78771,"initialValue":{"arguments":[{"id":78767,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78697,"src":"18253:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"expression":{"id":78768,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78700,"src":"18261:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18268:14:157","memberName":"blockTimestamp","nodeType":"MemberAccess","referencedDeclaration":79874,"src":"18261:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78765,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"18237:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18242:10:157","memberName":"eraIndexAt","nodeType":"MemberAccess","referencedDeclaration":80830,"src":"18237:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct IRouter.Storage storage pointer,uint256) view returns (uint256)"}},"id":78770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18237:46:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18213:70:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78773,"name":"commitmentEraIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78755,"src":"18302:18:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":78774,"name":"batchEraIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78764,"src":"18323:13:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18302:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7265776172647320636f6d6d69746d656e74206d757374207461726765742070726576696f757320657261","id":78776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18338:45:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_2bcd8c85a87f79e0b52627987f1854fed13757f98feded85d09b46d177846b1a","typeString":"literal_string \"rewards commitment must target previous era\""},"value":"rewards commitment must target previous era"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2bcd8c85a87f79e0b52627987f1854fed13757f98feded85d09b46d177846b1a","typeString":"literal_string \"rewards commitment must target previous era\""}],"id":78772,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18294:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18294:90:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78778,"nodeType":"ExpressionStatement","src":"18294:90:157"},{"assignments":[78780],"declarations":[{"constant":false,"id":78780,"mutability":"mutable","name":"_middleware","nameLocation":"18403:11:157","nodeType":"VariableDeclaration","scope":78840,"src":"18395:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":78779,"name":"address","nodeType":"ElementaryTypeName","src":"18395:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":78784,"initialValue":{"expression":{"expression":{"id":78781,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78697,"src":"18417:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78782,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18424:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"18417:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":78783,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18438:10:157","memberName":"middleware","nodeType":"MemberAccess","referencedDeclaration":79842,"src":"18417:31:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"18395:53:157"},{"expression":{"arguments":[{"id":78791,"name":"_middleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78780,"src":"18520:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78792,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"18533:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18545:9:157","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":79904,"src":"18533:21:157","typeDescriptions":{"typeIdentifier":"t_struct$_OperatorRewardsCommitment_$79915_calldata_ptr","typeString":"struct Gear.OperatorRewardsCommitment calldata"}},"id":78794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18555:6:157","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":79912,"src":"18533:28:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"expression":{"id":78795,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"18564:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18576:7:157","memberName":"stakers","nodeType":"MemberAccess","referencedDeclaration":79907,"src":"18564:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_calldata_ptr","typeString":"struct Gear.StakerRewardsCommitment calldata"}},"id":78797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18584:11:157","memberName":"totalAmount","nodeType":"MemberAccess","referencedDeclaration":79921,"src":"18564:31:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18533:62:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"expression":{"id":78786,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78697,"src":"18465:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18472:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"18465:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":78788,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18486:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":79840,"src":"18465:32:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78785,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45587,"src":"18458:6:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$45587_$","typeString":"type(contract IERC20)"}},"id":78789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18458:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$45587","typeString":"contract IERC20"}},"id":78790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18512:7:157","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":45574,"src":"18458:61:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":78799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18458:138:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78800,"nodeType":"ExpressionStatement","src":"18458:138:157"},{"assignments":[78802],"declarations":[{"constant":false,"id":78802,"mutability":"mutable","name":"_operatorRewardsHash","nameLocation":"18615:20:157","nodeType":"VariableDeclaration","scope":78840,"src":"18607:28:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78801,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18607:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78817,"initialValue":{"arguments":[{"expression":{"expression":{"id":78807,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78697,"src":"18719:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78808,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18726:13:157","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":72507,"src":"18719:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$79843_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":78809,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18740:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":79840,"src":"18719:32:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"expression":{"id":78810,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"18753:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18765:9:157","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":79904,"src":"18753:21:157","typeDescriptions":{"typeIdentifier":"t_struct$_OperatorRewardsCommitment_$79915_calldata_ptr","typeString":"struct Gear.OperatorRewardsCommitment calldata"}},"id":78812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18775:6:157","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":79912,"src":"18753:28:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":78813,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"18783:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18795:9:157","memberName":"operators","nodeType":"MemberAccess","referencedDeclaration":79904,"src":"18783:21:157","typeDescriptions":{"typeIdentifier":"t_struct$_OperatorRewardsCommitment_$79915_calldata_ptr","typeString":"struct Gear.OperatorRewardsCommitment calldata"}},"id":78815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18805:4:157","memberName":"root","nodeType":"MemberAccess","referencedDeclaration":79914,"src":"18783:26:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":78804,"name":"_middleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78780,"src":"18650:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78803,"name":"IMiddleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72281,"src":"18638:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMiddleware_$72281_$","typeString":"type(contract IMiddleware)"}},"id":78805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18638:24:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMiddleware_$72281","typeString":"contract IMiddleware"}},"id":78806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18676:25:157","memberName":"distributeOperatorRewards","nodeType":"MemberAccess","referencedDeclaration":72269,"src":"18638:63:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,uint256,bytes32) external returns (bytes32)"}},"id":78816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18638:185:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18607:216:157"},{"assignments":[78819],"declarations":[{"constant":false,"id":78819,"mutability":"mutable","name":"_stakerRewardsHash","nameLocation":"18842:18:157","nodeType":"VariableDeclaration","scope":78840,"src":"18834:26:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78818,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18834:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":78829,"initialValue":{"arguments":[{"expression":{"id":78824,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"18924:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18936:7:157","memberName":"stakers","nodeType":"MemberAccess","referencedDeclaration":79907,"src":"18924:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_calldata_ptr","typeString":"struct Gear.StakerRewardsCommitment calldata"}},{"expression":{"id":78826,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"18945:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18957:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79909,"src":"18945:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StakerRewardsCommitment_$79924_calldata_ptr","typeString":"struct Gear.StakerRewardsCommitment calldata"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"arguments":[{"id":78821,"name":"_middleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78780,"src":"18887:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":78820,"name":"IMiddleware","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72281,"src":"18875:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMiddleware_$72281_$","typeString":"type(contract IMiddleware)"}},"id":78822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18875:24:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMiddleware_$72281","typeString":"contract IMiddleware"}},"id":78823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18900:23:157","memberName":"distributeStakerRewards","nodeType":"MemberAccess","referencedDeclaration":72280,"src":"18875:48:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_StakerRewardsCommitment_$79924_memory_ptr_$_t_uint48_$returns$_t_bytes32_$","typeString":"function (struct Gear.StakerRewardsCommitment memory,uint48) external returns (bytes32)"}},"id":78828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18875:92:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18834:133:157"},{"expression":{"arguments":[{"arguments":[{"id":78833,"name":"_operatorRewardsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78802,"src":"19012:20:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":78834,"name":"_stakerRewardsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78819,"src":"19034:18:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":78835,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78729,"src":"19054:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsCommitment_$79910_calldata_ptr","typeString":"struct Gear.RewardsCommitment calldata"}},"id":78836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19066:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79909,"src":"19054:21:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":78831,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"18995:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":78832,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18999:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"18995:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":78837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18995:81:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":78830,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"18985:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18985:92:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78704,"id":78839,"nodeType":"Return","src":"18978:99:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitRewards","nameLocation":"17448:14:157","parameters":{"id":78701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78697,"mutability":"mutable","name":"router","nameLocation":"17479:6:157","nodeType":"VariableDeclaration","scope":78841,"src":"17463:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78696,"nodeType":"UserDefinedTypeName","pathNode":{"id":78695,"name":"Storage","nameLocations":["17463:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"17463:7:157"},"referencedDeclaration":72524,"src":"17463:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78700,"mutability":"mutable","name":"_batch","nameLocation":"17517:6:157","nodeType":"VariableDeclaration","scope":78841,"src":"17487:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78699,"nodeType":"UserDefinedTypeName","pathNode":{"id":78698,"name":"Gear.BatchCommitment","nameLocations":["17487:4:157","17492:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79901,"src":"17487:20:157"},"referencedDeclaration":79901,"src":"17487:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"}],"src":"17462:62:157"},"returnParameters":{"id":78704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78703,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78841,"src":"17542:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78702,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17542:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17541:9:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":78982,"nodeType":"FunctionDefinition","src":"19136:1605:157","nodes":[],"body":{"id":78981,"nodeType":"Block","src":"19251:1490:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78854,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78848,"src":"19282:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19289:20:157","memberName":"validatorsCommitment","nodeType":"MemberAccess","referencedDeclaration":79900,"src":"19282:27:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValidatorsCommitment_$79868_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata[] calldata"}},"id":78856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19310:6:157","memberName":"length","nodeType":"MemberAccess","src":"19282:34:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":78857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19320:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19282:39:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"76616c696461746f727320636f6d6d69746d656e74206d75737420626520656d707479206f7220636f6e7461696e73206f6e6c79206f6e6520636f6d6d69746d656e74","id":78859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19335:69:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_644e5bd3afba7f99d7f3c2ebff048e0fa7cea8aeaeb500c803c372ccd79ad6ff","typeString":"literal_string \"validators commitment must be empty or contains only one commitment\""},"value":"validators commitment must be empty or contains only one commitment"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_644e5bd3afba7f99d7f3c2ebff048e0fa7cea8aeaeb500c803c372ccd79ad6ff","typeString":"literal_string \"validators commitment must be empty or contains only one commitment\""}],"id":78853,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19261:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19261:153:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78861,"nodeType":"ExpressionStatement","src":"19261:153:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78862,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78848,"src":"19429:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19436:20:157","memberName":"validatorsCommitment","nodeType":"MemberAccess","referencedDeclaration":79900,"src":"19429:27:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValidatorsCommitment_$79868_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata[] calldata"}},"id":78864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19457:6:157","memberName":"length","nodeType":"MemberAccess","src":"19429:34:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":78865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19467:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19429:39:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":78872,"nodeType":"IfStatement","src":"19425:90:157","trueBody":{"id":78871,"nodeType":"Block","src":"19470:45:157","statements":[{"expression":{"arguments":[{"hexValue":"","id":78868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19501:2:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":78867,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"19491:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":78869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19491:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78852,"id":78870,"nodeType":"Return","src":"19484:20:157"}]}},{"assignments":[78877],"declarations":[{"constant":false,"id":78877,"mutability":"mutable","name":"_commitment","nameLocation":"19560:11:157","nodeType":"VariableDeclaration","scope":78981,"src":"19525:46:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment"},"typeName":{"id":78876,"nodeType":"UserDefinedTypeName","pathNode":{"id":78875,"name":"Gear.ValidatorsCommitment","nameLocations":["19525:4:157","19530:20:157"],"nodeType":"IdentifierPath","referencedDeclaration":79868,"src":"19525:25:157"},"referencedDeclaration":79868,"src":"19525:25:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_storage_ptr","typeString":"struct Gear.ValidatorsCommitment"}},"visibility":"internal"}],"id":78882,"initialValue":{"baseExpression":{"expression":{"id":78878,"name":"_batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78848,"src":"19574:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment calldata"}},"id":78879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19581:20:157","memberName":"validatorsCommitment","nodeType":"MemberAccess","referencedDeclaration":79900,"src":"19574:27:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValidatorsCommitment_$79868_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata[] calldata"}},"id":78881,"indexExpression":{"hexValue":"30","id":78880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19602:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19574:30:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"19525:79:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78884,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78877,"src":"19623:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19635:10:157","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":79865,"src":"19623:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":78886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19646:6:157","memberName":"length","nodeType":"MemberAccess","src":"19623:29:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":78887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19655:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19623:33:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e65772076616c696461746f7273206c697374206d757374206e6f7420626520656d707479","id":78889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19658:39:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_fa6d9c9edd6409924e1be95f047fac6c60e2699cd246c0542abacb4236679b95","typeString":"literal_string \"new validators list must not be empty\""},"value":"new validators list must not be empty"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fa6d9c9edd6409924e1be95f047fac6c60e2699cd246c0542abacb4236679b95","typeString":"literal_string \"new validators list must not be empty\""}],"id":78883,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19615:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19615:83:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78891,"nodeType":"ExpressionStatement","src":"19615:83:157"},{"assignments":[78893],"declarations":[{"constant":false,"id":78893,"mutability":"mutable","name":"currentEraIndex","nameLocation":"19717:15:157","nodeType":"VariableDeclaration","scope":78981,"src":"19709:23:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78892,"name":"uint256","nodeType":"ElementaryTypeName","src":"19709:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78905,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78894,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"19736:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":78895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19742:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"19736:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"expression":{"id":78896,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78845,"src":"19754:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19761:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"19754:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19774:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79949,"src":"19754:29:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"19736:47:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":78900,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19735:49:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"expression":{"id":78901,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78845,"src":"19787:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19794:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"19787:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},"id":78903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19804:3:157","memberName":"era","nodeType":"MemberAccess","referencedDeclaration":80007,"src":"19787:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19735:72:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19709:98:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78907,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78877,"src":"19826:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19838:8:157","memberName":"eraIndex","nodeType":"MemberAccess","referencedDeclaration":79867,"src":"19826:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78909,"name":"currentEraIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78893,"src":"19850:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":78910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19868:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19850:19:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19826:43:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6d6d69746d656e742065726120696e646578206973206e6f74206e6578742065726120696e646578","id":78913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19871:44:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_162890466e3da7889495cad8b992d317e467631b8d4abd8dc4464c15dd41b759","typeString":"literal_string \"commitment era index is not next era index\""},"value":"commitment era index is not next era index"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_162890466e3da7889495cad8b992d317e467631b8d4abd8dc4464c15dd41b759","typeString":"literal_string \"commitment era index is not next era index\""}],"id":78906,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19818:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19818:98:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78915,"nodeType":"ExpressionStatement","src":"19818:98:157"},{"assignments":[78917],"declarations":[{"constant":false,"id":78917,"mutability":"mutable","name":"nextEraStart","nameLocation":"19935:12:157","nodeType":"VariableDeclaration","scope":78981,"src":"19927:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78916,"name":"uint256","nodeType":"ElementaryTypeName","src":"19927:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":78928,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78918,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78845,"src":"19950:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78919,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19957:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"19950:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":78920,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19970:9:157","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":79949,"src":"19950:29:157","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":78921,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78845,"src":"19982:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78922,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19989:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"19982:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},"id":78923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19999:3:157","memberName":"era","nodeType":"MemberAccess","referencedDeclaration":80007,"src":"19982:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":78924,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78877,"src":"20005:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20017:8:157","memberName":"eraIndex","nodeType":"MemberAccess","referencedDeclaration":79867,"src":"20005:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19982:43:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19950:75:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19927:98:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78930,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"20043:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":78931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20049:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"20043:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":78932,"name":"nextEraStart","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78917,"src":"20062:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"expression":{"id":78933,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78845,"src":"20077:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":78934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20084:9:157","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":72519,"src":"20077:16:157","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$80012_storage","typeString":"struct Gear.Timelines storage ref"}},"id":78935,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20094:8:157","memberName":"election","nodeType":"MemberAccess","referencedDeclaration":80009,"src":"20077:25:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20062:40:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20043:59:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"656c656374696f6e206973206e6f74207965742073746172746564","id":78938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20104:29:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef3e2748c631aa0d71d8afc854c277a3e771005dd496ece9dad00c587d5c5eaa","typeString":"literal_string \"election is not yet started\""},"value":"election is not yet started"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef3e2748c631aa0d71d8afc854c277a3e771005dd496ece9dad00c587d5c5eaa","typeString":"literal_string \"election is not yet started\""}],"id":78929,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"20035:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20035:99:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78940,"nodeType":"ExpressionStatement","src":"20035:99:157"},{"assignments":[78945],"declarations":[{"constant":false,"id":78945,"mutability":"mutable","name":"_validators","nameLocation":"20216:11:157","nodeType":"VariableDeclaration","scope":78981,"src":"20192:35:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators"},"typeName":{"id":78944,"nodeType":"UserDefinedTypeName","pathNode":{"id":78943,"name":"Gear.Validators","nameLocations":["20192:4:157","20197:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":79825,"src":"20192:15:157"},"referencedDeclaration":79825,"src":"20192:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators"}},"visibility":"internal"}],"id":78950,"initialValue":{"arguments":[{"id":78948,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78845,"src":"20257:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":78946,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"20230:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20235:21:157","memberName":"previousEraValidators","nodeType":"MemberAccess","referencedDeclaration":80651,"src":"20230:26:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$72524_storage_ptr_$returns$_t_struct$_Validators_$79825_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":78949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20230:34:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"20192:72:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":78956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":78952,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78945,"src":"20282:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":78953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20294:16:157","memberName":"useFromTimestamp","nodeType":"MemberAccess","referencedDeclaration":79824,"src":"20282:28:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":78954,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"20313:5:157","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":78955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20319:9:157","memberName":"timestamp","nodeType":"MemberAccess","src":"20313:15:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20282:46:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6c6f6f6b73206c696b652076616c696461746f727320666f72206e657874206572612061726520616c726561647920736574","id":78957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20330:52:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b284ea0c51a926e5b8ea00c07f1ff766c11519c493036a65a767443fdf3f1780","typeString":"literal_string \"looks like validators for next era are already set\""},"value":"looks like validators for next era are already set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b284ea0c51a926e5b8ea00c07f1ff766c11519c493036a65a767443fdf3f1780","typeString":"literal_string \"looks like validators for next era are already set\""}],"id":78951,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"20274:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":78958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20274:109:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78959,"nodeType":"ExpressionStatement","src":"20274:109:157"},{"expression":{"arguments":[{"id":78961,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78945,"src":"20424:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},{"expression":{"id":78962,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78877,"src":"20449:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20461:19:157","memberName":"aggregatedPublicKey","nodeType":"MemberAccess","referencedDeclaration":79860,"src":"20449:31:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey calldata"}},{"expression":{"id":78964,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78877,"src":"20494:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20506:33:157","memberName":"verifiableSecretSharingCommitment","nodeType":"MemberAccess","referencedDeclaration":79862,"src":"20494:45:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":78966,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78877,"src":"20553:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20565:10:157","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":79865,"src":"20553:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":78968,"name":"nextEraStart","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78917,"src":"20589:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"},{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_calldata_ptr","typeString":"struct Gear.AggregatedPublicKey calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":78960,"name":"_resetValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79187,"src":"20394:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Validators_$79825_storage_ptr_$_t_struct$_AggregatedPublicKey_$79810_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct Gear.Validators storage pointer,struct Gear.AggregatedPublicKey memory,bytes memory,address[] memory,uint256)"}},"id":78969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20394:217:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78970,"nodeType":"ExpressionStatement","src":"20394:217:157"},{"eventCall":{"arguments":[{"expression":{"id":78972,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78877,"src":"20653:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":78973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20665:8:157","memberName":"eraIndex","nodeType":"MemberAccess","referencedDeclaration":79867,"src":"20653:20:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":78971,"name":"ValidatorsCommittedForEra","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72551,"src":"20627:25:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":78974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20627:47:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":78975,"nodeType":"EmitStatement","src":"20622:52:157"},{"expression":{"arguments":[{"id":78978,"name":"_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78877,"src":"20722:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValidatorsCommitment_$79868_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}],"expression":{"id":78976,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80917,"src":"20692:4:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$80917_$","typeString":"type(library Gear)"}},"id":78977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20697:24:157","memberName":"validatorsCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":80148,"src":"20692:29:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ValidatorsCommitment_$79868_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.ValidatorsCommitment memory) pure returns (bytes32)"}},"id":78979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20692:42:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78852,"id":78980,"nodeType":"Return","src":"20685:49:157"}]},"documentation":{"id":78842,"nodeType":"StructuredDocumentation","src":"19090:41:157","text":"@dev Set validators for the next era."},"implemented":true,"kind":"function","modifiers":[],"name":"_commitValidators","nameLocation":"19145:17:157","parameters":{"id":78849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78845,"mutability":"mutable","name":"router","nameLocation":"19179:6:157","nodeType":"VariableDeclaration","scope":78982,"src":"19163:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78844,"nodeType":"UserDefinedTypeName","pathNode":{"id":78843,"name":"Storage","nameLocations":["19163:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"19163:7:157"},"referencedDeclaration":72524,"src":"19163:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78848,"mutability":"mutable","name":"_batch","nameLocation":"19217:6:157","nodeType":"VariableDeclaration","scope":78982,"src":"19187:36:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_calldata_ptr","typeString":"struct Gear.BatchCommitment"},"typeName":{"id":78847,"nodeType":"UserDefinedTypeName","pathNode":{"id":78846,"name":"Gear.BatchCommitment","nameLocations":["19187:4:157","19192:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":79901,"src":"19187:20:157"},"referencedDeclaration":79901,"src":"19187:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_BatchCommitment_$79901_storage_ptr","typeString":"struct Gear.BatchCommitment"}},"visibility":"internal"}],"src":"19162:62:157"},"returnParameters":{"id":78852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78851,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":78982,"src":"19242:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78850,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19242:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"19241:9:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":79076,"nodeType":"FunctionDefinition","src":"20747:926:157","nodes":[],"body":{"id":79075,"nodeType":"Block","src":"20891:782:157","nodes":[],"statements":[{"assignments":[78995],"declarations":[{"constant":false,"id":78995,"mutability":"mutable","name":"transitionsHashes","nameLocation":"20914:17:157","nodeType":"VariableDeclaration","scope":79075,"src":"20901:30:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":78994,"name":"bytes","nodeType":"ElementaryTypeName","src":"20901:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":78996,"nodeType":"VariableDeclarationStatement","src":"20901:30:157"},{"body":{"id":79069,"nodeType":"Block","src":"20992:629:157","statements":[{"assignments":[79012],"declarations":[{"constant":false,"id":79012,"mutability":"mutable","name":"transition","nameLocation":"21036:10:157","nodeType":"VariableDeclaration","scope":79069,"src":"21006:40:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":79011,"nodeType":"UserDefinedTypeName","pathNode":{"id":79010,"name":"Gear.StateTransition","nameLocations":["21006:4:157","21011:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":80005,"src":"21006:20:157"},"referencedDeclaration":80005,"src":"21006:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"id":79016,"initialValue":{"baseExpression":{"id":79013,"name":"_transitions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78989,"src":"21049:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$80005_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":79015,"indexExpression":{"id":79014,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78998,"src":"21062:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21049:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"21006:58:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":79025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":79018,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78985,"src":"21104:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":79019,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21111:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"21104:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":79020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21124:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79973,"src":"21104:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":79023,"indexExpression":{"expression":{"id":79021,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79012,"src":"21133:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":79022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21144:7:157","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":79985,"src":"21133:18:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21104:48:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":79024,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21156:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21104:53:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":79026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21159:49:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":79017,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"21079:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21079:143:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79028,"nodeType":"ExpressionStatement","src":"21079:143:157"},{"assignments":[79030],"declarations":[{"constant":false,"id":79030,"mutability":"mutable","name":"value","nameLocation":"21245:5:157","nodeType":"VariableDeclaration","scope":79069,"src":"21237:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":79029,"name":"uint128","nodeType":"ElementaryTypeName","src":"21237:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":79032,"initialValue":{"hexValue":"30","id":79031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21253:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"21237:17:157"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":79040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":79036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":79033,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79012,"src":"21273:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":79034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21284:14:157","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79994,"src":"21273:25:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":79035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21302:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21273:30:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":79039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"21307:38:157","subExpression":{"expression":{"id":79037,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79012,"src":"21308:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":79038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21319:26:157","memberName":"valueToReceiveNegativeSign","nodeType":"MemberAccess","referencedDeclaration":79996,"src":"21308:37:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"21273:72:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79047,"nodeType":"IfStatement","src":"21269:144:157","trueBody":{"id":79046,"nodeType":"Block","src":"21347:66:157","statements":[{"expression":{"id":79044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":79041,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79030,"src":"21365:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":79042,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79012,"src":"21373:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":79043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21384:14:157","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":79994,"src":"21373:25:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"21365:33:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":79045,"nodeType":"ExpressionStatement","src":"21365:33:157"}]}},{"assignments":[79049],"declarations":[{"constant":false,"id":79049,"mutability":"mutable","name":"transitionHash","nameLocation":"21435:14:157","nodeType":"VariableDeclaration","scope":79069,"src":"21427:22:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":79048,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21427:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":79059,"initialValue":{"arguments":[{"id":79057,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79012,"src":"21517:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}],"expression":{"arguments":[{"expression":{"id":79051,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79012,"src":"21460:10:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":79052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21471:7:157","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":79985,"src":"21460:18:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":79050,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72455,"src":"21452:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$72455_$","typeString":"type(contract IMirror)"}},"id":79053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21452:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$72455","typeString":"contract IMirror"}},"id":79054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21480:22:157","memberName":"performStateTransition","nodeType":"MemberAccess","referencedDeclaration":72454,"src":"21452:50:157","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_struct$_StateTransition_$80005_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.StateTransition memory) payable external returns (bytes32)"}},"id":79056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":79055,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79030,"src":"21510:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"src":"21452:64:157","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_struct$_StateTransition_$80005_memory_ptr_$returns$_t_bytes32_$value","typeString":"function (struct Gear.StateTransition memory) payable external returns (bytes32)"}},"id":79058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21452:76:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"21427:101:157"},{"expression":{"id":79067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":79060,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78995,"src":"21543:17:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":79064,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78995,"src":"21576:17:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":79065,"name":"transitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79049,"src":"21595:14:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":79062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21563:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":79061,"name":"bytes","nodeType":"ElementaryTypeName","src":"21563:5:157","typeDescriptions":{}}},"id":79063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21569:6:157","memberName":"concat","nodeType":"MemberAccess","src":"21563:12:157","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":79066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21563:47:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"21543:67:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":79068,"nodeType":"ExpressionStatement","src":"21543:67:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":79001,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78998,"src":"20962:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":79002,"name":"_transitions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78989,"src":"20966:12:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$80005_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":79003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20979:6:157","memberName":"length","nodeType":"MemberAccess","src":"20966:19:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20962:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79070,"initializationExpression":{"assignments":[78998],"declarations":[{"constant":false,"id":78998,"mutability":"mutable","name":"i","nameLocation":"20955:1:157","nodeType":"VariableDeclaration","scope":79070,"src":"20947:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78997,"name":"uint256","nodeType":"ElementaryTypeName","src":"20947:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":79000,"initialValue":{"hexValue":"30","id":78999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20959:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20947:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":79006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20987:3:157","subExpression":{"id":79005,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78998,"src":"20987:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":79007,"nodeType":"ExpressionStatement","src":"20987:3:157"},"nodeType":"ForStatement","src":"20942:679:157"},{"expression":{"arguments":[{"id":79072,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78995,"src":"21648:17:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":79071,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"21638:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":79073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21638:28:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":78993,"id":79074,"nodeType":"Return","src":"21631:35:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitTransitions","nameLocation":"20756:18:157","parameters":{"id":78990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78985,"mutability":"mutable","name":"router","nameLocation":"20791:6:157","nodeType":"VariableDeclaration","scope":79076,"src":"20775:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":78984,"nodeType":"UserDefinedTypeName","pathNode":{"id":78983,"name":"Storage","nameLocations":["20775:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"20775:7:157"},"referencedDeclaration":72524,"src":"20775:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":78989,"mutability":"mutable","name":"_transitions","nameLocation":"20831:12:157","nodeType":"VariableDeclaration","scope":79076,"src":"20799:44:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$80005_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition[]"},"typeName":{"baseType":{"id":78987,"nodeType":"UserDefinedTypeName","pathNode":{"id":78986,"name":"Gear.StateTransition","nameLocations":["20799:4:157","20804:15:157"],"nodeType":"IdentifierPath","referencedDeclaration":80005,"src":"20799:20:157"},"referencedDeclaration":80005,"src":"20799:20:157","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$80005_storage_ptr","typeString":"struct Gear.StateTransition"}},"id":78988,"nodeType":"ArrayTypeName","src":"20799:22:157","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$80005_storage_$dyn_storage_ptr","typeString":"struct Gear.StateTransition[]"}},"visibility":"internal"}],"src":"20774:70:157"},"returnParameters":{"id":78993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":79076,"src":"20878:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":78991,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20878:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"20877:9:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":79187,"nodeType":"FunctionDefinition","src":"21679:1428:157","nodes":[],"body":{"id":79186,"nodeType":"Block","src":"21962:1145:157","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":79095,"name":"_newAggregatedPublicKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79082,"src":"22352:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_memory_ptr","typeString":"struct Gear.AggregatedPublicKey memory"}},"id":79096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22376:1:157","memberName":"x","nodeType":"MemberAccess","referencedDeclaration":79807,"src":"22352:25:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":79097,"name":"_newAggregatedPublicKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79082,"src":"22379:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_memory_ptr","typeString":"struct Gear.AggregatedPublicKey memory"}},"id":79098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22403:1:157","memberName":"y","nodeType":"MemberAccess","referencedDeclaration":79809,"src":"22379:25:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":79093,"name":"FROST","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40134,"src":"22329:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FROST_$40134_$","typeString":"type(library FROST)"}},"id":79094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22335:16:157","memberName":"isValidPublicKey","nodeType":"MemberAccess","referencedDeclaration":39803,"src":"22329:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":79099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22329:76:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"46524f53542061676772656761746564207075626c6963206b657920697320696e76616c6964","id":79100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22419:40:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_3f8442e6e9a2e78e0eb0bfd4d9e8fbfdf4df694fbcd43d738916f45cee84e537","typeString":"literal_string \"FROST aggregated public key is invalid\""},"value":"FROST aggregated public key is invalid"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3f8442e6e9a2e78e0eb0bfd4d9e8fbfdf4df694fbcd43d738916f45cee84e537","typeString":"literal_string \"FROST aggregated public key is invalid\""}],"id":79092,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"22308:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22308:161:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79102,"nodeType":"ExpressionStatement","src":"22308:161:157"},{"expression":{"id":79107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":79103,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79079,"src":"22479:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22491:19:157","memberName":"aggregatedPublicKey","nodeType":"MemberAccess","referencedDeclaration":79813,"src":"22479:31:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":79106,"name":"_newAggregatedPublicKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79082,"src":"22513:23:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_memory_ptr","typeString":"struct Gear.AggregatedPublicKey memory"}},"src":"22479:57:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_storage","typeString":"struct Gear.AggregatedPublicKey storage ref"}},"id":79108,"nodeType":"ExpressionStatement","src":"22479:57:157"},{"expression":{"id":79116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":79109,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79079,"src":"22546:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22558:40:157","memberName":"verifiableSecretSharingCommitmentPointer","nodeType":"MemberAccess","referencedDeclaration":79815,"src":"22546:52:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":79114,"name":"_verifiableSecretSharingCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79084,"src":"22615:34:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":79112,"name":"SSTORE2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81333,"src":"22601:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SSTORE2_$81333_$","typeString":"type(library SSTORE2)"}},"id":79113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22609:5:157","memberName":"write","nodeType":"MemberAccess","referencedDeclaration":81240,"src":"22601:13:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (bytes memory) returns (address)"}},"id":79115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22601:49:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22546:104:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":79117,"nodeType":"ExpressionStatement","src":"22546:104:157"},{"body":{"id":79145,"nodeType":"Block","src":"22714:114:157","statements":[{"assignments":[79131],"declarations":[{"constant":false,"id":79131,"mutability":"mutable","name":"_validator","nameLocation":"22736:10:157","nodeType":"VariableDeclaration","scope":79145,"src":"22728:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79130,"name":"address","nodeType":"ElementaryTypeName","src":"22728:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":79136,"initialValue":{"baseExpression":{"expression":{"id":79132,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79079,"src":"22749:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22761:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79822,"src":"22749:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":79135,"indexExpression":{"id":79134,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79119,"src":"22766:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22749:19:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"22728:40:157"},{"expression":{"id":79143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":79137,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79079,"src":"22782:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22794:3:157","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":79819,"src":"22782:15:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":79141,"indexExpression":{"id":79139,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79131,"src":"22798:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22782:27:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":79142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"22812:5:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"22782:35:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79144,"nodeType":"ExpressionStatement","src":"22782:35:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":79122,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79119,"src":"22680:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":79123,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79079,"src":"22684:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22696:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79822,"src":"22684:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":79125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22701:6:157","memberName":"length","nodeType":"MemberAccess","src":"22684:23:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22680:27:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79146,"initializationExpression":{"assignments":[79119],"declarations":[{"constant":false,"id":79119,"mutability":"mutable","name":"i","nameLocation":"22673:1:157","nodeType":"VariableDeclaration","scope":79146,"src":"22665:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79118,"name":"uint256","nodeType":"ElementaryTypeName","src":"22665:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":79121,"initialValue":{"hexValue":"30","id":79120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22677:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"22665:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":79128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"22709:3:157","subExpression":{"id":79127,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79119,"src":"22709:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":79129,"nodeType":"ExpressionStatement","src":"22709:3:157"},"nodeType":"ForStatement","src":"22660:168:157"},{"body":{"id":79172,"nodeType":"Block","src":"22889:111:157","statements":[{"assignments":[79159],"declarations":[{"constant":false,"id":79159,"mutability":"mutable","name":"_validator","nameLocation":"22911:10:157","nodeType":"VariableDeclaration","scope":79172,"src":"22903:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79158,"name":"address","nodeType":"ElementaryTypeName","src":"22903:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":79163,"initialValue":{"baseExpression":{"id":79160,"name":"_newValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79087,"src":"22924:14:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":79162,"indexExpression":{"id":79161,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79148,"src":"22939:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22924:17:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"22903:38:157"},{"expression":{"id":79170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":79164,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79079,"src":"22955:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22967:3:157","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":79819,"src":"22955:15:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":79168,"indexExpression":{"id":79166,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79159,"src":"22971:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22955:27:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":79169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"22985:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"22955:34:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79171,"nodeType":"ExpressionStatement","src":"22955:34:157"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":79151,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79148,"src":"22857:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":79152,"name":"_newValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79087,"src":"22861:14:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":79153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22876:6:157","memberName":"length","nodeType":"MemberAccess","src":"22861:21:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22857:25:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":79173,"initializationExpression":{"assignments":[79148],"declarations":[{"constant":false,"id":79148,"mutability":"mutable","name":"i","nameLocation":"22850:1:157","nodeType":"VariableDeclaration","scope":79173,"src":"22842:9:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79147,"name":"uint256","nodeType":"ElementaryTypeName","src":"22842:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":79150,"initialValue":{"hexValue":"30","id":79149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22854:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"22842:13:157"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":79156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"22884:3:157","subExpression":{"id":79155,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79148,"src":"22884:1:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":79157,"nodeType":"ExpressionStatement","src":"22884:3:157"},"nodeType":"ForStatement","src":"22837:163:157"},{"expression":{"id":79178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":79174,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79079,"src":"23009:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23021:4:157","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":79822,"src":"23009:16:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":79177,"name":"_newValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79087,"src":"23028:14:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"23009:33:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":79179,"nodeType":"ExpressionStatement","src":"23009:33:157"},{"expression":{"id":79184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":79180,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79079,"src":"23052:11:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":79182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23064:16:157","memberName":"useFromTimestamp","nodeType":"MemberAccess","referencedDeclaration":79824,"src":"23052:28:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":79183,"name":"_useFromTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79089,"src":"23083:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23052:48:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":79185,"nodeType":"ExpressionStatement","src":"23052:48:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_resetValidators","nameLocation":"21688:16:157","parameters":{"id":79090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79079,"mutability":"mutable","name":"_validators","nameLocation":"21738:11:157","nodeType":"VariableDeclaration","scope":79187,"src":"21714:35:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators"},"typeName":{"id":79078,"nodeType":"UserDefinedTypeName","pathNode":{"id":79077,"name":"Gear.Validators","nameLocations":["21714:4:157","21719:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":79825,"src":"21714:15:157"},"referencedDeclaration":79825,"src":"21714:15:157","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$79825_storage_ptr","typeString":"struct Gear.Validators"}},"visibility":"internal"},{"constant":false,"id":79082,"mutability":"mutable","name":"_newAggregatedPublicKey","nameLocation":"21791:23:157","nodeType":"VariableDeclaration","scope":79187,"src":"21759:55:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_memory_ptr","typeString":"struct Gear.AggregatedPublicKey"},"typeName":{"id":79081,"nodeType":"UserDefinedTypeName","pathNode":{"id":79080,"name":"Gear.AggregatedPublicKey","nameLocations":["21759:4:157","21764:19:157"],"nodeType":"IdentifierPath","referencedDeclaration":79810,"src":"21759:24:157"},"referencedDeclaration":79810,"src":"21759:24:157","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedPublicKey_$79810_storage_ptr","typeString":"struct Gear.AggregatedPublicKey"}},"visibility":"internal"},{"constant":false,"id":79084,"mutability":"mutable","name":"_verifiableSecretSharingCommitment","nameLocation":"21837:34:157","nodeType":"VariableDeclaration","scope":79187,"src":"21824:47:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":79083,"name":"bytes","nodeType":"ElementaryTypeName","src":"21824:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":79087,"mutability":"mutable","name":"_newValidators","nameLocation":"21898:14:157","nodeType":"VariableDeclaration","scope":79187,"src":"21881:31:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":79085,"name":"address","nodeType":"ElementaryTypeName","src":"21881:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":79086,"nodeType":"ArrayTypeName","src":"21881:9:157","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":79089,"mutability":"mutable","name":"_useFromTimestamp","nameLocation":"21930:17:157","nodeType":"VariableDeclaration","scope":79187,"src":"21922:25:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79088,"name":"uint256","nodeType":"ElementaryTypeName","src":"21922:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21704:249:157"},"returnParameters":{"id":79091,"nodeType":"ParameterList","parameters":[],"src":"21962:0:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":79200,"nodeType":"FunctionDefinition","src":"23113:192:157","nodes":[],"body":{"id":79199,"nodeType":"Block","src":"23178:127:157","nodes":[],"statements":[{"assignments":[79194],"declarations":[{"constant":false,"id":79194,"mutability":"mutable","name":"slot","nameLocation":"23196:4:157","nodeType":"VariableDeclaration","scope":79199,"src":"23188:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":79193,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23188:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":79197,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":79195,"name":"_getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79212,"src":"23203:15:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":79196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23203:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"23188:32:157"},{"AST":{"nativeSrc":"23256:43:157","nodeType":"YulBlock","src":"23256:43:157","statements":[{"nativeSrc":"23270:19:157","nodeType":"YulAssignment","src":"23270:19:157","value":{"name":"slot","nativeSrc":"23285:4:157","nodeType":"YulIdentifier","src":"23285:4:157"},"variableNames":[{"name":"router.slot","nativeSrc":"23270:11:157","nodeType":"YulIdentifier","src":"23270:11:157"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":79191,"isOffset":false,"isSlot":true,"src":"23270:11:157","suffix":"slot","valueSize":1},{"declaration":79194,"isOffset":false,"isSlot":false,"src":"23285:4:157","valueSize":1}],"flags":["memory-safe"],"id":79198,"nodeType":"InlineAssembly","src":"23231:68:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_router","nameLocation":"23122:7:157","parameters":{"id":79188,"nodeType":"ParameterList","parameters":[],"src":"23129:2:157"},"returnParameters":{"id":79192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79191,"mutability":"mutable","name":"router","nameLocation":"23170:6:157","nodeType":"VariableDeclaration","scope":79200,"src":"23154:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":79190,"nodeType":"UserDefinedTypeName","pathNode":{"id":79189,"name":"Storage","nameLocations":["23154:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"23154:7:157"},"referencedDeclaration":72524,"src":"23154:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"23153:24:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":79212,"nodeType":"FunctionDefinition","src":"23311:128:157","nodes":[],"body":{"id":79211,"nodeType":"Block","src":"23369:70:157","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":79207,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77291,"src":"23413:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":79205,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"23386:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":79206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23398:14:157","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":47773,"src":"23386:26:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$47728_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":79208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23386:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$47728_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":79209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23427:5:157","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47727,"src":"23386:46:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":79204,"id":79210,"nodeType":"Return","src":"23379:53:157"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorageSlot","nameLocation":"23320:15:157","parameters":{"id":79201,"nodeType":"ParameterList","parameters":[],"src":"23335:2:157"},"returnParameters":{"id":79204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79203,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":79212,"src":"23360:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":79202,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23360:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"23359:9:157"},"scope":79315,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":79261,"nodeType":"FunctionDefinition","src":"23445:292:157","nodes":[],"body":{"id":79260,"nodeType":"Block","src":"23513:224:157","nodes":[],"statements":[{"assignments":[79220],"declarations":[{"constant":false,"id":79220,"mutability":"mutable","name":"slot","nameLocation":"23531:4:157","nodeType":"VariableDeclaration","scope":79260,"src":"23523:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":79219,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23523:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":79246,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":79245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":79229,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79214,"src":"23583:9:157","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79228,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23577:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":79227,"name":"bytes","nodeType":"ElementaryTypeName","src":"23577:5:157","typeDescriptions":{}}},"id":79230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23577:16:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":79226,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23567:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":79231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23567:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":79225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23559:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":79224,"name":"uint256","nodeType":"ElementaryTypeName","src":"23559:7:157","typeDescriptions":{}}},"id":79232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23559:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":79233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23598:1:157","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23559:40:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":79222,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"23548:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":79223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23552:6:157","memberName":"encode","nodeType":"MemberAccess","src":"23548:10:157","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":79235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23548:52:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":79221,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23538:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":79236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23538:63:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":79244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23604:23:157","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":79241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23621:4:157","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":79240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23613:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":79239,"name":"uint256","nodeType":"ElementaryTypeName","src":"23613:7:157","typeDescriptions":{}}},"id":79242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23613:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":79238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23605:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":79237,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23605:7:157","typeDescriptions":{}}},"id":79243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23605:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23538:89:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"23523:104:157"},{"expression":{"id":79254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":79250,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77291,"src":"23664:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":79247,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47840,"src":"23637:11:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$47840_$","typeString":"type(library StorageSlot)"}},"id":79249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23649:14:157","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":47773,"src":"23637:26:157","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$47728_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":79251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23637:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$47728_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":79252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23678:5:157","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":47727,"src":"23637:46:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":79253,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79220,"src":"23686:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23637:53:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":79255,"nodeType":"ExpressionStatement","src":"23637:53:157"},{"eventCall":{"arguments":[{"id":79257,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79220,"src":"23725:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":79256,"name":"StorageSlotChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72570,"src":"23706:18:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":79258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23706:24:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79259,"nodeType":"EmitStatement","src":"23701:29:157"}]},"implemented":true,"kind":"function","modifiers":[{"id":79217,"kind":"modifierInvocation","modifierName":{"id":79216,"name":"onlyOwner","nameLocations":["23503:9:157"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"23503:9:157"},"nodeType":"ModifierInvocation","src":"23503:9:157"}],"name":"_setStorageSlot","nameLocation":"23454:15:157","parameters":{"id":79215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79214,"mutability":"mutable","name":"namespace","nameLocation":"23484:9:157","nodeType":"VariableDeclaration","scope":79261,"src":"23470:23:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":79213,"name":"string","nodeType":"ElementaryTypeName","src":"23470:6:157","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"23469:25:157"},"returnParameters":{"id":79218,"nodeType":"ParameterList","parameters":[],"src":"23513:0:157"},"scope":79315,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":79314,"nodeType":"FunctionDefinition","src":"23743:453:157","nodes":[],"body":{"id":79313,"nodeType":"Block","src":"23770:426:157","nodes":[],"statements":[{"assignments":[79266],"declarations":[{"constant":false,"id":79266,"mutability":"mutable","name":"router","nameLocation":"23796:6:157","nodeType":"VariableDeclaration","scope":79313,"src":"23780:22:157","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":79265,"nodeType":"UserDefinedTypeName","pathNode":{"id":79264,"name":"Storage","nameLocations":["23780:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72524,"src":"23780:7:157"},"referencedDeclaration":72524,"src":"23780:7:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":79269,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":79267,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79200,"src":"23805:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$72524_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":79268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23805:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"23780:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":79278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":79271,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79266,"src":"23832:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":79272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23839:12:157","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":72499,"src":"23832:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$79950_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":79273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23852:4:157","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":79945,"src":"23832:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":79276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23868:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":79275,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23860:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":79274,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23860:7:157","typeDescriptions":{}}},"id":79277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23860:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23832:38:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":79279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23872:58:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":79270,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23824:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23824:107:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79281,"nodeType":"ExpressionStatement","src":"23824:107:157"},{"assignments":[79283],"declarations":[{"constant":false,"id":79283,"mutability":"mutable","name":"value","nameLocation":"23950:5:157","nodeType":"VariableDeclaration","scope":79313,"src":"23942:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":79282,"name":"uint128","nodeType":"ElementaryTypeName","src":"23942:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":79289,"initialValue":{"arguments":[{"expression":{"id":79286,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"23966:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":79287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23970:5:157","memberName":"value","nodeType":"MemberAccess","src":"23966:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":79285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23958:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":79284,"name":"uint128","nodeType":"ElementaryTypeName","src":"23958:7:157","typeDescriptions":{}}},"id":79288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23958:18:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"23942:34:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":79293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":79291,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79283,"src":"23994:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":79292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24002:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23994:9:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7a65726f2076616c7565207472616e73666572206973206e6f7420616c6c6f776564","id":79294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24005:36:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_f7a6530933b32b30d79302830020ea8cc92847db1df753a7ac689c2d472f0507","typeString":"literal_string \"zero value transfer is not allowed\""},"value":"zero value transfer is not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f7a6530933b32b30d79302830020ea8cc92847db1df753a7ac689c2d472f0507","typeString":"literal_string \"zero value transfer is not allowed\""}],"id":79290,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23986:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23986:56:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79296,"nodeType":"ExpressionStatement","src":"23986:56:157"},{"assignments":[79298],"declarations":[{"constant":false,"id":79298,"mutability":"mutable","name":"actorId","nameLocation":"24061:7:157","nodeType":"VariableDeclaration","scope":79313,"src":"24053:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79297,"name":"address","nodeType":"ElementaryTypeName","src":"24053:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":79301,"initialValue":{"expression":{"id":79299,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24071:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":79300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24075:6:157","memberName":"sender","nodeType":"MemberAccess","src":"24071:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"24053:28:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":79309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":79303,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79266,"src":"24099:6:157","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$72524_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":79304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24106:12:157","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":72523,"src":"24099:19:157","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$79978_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":79305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24119:8:157","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":79973,"src":"24099:28:157","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":79307,"indexExpression":{"id":79306,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79298,"src":"24128:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24099:37:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":79308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24140:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24099:42:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420726563656976652045746865722066726f6d20756e6b6e6f776e2070726f6772616d","id":79310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24143:45:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_8476f5ea94bf35ebead1d2341b39983f42ba677e9e678a8b8a61ec7d7a28d944","typeString":"literal_string \"couldn't receive Ether from unknown program\""},"value":"couldn't receive Ether from unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8476f5ea94bf35ebead1d2341b39983f42ba677e9e678a8b8a61ec7d7a28d944","typeString":"literal_string \"couldn't receive Ether from unknown program\""}],"id":79302,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24091:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":79311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24091:98:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79312,"nodeType":"ExpressionStatement","src":"24091:98:157"}]},"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":79262,"nodeType":"ParameterList","parameters":[],"src":"23750:2:157"},"returnParameters":{"id":79263,"nodeType":"ParameterList","parameters":[],"src":"23770:0:157"},"scope":79315,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":77283,"name":"IRouter","nameLocations":["848:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":72769,"src":"848:7:157"},"id":77284,"nodeType":"InheritanceSpecifier","src":"848:7:157"},{"baseName":{"id":77285,"name":"OwnableUpgradeable","nameLocations":["857:18:157"],"nodeType":"IdentifierPath","referencedDeclaration":41409,"src":"857:18:157"},"id":77286,"nodeType":"InheritanceSpecifier","src":"857:18:157"},{"baseName":{"id":77287,"name":"ReentrancyGuardTransientUpgradeable","nameLocations":["877:35:157"],"nodeType":"IdentifierPath","referencedDeclaration":42870,"src":"877:35:157"},"id":77288,"nodeType":"InheritanceSpecifier","src":"877:35:157"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[79315,42870,41409,42571,41677,72769],"name":"Router","nameLocation":"838:6:157","scope":79316,"usedErrors":[41245,41250,41426,41429,42802,49452,49457,49462],"usedEvents":[41256,41434,72529,72534,72541,72546,72551,72558,72565,72570]}],"license":"UNLICENSED"},"id":157} \ No newline at end of file diff --git a/ethexe/ethereum/WrappedVara.json b/ethexe/ethereum/WrappedVara.json index c854dbe35b7..03e412e4700 100644 --- a/ethexe/ethereum/WrappedVara.json +++ b/ethexe/ethereum/WrappedVara.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnFrom","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460aa575f51602061222b5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161217c90816100af8239f35b6001600160401b0319166001600160401b039081175f51602061222b5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146116f0578063095ea7b3146116ca57806318160ddd146116a157806323b872dd14611669578063313ce5671461164e5780633644e5151461162c57806340c10f19146115ef57806342966c68146115d25780636c2eb35014610e8f57806370a0823114610e4b578063715018a614610de457806379cc679014610db45780637ecebe0014610d5e57806384b0196e14610c3a5780638da5cb5b14610c0657806395d89b4114610b0c578063a9059cbb14610adb578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6117d1565b610124611c11565b611a0b565b005b5f80fd5b3461012b57604036600319011261012b576101486117d1565b6101596101536117e7565b916119d3565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6117d1565b6101976117e7565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611835565b519020610263611e1f565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611eb1565b90929192611f3e565b6001600160a01b03168481036102ae57506101299350611cfa565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16117d1565b5f51602061213c5f395f51905f52549067ffffffffffffffff60ff8360401c1615921680159081610ad3575b6001149081610ac9575b159081610ac0575b50610ab15781600167ffffffffffffffff195f51602061213c5f395f51905f525416175f51602061213c5f395f51905f5255610a7c575b60405191610375604084611835565b600c83526b57726170706564205661726160a01b60208401526040519161039d604084611835565b6005835264575641524160d81b60208401526103b7611e86565b6103bf611e86565b835167ffffffffffffffff8111610789576103e75f51602061203c5f395f51905f52546117fd565b601f8111610a0d575b50602094601f8211600114610992579481929394955f92610987575b50508160011b915f199060031b1c1916175f51602061203c5f395f51905f52555b825167ffffffffffffffff8111610789576104555f51602061209c5f395f51905f52546117fd565b601f8111610918575b506020601f821160011461089d57819293945f92610892575b50508160011b915f199060031b1c1916175f51602061209c5f395f51905f52555b6104a0611e86565b6104a8611e86565b6104b0611e86565b6104b981611a0b565b604051916104c8604084611835565b600c83526b57726170706564205661726160a01b60208401526104e9611e86565b604051916104f8604084611835565b60018352603160f81b602084015261050e611e86565b835167ffffffffffffffff8111610789576105365f51602061207c5f395f51905f52546117fd565b601f8111610823575b50602094601f82116001146107a8579481929394955f9261079d575b50508160011b915f199060031b1c1916175f51602061207c5f395f51905f52555b825167ffffffffffffffff8111610789576105a45f5160206120fc5f395f51905f52546117fd565b601f811161071a575b506020601f821160011461069f57819293945f92610694575b50508160011b915f199060031b1c1916175f5160206120fc5f395f51905f52555b5f5f51602061211c5f395f51905f528190555f51602061215c5f395f51905f52556001600160a01b0381161561068157670de0b6b3a764000061062991611d5d565b61062f57005b60ff60401b195f51602061213c5f395f51905f5254165f51602061213c5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105c6565b601f198216905f5160206120fc5f395f51905f525f52805f20915f5b818110610702575095836001959697106106ea575b505050811b015f5160206120fc5f395f51905f52556105e7565b01515f1960f88460031b161c191690558480806106d0565b9192602060018192868b0151815501940192016106bb565b5f5160206120fc5f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061077f575b601f0160051c01905b81811061077457506105ad565b5f8155600101610767565b909150819061075e565b634e487b7160e01b5f52604160045260245ffd5b01519050858061055b565b601f198216955f51602061207c5f395f51905f525f52805f20915f5b88811061080b575083600195969798106107f3575b505050811b015f51602061207c5f395f51905f525561057c565b01515f1960f88460031b161c191690558580806107d9565b919260206001819286850151815501940192016107c4565b5f51602061207c5f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c81019160208410610888575b601f0160051c01905b81811061087d575061053f565b5f8155600101610870565b9091508190610867565b015190508480610477565b601f198216905f51602061209c5f395f51905f525f52805f20915f5b818110610900575095836001959697106108e8575b505050811b015f51602061209c5f395f51905f5255610498565b01515f1960f88460031b161c191690558480806108ce565b9192602060018192868b0151815501940192016108b9565b5f51602061209c5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061097d575b601f0160051c01905b818110610972575061045e565b5f8155600101610965565b909150819061095c565b01519050858061040c565b601f198216955f51602061203c5f395f51905f525f52805f20915f5b8881106109f5575083600195969798106109dd575b505050811b015f51602061203c5f395f51905f525561042d565b01515f1960f88460031b161c191690558580806109c3565b919260206001819286850151815501940192016109ae565b5f51602061203c5f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a72575b601f0160051c01905b818110610a6757506103f0565b5f8155600101610a5a565b9091508190610a51565b6801000000000000000060ff60401b195f51602061213c5f395f51905f525416175f51602061213c5f395f51905f5255610366565b63f92ee8a960e01b5f5260045ffd5b9050158361032f565b303b159150610327565b83915061031d565b3461012b57604036600319011261012b57610b01610af76117d1565b6024359033611b40565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f51602061209c5f395f51905f5254610b38816117fd565b8084529060018116908115610be25750600114610b78575b610b7483610b6081850382611835565b6040519182916020835260208301906117ad565b0390f35b5f51602061209c5f395f51905f525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bc857509091508101602001610b60610b50565b919260018160209254838588010152019101909291610bb0565b60ff191660208086019190915291151560051b84019091019150610b609050610b50565b3461012b575f36600319011261012b575f5160206120bc5f395f51905f52546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b575f51602061211c5f395f51905f52541580610d48575b15610d0b57610caf610c70611857565b610c78611926565b6020610cbd60405192610c8b8385611835565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906117ad565b9085820360408701526117ad565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610cf457505050500390f35b835185528695509381019392810192600101610ce5565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b505f51602061215c5f395f51905f525415610c60565b3461012b57602036600319011261012b57610d776117d1565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610dd06117d1565b60243590610ddf823383611a7c565b611c44565b3461012b575f36600319011261012b57610dfc611c11565b5f5160206120bc5f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b03610e6c6117d1565b165f525f51602061205c5f395f51905f52602052602060405f2054604051908152f35b3461012b575f36600319011261012b57610ea7611c11565b5f51602061213c5f395f51905f525460ff8160401c169081156115bc575b50610ab1575f51602061213c5f395f51905f52805468ffffffffffffffffff1916680100000000000000021790556040805190610f029082611835565b600c81526b57726170706564205661726160a01b6020820152604051610f29604082611835565b6005815264575641524160d81b6020820152610f43611e86565b610f4b611e86565b815167ffffffffffffffff811161078957610f735f51602061203c5f395f51905f52546117fd565b601f811161154d575b50602092601f82116001146114d457928192935f926114c9575b50508160011b915f199060031b1c1916175f51602061203c5f395f51905f52555b805167ffffffffffffffff811161078957610fdf5f51602061209c5f395f51905f52546117fd565b601f811161145a575b50602091601f82116001146113e2579181925f926113d7575b50508160011b915f199060031b1c1916175f51602061209c5f395f51905f52555b61102a611e86565b5f5160206120bc5f395f51905f5254611056906001600160a01b031661104e611e86565b610124611e86565b604051611064604082611835565b600c81526b57726170706564205661726160a01b6020820152611085611e86565b604051611093604082611835565b60018152603160f81b60208201526110a9611e86565b815167ffffffffffffffff8111610789576110d15f51602061207c5f395f51905f52546117fd565b601f8111611368575b50602092601f82116001146112ef57928192935f926112e4575b50508160011b915f199060031b1c1916175f51602061207c5f395f51905f52555b805167ffffffffffffffff81116107895761113d5f5160206120fc5f395f51905f52546117fd565b601f8111611275575b50602091601f82116001146111fd579181925f926111f2575b50508160011b915f199060031b1c1916175f5160206120fc5f395f51905f52555b5f5f51602061211c5f395f51905f52555f5f51602061215c5f395f51905f525560ff60401b195f51602061213c5f395f51905f5254165f51602061213c5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b01519050828061115f565b601f198216925f5160206120fc5f395f51905f525f52805f20915f5b85811061125d57508360019510611245575b505050811b015f5160206120fc5f395f51905f5255611180565b01515f1960f88460031b161c1916905582808061122b565b91926020600181928685015181550194019201611219565b5f5160206120fc5f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c810191602084106112da575b601f0160051c01905b8181106112cf5750611146565b5f81556001016112c2565b90915081906112b9565b0151905083806110f4565b601f198216935f51602061207c5f395f51905f525f52805f20915f5b8681106113505750836001959610611338575b505050811b015f51602061207c5f395f51905f5255611115565b01515f1960f88460031b161c1916905583808061131e565b9192602060018192868501518155019401920161130b565b5f51602061207c5f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106113cd575b601f0160051c01905b8181106113c257506110da565b5f81556001016113b5565b90915081906113ac565b015190508280611001565b601f198216925f51602061209c5f395f51905f525f52805f20915f5b8581106114425750836001951061142a575b505050811b015f51602061209c5f395f51905f5255611022565b01515f1960f88460031b161c19169055828080611410565b919260206001819286850151815501940192016113fe565b5f51602061209c5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c810191602084106114bf575b601f0160051c01905b8181106114b45750610fe8565b5f81556001016114a7565b909150819061149e565b015190508380610f96565b601f198216935f51602061203c5f395f51905f525f52805f20915f5b868110611535575083600195961061151d575b505050811b015f51602061203c5f395f51905f5255610fb7565b01515f1960f88460031b161c19169055838080611503565b919260206001819286850151815501940192016114f0565b5f51602061203c5f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c810191602084106115b2575b601f0160051c01905b8181106115a75750610f7c565b5f815560010161159a565b9091508190611591565b6002915067ffffffffffffffff16101581610ec5565b3461012b57602036600319011261012b5761012960043533611c44565b3461012b57604036600319011261012b576116086117d1565b611610611c11565b6001600160a01b03811615610681576101299060243590611d5d565b3461012b575f36600319011261012b576020611646611e1f565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b016116856117d1565b61168d6117e7565b6044359161169c833383611a7c565b611b40565b3461012b575f36600319011261012b5760205f5160206120dc5f395f51905f5254604051908152f35b3461012b57604036600319011261012b57610b016116e66117d1565b6024359033611cfa565b3461012b575f36600319011261012b576040515f5f51602061203c5f395f51905f525461171c816117fd565b8084529060018116908115610be2575060011461174357610b7483610b6081850382611835565b5f51602061203c5f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b80821061179357509091508101602001610b60610b50565b91926001816020925483858801015201910190929161177b565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c9216801561182b575b602083101461181757565b634e487b7160e01b5f52602260045260245ffd5b91607f169161180c565b90601f8019910116810190811067ffffffffffffffff82111761078957604052565b604051905f825f51602061207c5f395f51905f525491611876836117fd565b8083529260018116908115611907575060011461189c575b61189a92500383611835565b565b505f51602061207c5f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106118eb57505090602061189a9282010161188e565b60209193508060019154838589010152019101909184926118d3565b6020925061189a94915060ff191682840152151560051b82010161188e565b604051905f825f5160206120fc5f395f51905f525491611945836117fd565b808352926001811690811561190757506001146119685761189a92500383611835565b505f5160206120fc5f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106119b757505090602061189a9282010161188e565b602091935080600191548385890101520191019091849261199f565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b03168015611a69575f5160206120bc5f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b9190611a87836119d3565b60018060a01b0382165f5260205260405f2054925f198410611aaa575b50505050565b828410611b1d576001600160a01b03811615611b0a576001600160a01b03821615611af757611ad8906119d3565b9060018060a01b03165f5260205260405f20910390555f808080611aa4565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b0316908115611bfe576001600160a01b031691821561068157815f525f51602061205c5f395f51905f5260205260405f2054818110611be557817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f51602061205c5f395f51905f5284520360405f2055845f525f51602061205c5f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f5160206120bc5f395f51905f52546001600160a01b03163303611c3157565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b03168015611bfe57805f525f51602061205c5f395f51905f5260205260405f2054838110611ce0576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f51602061205c5f395f51905f528452036040862055805f5160206120dc5f395f51905f5254035f5160206120dc5f395f51905f5255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b038316918215611b0a576001600160a01b0316928315611af7577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591611d496020926119d3565b855f5282528060405f2055604051908152a3565b5f5160206120dc5f395f51905f525490828201809211611e0b575f5160206120dc5f395f51905f52919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060209084611de957805f5160206120dc5f395f51905f5254035f5160206120dc5f395f51905f52555b604051908152a3565b8484525f51602061205c5f395f51905f52825260408420818154019055611de0565b634e487b7160e01b5f52601160045260245ffd5b611e27611fb2565b611e2f612009565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611e8060c082611835565b51902090565b60ff5f51602061213c5f395f51905f525460401c1615611ea257565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611f33579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611f28575f516001600160a01b03811615611f1e57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004811015611f9e5780611f50575050565b60018103611f675763f645eedf60e01b5f5260045ffd5b60028103611f82575063fce698f760e01b5f5260045260245ffd5b600314611f8c5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b611fba611857565b8051908115611fca576020012090565b50505f51602061211c5f395f51905f52548015611fe45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b612011611926565b8051908115612021576020012090565b50505f51602061215c5f395f51905f52548015611fe4579056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"636:1200:158:-:0;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;7894:76:30;;-1:-1:-1;;;;;;;;;;;636:1200:158;;7983:34:30;7979:146;;-1:-1:-1;636:1200:158;;;;;;;;;7979:146:30;-1:-1:-1;;;;;;636:1200:158;-1:-1:-1;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;8085:29:30;;636:1200:158;;8085:29:30;7979:146;;;;7894:76;7936:23;;;-1:-1:-1;7936:23:30;;-1:-1:-1;7936:23:30;636:1200:158;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146116f0578063095ea7b3146116ca57806318160ddd146116a157806323b872dd14611669578063313ce5671461164e5780633644e5151461162c57806340c10f19146115ef57806342966c68146115d25780636c2eb35014610e8f57806370a0823114610e4b578063715018a614610de457806379cc679014610db45780637ecebe0014610d5e57806384b0196e14610c3a5780638da5cb5b14610c0657806395d89b4114610b0c578063a9059cbb14610adb578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6117d1565b610124611c11565b611a0b565b005b5f80fd5b3461012b57604036600319011261012b576101486117d1565b6101596101536117e7565b916119d3565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6117d1565b6101976117e7565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611835565b519020610263611e1f565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611eb1565b90929192611f3e565b6001600160a01b03168481036102ae57506101299350611cfa565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16117d1565b5f51602061213c5f395f51905f52549067ffffffffffffffff60ff8360401c1615921680159081610ad3575b6001149081610ac9575b159081610ac0575b50610ab15781600167ffffffffffffffff195f51602061213c5f395f51905f525416175f51602061213c5f395f51905f5255610a7c575b60405191610375604084611835565b600c83526b57726170706564205661726160a01b60208401526040519161039d604084611835565b6005835264575641524160d81b60208401526103b7611e86565b6103bf611e86565b835167ffffffffffffffff8111610789576103e75f51602061203c5f395f51905f52546117fd565b601f8111610a0d575b50602094601f8211600114610992579481929394955f92610987575b50508160011b915f199060031b1c1916175f51602061203c5f395f51905f52555b825167ffffffffffffffff8111610789576104555f51602061209c5f395f51905f52546117fd565b601f8111610918575b506020601f821160011461089d57819293945f92610892575b50508160011b915f199060031b1c1916175f51602061209c5f395f51905f52555b6104a0611e86565b6104a8611e86565b6104b0611e86565b6104b981611a0b565b604051916104c8604084611835565b600c83526b57726170706564205661726160a01b60208401526104e9611e86565b604051916104f8604084611835565b60018352603160f81b602084015261050e611e86565b835167ffffffffffffffff8111610789576105365f51602061207c5f395f51905f52546117fd565b601f8111610823575b50602094601f82116001146107a8579481929394955f9261079d575b50508160011b915f199060031b1c1916175f51602061207c5f395f51905f52555b825167ffffffffffffffff8111610789576105a45f5160206120fc5f395f51905f52546117fd565b601f811161071a575b506020601f821160011461069f57819293945f92610694575b50508160011b915f199060031b1c1916175f5160206120fc5f395f51905f52555b5f5f51602061211c5f395f51905f528190555f51602061215c5f395f51905f52556001600160a01b0381161561068157670de0b6b3a764000061062991611d5d565b61062f57005b60ff60401b195f51602061213c5f395f51905f5254165f51602061213c5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105c6565b601f198216905f5160206120fc5f395f51905f525f52805f20915f5b818110610702575095836001959697106106ea575b505050811b015f5160206120fc5f395f51905f52556105e7565b01515f1960f88460031b161c191690558480806106d0565b9192602060018192868b0151815501940192016106bb565b5f5160206120fc5f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061077f575b601f0160051c01905b81811061077457506105ad565b5f8155600101610767565b909150819061075e565b634e487b7160e01b5f52604160045260245ffd5b01519050858061055b565b601f198216955f51602061207c5f395f51905f525f52805f20915f5b88811061080b575083600195969798106107f3575b505050811b015f51602061207c5f395f51905f525561057c565b01515f1960f88460031b161c191690558580806107d9565b919260206001819286850151815501940192016107c4565b5f51602061207c5f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c81019160208410610888575b601f0160051c01905b81811061087d575061053f565b5f8155600101610870565b9091508190610867565b015190508480610477565b601f198216905f51602061209c5f395f51905f525f52805f20915f5b818110610900575095836001959697106108e8575b505050811b015f51602061209c5f395f51905f5255610498565b01515f1960f88460031b161c191690558480806108ce565b9192602060018192868b0151815501940192016108b9565b5f51602061209c5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061097d575b601f0160051c01905b818110610972575061045e565b5f8155600101610965565b909150819061095c565b01519050858061040c565b601f198216955f51602061203c5f395f51905f525f52805f20915f5b8881106109f5575083600195969798106109dd575b505050811b015f51602061203c5f395f51905f525561042d565b01515f1960f88460031b161c191690558580806109c3565b919260206001819286850151815501940192016109ae565b5f51602061203c5f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a72575b601f0160051c01905b818110610a6757506103f0565b5f8155600101610a5a565b9091508190610a51565b6801000000000000000060ff60401b195f51602061213c5f395f51905f525416175f51602061213c5f395f51905f5255610366565b63f92ee8a960e01b5f5260045ffd5b9050158361032f565b303b159150610327565b83915061031d565b3461012b57604036600319011261012b57610b01610af76117d1565b6024359033611b40565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f51602061209c5f395f51905f5254610b38816117fd565b8084529060018116908115610be25750600114610b78575b610b7483610b6081850382611835565b6040519182916020835260208301906117ad565b0390f35b5f51602061209c5f395f51905f525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bc857509091508101602001610b60610b50565b919260018160209254838588010152019101909291610bb0565b60ff191660208086019190915291151560051b84019091019150610b609050610b50565b3461012b575f36600319011261012b575f5160206120bc5f395f51905f52546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b575f51602061211c5f395f51905f52541580610d48575b15610d0b57610caf610c70611857565b610c78611926565b6020610cbd60405192610c8b8385611835565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906117ad565b9085820360408701526117ad565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610cf457505050500390f35b835185528695509381019392810192600101610ce5565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b505f51602061215c5f395f51905f525415610c60565b3461012b57602036600319011261012b57610d776117d1565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610dd06117d1565b60243590610ddf823383611a7c565b611c44565b3461012b575f36600319011261012b57610dfc611c11565b5f5160206120bc5f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b03610e6c6117d1565b165f525f51602061205c5f395f51905f52602052602060405f2054604051908152f35b3461012b575f36600319011261012b57610ea7611c11565b5f51602061213c5f395f51905f525460ff8160401c169081156115bc575b50610ab1575f51602061213c5f395f51905f52805468ffffffffffffffffff1916680100000000000000021790556040805190610f029082611835565b600c81526b57726170706564205661726160a01b6020820152604051610f29604082611835565b6005815264575641524160d81b6020820152610f43611e86565b610f4b611e86565b815167ffffffffffffffff811161078957610f735f51602061203c5f395f51905f52546117fd565b601f811161154d575b50602092601f82116001146114d457928192935f926114c9575b50508160011b915f199060031b1c1916175f51602061203c5f395f51905f52555b805167ffffffffffffffff811161078957610fdf5f51602061209c5f395f51905f52546117fd565b601f811161145a575b50602091601f82116001146113e2579181925f926113d7575b50508160011b915f199060031b1c1916175f51602061209c5f395f51905f52555b61102a611e86565b5f5160206120bc5f395f51905f5254611056906001600160a01b031661104e611e86565b610124611e86565b604051611064604082611835565b600c81526b57726170706564205661726160a01b6020820152611085611e86565b604051611093604082611835565b60018152603160f81b60208201526110a9611e86565b815167ffffffffffffffff8111610789576110d15f51602061207c5f395f51905f52546117fd565b601f8111611368575b50602092601f82116001146112ef57928192935f926112e4575b50508160011b915f199060031b1c1916175f51602061207c5f395f51905f52555b805167ffffffffffffffff81116107895761113d5f5160206120fc5f395f51905f52546117fd565b601f8111611275575b50602091601f82116001146111fd579181925f926111f2575b50508160011b915f199060031b1c1916175f5160206120fc5f395f51905f52555b5f5f51602061211c5f395f51905f52555f5f51602061215c5f395f51905f525560ff60401b195f51602061213c5f395f51905f5254165f51602061213c5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b01519050828061115f565b601f198216925f5160206120fc5f395f51905f525f52805f20915f5b85811061125d57508360019510611245575b505050811b015f5160206120fc5f395f51905f5255611180565b01515f1960f88460031b161c1916905582808061122b565b91926020600181928685015181550194019201611219565b5f5160206120fc5f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c810191602084106112da575b601f0160051c01905b8181106112cf5750611146565b5f81556001016112c2565b90915081906112b9565b0151905083806110f4565b601f198216935f51602061207c5f395f51905f525f52805f20915f5b8681106113505750836001959610611338575b505050811b015f51602061207c5f395f51905f5255611115565b01515f1960f88460031b161c1916905583808061131e565b9192602060018192868501518155019401920161130b565b5f51602061207c5f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106113cd575b601f0160051c01905b8181106113c257506110da565b5f81556001016113b5565b90915081906113ac565b015190508280611001565b601f198216925f51602061209c5f395f51905f525f52805f20915f5b8581106114425750836001951061142a575b505050811b015f51602061209c5f395f51905f5255611022565b01515f1960f88460031b161c19169055828080611410565b919260206001819286850151815501940192016113fe565b5f51602061209c5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c810191602084106114bf575b601f0160051c01905b8181106114b45750610fe8565b5f81556001016114a7565b909150819061149e565b015190508380610f96565b601f198216935f51602061203c5f395f51905f525f52805f20915f5b868110611535575083600195961061151d575b505050811b015f51602061203c5f395f51905f5255610fb7565b01515f1960f88460031b161c19169055838080611503565b919260206001819286850151815501940192016114f0565b5f51602061203c5f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c810191602084106115b2575b601f0160051c01905b8181106115a75750610f7c565b5f815560010161159a565b9091508190611591565b6002915067ffffffffffffffff16101581610ec5565b3461012b57602036600319011261012b5761012960043533611c44565b3461012b57604036600319011261012b576116086117d1565b611610611c11565b6001600160a01b03811615610681576101299060243590611d5d565b3461012b575f36600319011261012b576020611646611e1f565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b016116856117d1565b61168d6117e7565b6044359161169c833383611a7c565b611b40565b3461012b575f36600319011261012b5760205f5160206120dc5f395f51905f5254604051908152f35b3461012b57604036600319011261012b57610b016116e66117d1565b6024359033611cfa565b3461012b575f36600319011261012b576040515f5f51602061203c5f395f51905f525461171c816117fd565b8084529060018116908115610be2575060011461174357610b7483610b6081850382611835565b5f51602061203c5f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b80821061179357509091508101602001610b60610b50565b91926001816020925483858801015201910190929161177b565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c9216801561182b575b602083101461181757565b634e487b7160e01b5f52602260045260245ffd5b91607f169161180c565b90601f8019910116810190811067ffffffffffffffff82111761078957604052565b604051905f825f51602061207c5f395f51905f525491611876836117fd565b8083529260018116908115611907575060011461189c575b61189a92500383611835565b565b505f51602061207c5f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106118eb57505090602061189a9282010161188e565b60209193508060019154838589010152019101909184926118d3565b6020925061189a94915060ff191682840152151560051b82010161188e565b604051905f825f5160206120fc5f395f51905f525491611945836117fd565b808352926001811690811561190757506001146119685761189a92500383611835565b505f5160206120fc5f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106119b757505090602061189a9282010161188e565b602091935080600191548385890101520191019091849261199f565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b03168015611a69575f5160206120bc5f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b9190611a87836119d3565b60018060a01b0382165f5260205260405f2054925f198410611aaa575b50505050565b828410611b1d576001600160a01b03811615611b0a576001600160a01b03821615611af757611ad8906119d3565b9060018060a01b03165f5260205260405f20910390555f808080611aa4565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b0316908115611bfe576001600160a01b031691821561068157815f525f51602061205c5f395f51905f5260205260405f2054818110611be557817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f51602061205c5f395f51905f5284520360405f2055845f525f51602061205c5f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f5160206120bc5f395f51905f52546001600160a01b03163303611c3157565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b03168015611bfe57805f525f51602061205c5f395f51905f5260205260405f2054838110611ce0576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f51602061205c5f395f51905f528452036040862055805f5160206120dc5f395f51905f5254035f5160206120dc5f395f51905f5255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b038316918215611b0a576001600160a01b0316928315611af7577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591611d496020926119d3565b855f5282528060405f2055604051908152a3565b5f5160206120dc5f395f51905f525490828201809211611e0b575f5160206120dc5f395f51905f52919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060209084611de957805f5160206120dc5f395f51905f5254035f5160206120dc5f395f51905f52555b604051908152a3565b8484525f51602061205c5f395f51905f52825260408420818154019055611de0565b634e487b7160e01b5f52601160045260245ffd5b611e27611fb2565b611e2f612009565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611e8060c082611835565b51902090565b60ff5f51602061213c5f395f51905f525460401c1615611ea257565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611f33579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611f28575f516001600160a01b03811615611f1e57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004811015611f9e5780611f50575050565b60018103611f675763f645eedf60e01b5f5260045ffd5b60028103611f82575063fce698f760e01b5f5260045260245ffd5b600314611f8c5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b611fba611857565b8051908115611fca576020012090565b50505f51602061211c5f395f51905f52548015611fe45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b612011611926565b8051908115612021576020012090565b50505f51602061215c5f395f51905f52548015611fe4579056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101","sourceMap":"636:1200:158:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;2357:1:29;636:1200:158;;:::i;:::-;2303:62:29;;:::i;:::-;2357:1;:::i;:::-;636:1200:158;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;4771:20:31;636:1200:158;;:::i;:::-;4771:20:31;;:::i;:::-;:29;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;2286:15:33;;:26;2282:97;;7051:25:74;7105:8;636:1200:158;;;;;;;;;;;;972:64:36;636:1200:158;;;;;;;;;;;;;;;;2420:78:33;636:1200:158;2420:78:33;;636:1200:158;1279:95:33;636:1200:158;;1279:95:33;636:1200:158;1279:95:33;;636:1200:158;;;;;;;;;1279:95:33;;636:1200:158;1279:95:33;636:1200:158;1279:95:33;;636:1200:158;;1279:95:33;;636:1200:158;;1279:95:33;;636:1200:158;;2420:78:33;;;636:1200:158;2420:78:33;;:::i;:::-;636:1200:158;2410:89:33;;3980:23:39;;:::i;:::-;3993:249:77;636:1200:158;3993:249:77;;-1:-1:-1;;;3993:249:77;;;;;;;;;;636:1200:158;;;3993:249:77;636:1200:158;;3993:249:77;;7051:25:74;:::i;:::-;7105:8;;;;;:::i;:::-;-1:-1:-1;;;;;636:1200:158;2623:15:33;;;2619:88;;10021:4:31;;;;;:::i;2619:88:33:-;2661:35;;;;;636:1200:158;2661:35:33;636:1200:158;;;;;;2661:35:33;2282:97;2335:33;;;;636:1200:158;2335:33:33;636:1200:158;;;;2335:33:33;636:1200:158;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;4301:16:30;636:1200:158;;4724:16:30;;:34;;;;636:1200:158;4803:1:30;4788:16;:50;;;;636:1200:158;4853:13:30;:30;;;;636:1200:158;4849:91:30;;;636:1200:158;4803:1:30;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;4977:67:30;;636:1200:158;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;636:1200:158;;;;;;;;;;;:::i;:::-;825:14;636:1200;;-1:-1:-1;;;636:1200:158;825:14;;;6891:76:30;;:::i;:::-;;;:::i;:::-;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;6891:76:30;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;6959:1;;;:::i;:::-;636:1200:158;;;;;;;:::i;:::-;;;;-1:-1:-1;;;636:1200:158;;;;6891:76:30;;:::i;:::-;636:1200:158;;;;;;;:::i;:::-;6591:4:30;636:1200:158;;-1:-1:-1;;;636:1200:158;;;;6891:76:30;;:::i;:::-;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;-1:-1:-1;;;;;636:1200:158;;8707:21:31;8703:91;;945:9:158;8832:5:31;;;:::i;:::-;5064:101:30;;636:1200:158;5064:101:30;-1:-1:-1;;;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;5140:14:30;636:1200:158;;;4803:1:30;636:1200:158;;5140:14:30;636:1200:158;8703:91:31;8751:32;;;636:1200:158;8751:32:31;636:1200:158;;;;;8751:32:31;636:1200:158;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;4977:67:30;636:1200:158;-1:-1:-1;;;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;4977:67:30;;4849:91;6496:23;;;636:1200:158;4906:23:30;636:1200:158;;4906:23:30;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:30;;4724:34;;;-1:-1:-1;4724:34:30;;636:1200:158;;;;;;-1:-1:-1;;636:1200:158;;;;4545:5:31;636:1200:158;;:::i;:::-;;;966:10:34;;4545:5:31;:::i;:::-;636:1200:158;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;;636:1200:158;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;636:1200:158;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;5647:18:39;:43;;;636:1200:158;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5835:13:39;636:1200:158;;;;5870:4:39;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;-1:-1:-1;;;636:1200:158;;;;;;;;;;;;-1:-1:-1;;;636:1200:158;;;;;;;5647:43:39;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;5669:21:39;5647:43;;636:1200:158;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;;;;;;;;;972:64:36;636:1200:158;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;1479:5:32;636:1200:158;;:::i;:::-;;;966:10:34;1448:5:32;966:10:34;;1448:5:32;;:::i;:::-;1479;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;636:1200:158;;;;;;;-1:-1:-1;;;;;636:1200:158;3975:40:29;636:1200:158;;3975:40:29;636:1200:158;;;;;;;-1:-1:-1;;636:1200:158;;;;-1:-1:-1;;;;;636:1200:158;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;6429:44:30;;;;;636:1200:158;6425:105:30;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;636:1200:158;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;636:1200:158;;;;;;;;;;:::i;:::-;825:14;636:1200;;-1:-1:-1;;;636:1200:158;825:14;;;6891:76:30;;:::i;:::-;;;:::i;:::-;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;6891:76:30;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;6959:1:30;;-1:-1:-1;;;;;636:1200:158;6891:76:30;;:::i;:::-;;;:::i;6959:1::-;636:1200:158;;;;;;:::i;:::-;;;;-1:-1:-1;;;636:1200:158;;;;6891:76:30;;:::i;:::-;636:1200:158;;;;;;:::i;:::-;6591:4:30;636:1200:158;;-1:-1:-1;;;636:1200:158;;;;6891:76:30;;:::i;:::-;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;-1:-1:-1;;;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;6654:20:30;636:1200:158;;;1483:1;636:1200;;6654:20:30;636:1200:158;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;6429:44:30;1483:1:158;636:1200;;;;6448:25:30;;6429:44;;;636:1200:158;;;;;;-1:-1:-1;;636:1200:158;;;;1005:5:32;636:1200:158;;966:10:34;1005:5:32;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;636:1200:158;;8707:21:31;8703:91;;8832:5;636:1200:158;;;8832:5:31;;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;;3980:23:39;;:::i;:::-;636:1200:158;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;;1726:2;636:1200;;;;;;;;;-1:-1:-1;;636:1200:158;;;;6102:5:31;636:1200:158;;:::i;:::-;;;:::i;:::-;;;966:10:34;6066:5:31;966:10:34;;6066:5:31;;:::i;:::-;6102;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;10021:4:31;636:1200:158;;:::i;:::-;;;966:10:34;;10021:4:31;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;;636:1200:158;;;;:::o;:::-;;;;-1:-1:-1;;;;;636:1200:158;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;636:1200:158;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;;;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;636:1200:158;;;;;4771:13:31;636:1200:158;;;;;;:::o;3405:215:29:-;-1:-1:-1;;;;;636:1200:158;3489:22:29;;3485:91;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;636:1200:158;;;;;;;-1:-1:-1;;;;;636:1200:158;3975:40:29;-1:-1:-1;;3975:40:29;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;636:1200:158;;3509:1:29;3534:31;11649:476:31;;;4771:20;;;:::i;:::-;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;;;-1:-1:-1;636:1200:158;;;;;11814:36:31;;11810:309;;11649:476;;;;;:::o;11810:309::-;11870:24;;;11866:130;;-1:-1:-1;;;;;636:1200:158;;11045:19:31;11041:89;;-1:-1:-1;;;;;636:1200:158;;11143:21:31;11139:90;;11238:20;;;:::i;:::-;:29;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;-1:-1:-1;636:1200:158;;;;;11810:309:31;;;;;;11139:90;11187:31;;;-1:-1:-1;11187:31:31;-1:-1:-1;11187:31:31;636:1200:158;;-1:-1:-1;11187:31:31;11041:89;11087:32;;;-1:-1:-1;11087:32:31;-1:-1:-1;11087:32:31;636:1200:158;;-1:-1:-1;11087:32:31;11866:130;11921:60;;;;;;-1:-1:-1;11921:60:31;636:1200:158;;;;;;11921:60:31;636:1200:158;;;;;;-1:-1:-1;11921:60:31;6509:300;-1:-1:-1;;;;;636:1200:158;;6592:18:31;;6588:86;;-1:-1:-1;;;;;636:1200:158;;6687:16:31;;6683:86;;636:1200:158;6608:1:31;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;6608:1:31;636:1200:158;;7513:19:31;;;7509:115;;636:1200:158;8262:25:31;636:1200:158;;;;6608:1:31;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;6608:1:31;636:1200:158;;;6608:1:31;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;6608:1:31;636:1200:158;;;;;;;;;;;;8262:25:31;6509:300::o;7509:115::-;7559:50;;;;6608:1;7559:50;;636:1200:158;;;;;;6608:1:31;7559:50;6588:86;6633:30;;;6608:1;6633:30;6608:1;6633:30;636:1200:158;;6608:1:31;6633:30;2658:162:29;-1:-1:-1;;;;;;;;;;;636:1200:158;-1:-1:-1;;;;;636:1200:158;966:10:34;2717:23:29;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:29;966:10:34;2763:40:29;636:1200:158;;-1:-1:-1;2763:40:29;9163:206:31;;;;-1:-1:-1;;;;;636:1200:158;9233:21:31;;9229:89;;636:1200:158;9252:1:31;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;9252:1:31;636:1200:158;;7513:19:31;;;7509:115;;636:1200:158;;9252:1:31;636:1200:158;;8262:25:31;636:1200:158;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;8262:25:31;9163:206::o;7509:115::-;7559:50;;;;;9252:1;7559:50;;636:1200:158;;;;;;9252:1:31;7559:50;10880:487;;-1:-1:-1;;;;;636:1200:158;;;11045:19:31;;11041:89;;-1:-1:-1;;;;;636:1200:158;;11143:21:31;;11139:90;;11319:31;11238:20;;636:1200:158;11238:20:31;;:::i;:::-;636:1200:158;-1:-1:-1;636:1200:158;;;;;-1:-1:-1;636:1200:158;;;;;;;11319:31:31;10880:487::o;7124:1170::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;-1:-1:-1;;;;;636:1200:158;;;;8262:25:31;;636:1200:158;;7822:16:31;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;7818:429:31;636:1200:158;;;;;8262:25:31;7124:1170::o;7818:429::-;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;7818:429:31;;636:1200:158;;;;;945:9;;;;;636:1200;945:9;4016:191:39;4129:17;;:::i;:::-;4148:20;;:::i;:::-;636:1200:158;;4107:92:39;;;;636:1200:158;1959:95:39;636:1200:158;;;1959:95:39;;636:1200:158;1959:95:39;;;636:1200:158;4170:13:39;1959:95;;;636:1200:158;4193:4:39;1959:95;;;636:1200:158;1959:95:39;4107:92;;;;;;:::i;:::-;636:1200:158;4097:103:39;;4016:191;:::o;7082:141:30:-;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;7148:18:30;7144:73;;7082:141::o;7144:73::-;7189:17;;;-1:-1:-1;7189:17:30;;-1:-1:-1;7189:17:30;5203:1551:74;;;6283:66;6270:79;;6266:164;;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;;;;;6541:24:74;;;;;;;;;-1:-1:-1;6541:24:74;-1:-1:-1;;;;;636:1200:158;;6579:20:74;6575:113;;6698:49;-1:-1:-1;6698:49:74;-1:-1:-1;5203:1551:74;:::o;6575:113::-;6615:62;-1:-1:-1;6615:62:74;6541:24;6615:62;-1:-1:-1;6615:62:74;:::o;6541:24::-;636:1200:158;;;-1:-1:-1;636:1200:158;;;;;6266:164:74;6365:54;;;6381:1;6365:54;6385:30;6365:54;;:::o;7280:532::-;636:1200:158;;;;;;7366:29:74;;;7411:7;;:::o;7362:444::-;636:1200:158;7462:38:74;;636:1200:158;;7523:23:74;;;7375:20;7523:23;636:1200:158;7375:20:74;7523:23;7458:348;7576:35;7567:44;;7576:35;;7634:46;;;;7375:20;7634:46;636:1200:158;;;7375:20:74;7634:46;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;;;7375:20;7763:32;636:1200:158;;;7375:20:74;7763:32;636:1200:158;;;;7375:20:74;636:1200:158;;;;;7375:20:74;636:1200:158;6928:687:39;636:1200:158;;:::i;:::-;;;;7100:22:39;;;;636:1200:158;;7145:22:39;7138:29;:::o;7096:513::-;-1:-1:-1;;;;;;;;;;;;;636:1200:158;7473:15:39;;;;7508:17;:::o;7469:130::-;7564:20;7571:13;7564:20;:::o;7836:723::-;636:1200:158;;:::i;:::-;;;;8017:25:39;;;;636:1200:158;;8065:25:39;8058:32;:::o;8013:540::-;-1:-1:-1;;;;;;;;;;;;;636:1200:158;8411:18:39;;;;8449:20;:::o","linkReferences":{}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","eip712Domain()":"84b0196e","initialize(address)":"c4d66de8","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"burn(uint256)\":{\"details\":\"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"reinitialize()\":{\"custom:oz-upgrades-validate-as-initializer\":\"\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WrappedVara.sol\":\"WrappedVara\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@symbioticfi/core/=lib/symbiotic-rewards/lib/core/\",\":core/=lib/symbiotic-rewards/lib/core/\",\":ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":script/=script/\",\":src/=src/\",\":symbiotic-core/=lib/symbiotic-core/\",\":symbiotic-rewards/=lib/symbiotic-rewards/\",\":test/=test/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0xfcd09c2aa8cc3f93e12545454359f901965db312bc03833daf84de0c03e05022\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07701188648d2ab83dab1037808298585264559bddf243bd8929037adcb984b0\",\"dweb:/ipfs/QmavmG5REdHCAWsZ8Cag26BCxAq27DRKGxr3uBg5ZYxQ51\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"keccak256\":\"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f\",\"dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x075302c23ba4b3a1d2a5000947ac44bbb4e84b011ecadad6f5e3fd92cd568659\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13806b62ea930e61dfba5fbbfd4eafe135bb0e2e4d55ce8cde1407d7b20a739\",\"dweb:/ipfs/QmYjt4fwBLdKrMbGHZPqdsiwsK4obFdXdKFhQBBW5ruEuC\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol\":{\"keccak256\":\"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827\",\"dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x89374b2a634f0a9c08f5891b6ecce0179bc2e0577819c787ed3268ca428c2459\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f13d2572e5bdd55e483dfac069aac47603644071616a41fce699e94368e38c13\",\"dweb:/ipfs/QmfKeyNT6vyb99vJQatPZ88UyZgXNmAiHUXSWnaR1TPE11\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0xfb223a85dd0b2175cfbbaa325a744e2cd74ecd17c3df2b77b0722f991d2725ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84bf1dea0589ec49c8d15d559cc6d86ee493048a89b2d4adb60fbe705a3d89ae\",\"dweb:/ipfs/Qmd56n556d529wk2pRMhYhm5nhMDhviwereodDikjs68w1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x2fa0657dd7b8bc75475a47f64bc04a9adb42236b15d65e6781594ea69a46c3e4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7496f42681aed94bf0142a077324e50b86046610c1724e7c12e96cf1c365914a\",\"dweb:/ipfs/QmZvhNdSAAbN4PKPdheAqwpXukUiXp3Q3TdQccDMg2NDTV\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/WrappedVara.sol\":{\"keccak256\":\"0xa098ad5acb3219b96af6e145e5bcf934a19f9b1aa084e6109e5039d02d212379\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://65dae2ef61afd86b92e59663e7bd9138faa227e39399d052843a026524c1bcb7\",\"dweb:/ipfs/QmW4LdDjeJCjH1MhJw5TjL8L2BVYfYsmcW7i7moJBoG3ub\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burnFrom"},{"inputs":[],"stateMutability":"pure","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"Returns the value of tokens owned by `account`."},"burn(uint256)":{"details":"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}."},"burnFrom(address,uint256)":{"details":"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"reinitialize()":{"custom:oz-upgrades-validate-as-initializer":""},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@symbioticfi/core/=lib/symbiotic-rewards/lib/core/","core/=lib/symbiotic-rewards/lib/core/","ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","script/=script/","src/=src/","symbiotic-core/=lib/symbiotic-core/","symbiotic-rewards/=lib/symbiotic-rewards/","test/=test/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/WrappedVara.sol":"WrappedVara"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0xfcd09c2aa8cc3f93e12545454359f901965db312bc03833daf84de0c03e05022","urls":["bzz-raw://07701188648d2ab83dab1037808298585264559bddf243bd8929037adcb984b0","dweb:/ipfs/QmavmG5REdHCAWsZ8Cag26BCxAq27DRKGxr3uBg5ZYxQ51"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"keccak256":"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f","urls":["bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f","dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x075302c23ba4b3a1d2a5000947ac44bbb4e84b011ecadad6f5e3fd92cd568659","urls":["bzz-raw://c13806b62ea930e61dfba5fbbfd4eafe135bb0e2e4d55ce8cde1407d7b20a739","dweb:/ipfs/QmYjt4fwBLdKrMbGHZPqdsiwsK4obFdXdKFhQBBW5ruEuC"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol":{"keccak256":"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4","urls":["bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827","dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol":{"keccak256":"0x89374b2a634f0a9c08f5891b6ecce0179bc2e0577819c787ed3268ca428c2459","urls":["bzz-raw://f13d2572e5bdd55e483dfac069aac47603644071616a41fce699e94368e38c13","dweb:/ipfs/QmfKeyNT6vyb99vJQatPZ88UyZgXNmAiHUXSWnaR1TPE11"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol":{"keccak256":"0xfb223a85dd0b2175cfbbaa325a744e2cd74ecd17c3df2b77b0722f991d2725ee","urls":["bzz-raw://84bf1dea0589ec49c8d15d559cc6d86ee493048a89b2d4adb60fbe705a3d89ae","dweb:/ipfs/Qmd56n556d529wk2pRMhYhm5nhMDhviwereodDikjs68w1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e","urls":["bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23","dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f","urls":["bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e","dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x2fa0657dd7b8bc75475a47f64bc04a9adb42236b15d65e6781594ea69a46c3e4","urls":["bzz-raw://7496f42681aed94bf0142a077324e50b86046610c1724e7c12e96cf1c365914a","dweb:/ipfs/QmZvhNdSAAbN4PKPdheAqwpXukUiXp3Q3TdQccDMg2NDTV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4","urls":["bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e","dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631","urls":["bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59","dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"src/WrappedVara.sol":{"keccak256":"0xa098ad5acb3219b96af6e145e5bcf934a19f9b1aa084e6109e5039d02d212379","urls":["bzz-raw://65dae2ef61afd86b92e59663e7bd9138faa227e39399d052843a026524c1bcb7","dweb:/ipfs/QmW4LdDjeJCjH1MhJw5TjL8L2BVYfYsmcW7i7moJBoG3ub"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/WrappedVara.sol","id":79414,"exportedSymbols":{"ERC20BurnableUpgradeable":[42356],"ERC20PermitUpgradeable":[42525],"ERC20Upgradeable":[42294],"Initializable":[41677],"OwnableUpgradeable":[41409],"WrappedVara":[79413]},"nodeType":"SourceUnit","src":"39:1798:158","nodes":[{"id":79290,"nodeType":"PragmaDirective","src":"39:24:158","nodes":[],"literals":["solidity","^","0.8",".28"]},{"id":79292,"nodeType":"ImportDirective","src":"65:96:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":79414,"sourceUnit":41678,"symbolAliases":[{"foreign":{"id":79291,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41677,"src":"73:13:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79294,"nodeType":"ImportDirective","src":"162:102:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","nameLocation":"-1:-1:-1","scope":79414,"sourceUnit":42295,"symbolAliases":[{"foreign":{"id":79293,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42294,"src":"170:16:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79296,"nodeType":"ImportDirective","src":"265:135:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79414,"sourceUnit":42357,"symbolAliases":[{"foreign":{"id":79295,"name":"ERC20BurnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42356,"src":"278:24:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79298,"nodeType":"ImportDirective","src":"401:101:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79414,"sourceUnit":41410,"symbolAliases":[{"foreign":{"id":79297,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41409,"src":"409:18:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79300,"nodeType":"ImportDirective","src":"503:131:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79414,"sourceUnit":42526,"symbolAliases":[{"foreign":{"id":79299,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42525,"src":"516:22:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79413,"nodeType":"ContractDefinition","src":"636:1200:158","nodes":[{"id":79313,"nodeType":"VariableDeclaration","src":"788:51:158","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_NAME","nameLocation":"812:10:158","scope":79413,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":79311,"name":"string","nodeType":"ElementaryTypeName","src":"788:6:158","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"577261707065642056617261","id":79312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"825:14:158","typeDescriptions":{"typeIdentifier":"t_stringliteral_985e2e9885ca23de2896caee5fad5adf116e2558361aa44c502ff8b2c1b2a41b","typeString":"literal_string \"Wrapped Vara\""},"value":"Wrapped Vara"},"visibility":"private"},{"id":79316,"nodeType":"VariableDeclaration","src":"845:46:158","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_SYMBOL","nameLocation":"869:12:158","scope":79413,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":79314,"name":"string","nodeType":"ElementaryTypeName","src":"845:6:158","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"5756415241","id":79315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"884:7:158","typeDescriptions":{"typeIdentifier":"t_stringliteral_203a7c23d1b412674989fae6808de72f52c6953d49ac548796ba3c05451693a4","typeString":"literal_string \"WVARA\""},"value":"WVARA"},"visibility":"private"},{"id":79319,"nodeType":"VariableDeclaration","src":"897:57:158","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_INITIAL_SUPPLY","nameLocation":"922:20:158","scope":79413,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79317,"name":"uint256","nodeType":"ElementaryTypeName","src":"897:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"315f3030305f303030","id":79318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"945:9:158","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1_000_000"},"visibility":"private"},{"id":79327,"nodeType":"FunctionDefinition","src":"1014:53:158","nodes":[],"body":{"id":79326,"nodeType":"Block","src":"1028:39:158","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":79323,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41631,"src":"1038:20:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":79324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1038:22:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79325,"nodeType":"ExpressionStatement","src":"1038:22:158"}]},"documentation":{"id":79320,"nodeType":"StructuredDocumentation","src":"961:48:158","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":79321,"nodeType":"ParameterList","parameters":[],"src":"1025:2:158"},"returnParameters":{"id":79322,"nodeType":"ParameterList","parameters":[],"src":"1028:0:158"},"scope":79413,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":79361,"nodeType":"FunctionDefinition","src":"1073:297:158","nodes":[],"body":{"id":79360,"nodeType":"Block","src":"1134:236:158","nodes":[],"statements":[{"expression":{"arguments":[{"id":79335,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79313,"src":"1157:10:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":79336,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79316,"src":"1169:12:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79334,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41745,"src":"1144:12:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":79337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1144:38:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79338,"nodeType":"ExpressionStatement","src":"1144:38:158"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":79339,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42315,"src":"1192:20:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":79340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1192:22:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79341,"nodeType":"ExpressionStatement","src":"1192:22:158"},{"expression":{"arguments":[{"id":79343,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79329,"src":"1239:12:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":79342,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"1224:14:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":79344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1224:28:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79345,"nodeType":"ExpressionStatement","src":"1224:28:158"},{"expression":{"arguments":[{"id":79347,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79313,"src":"1281:10:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79346,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42412,"src":"1262:18:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":79348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1262:30:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79349,"nodeType":"ExpressionStatement","src":"1262:30:158"},{"expression":{"arguments":[{"id":79351,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79329,"src":"1309:12:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":79352,"name":"TOKEN_INITIAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79319,"src":"1323:20:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":79353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1346:2:158","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":79354,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[79397],"referencedDeclaration":79397,"src":"1352:8:158","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":79355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1352:10:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1346:16:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1323:39:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":79350,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42126,"src":"1303:5:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":79358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1303:60:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79359,"nodeType":"ExpressionStatement","src":"1303:60:158"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":79332,"kind":"modifierInvocation","modifierName":{"id":79331,"name":"initializer","nameLocations":["1122:11:158"],"nodeType":"IdentifierPath","referencedDeclaration":41517,"src":"1122:11:158"},"nodeType":"ModifierInvocation","src":"1122:11:158"}],"name":"initialize","nameLocation":"1082:10:158","parameters":{"id":79330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79329,"mutability":"mutable","name":"initialOwner","nameLocation":"1101:12:158","nodeType":"VariableDeclaration","scope":79361,"src":"1093:20:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79328,"name":"address","nodeType":"ElementaryTypeName","src":"1093:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1092:22:158"},"returnParameters":{"id":79333,"nodeType":"ParameterList","parameters":[],"src":"1134:0:158"},"scope":79413,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":79388,"nodeType":"FunctionDefinition","src":"1428:218:158","nodes":[],"body":{"id":79387,"nodeType":"Block","src":"1486:160:158","nodes":[],"statements":[{"expression":{"arguments":[{"id":79371,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79313,"src":"1509:10:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":79372,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79316,"src":"1521:12:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79370,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41745,"src":"1496:12:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":79373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1496:38:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79374,"nodeType":"ExpressionStatement","src":"1496:38:158"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":79375,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42315,"src":"1544:20:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":79376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1544:22:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79377,"nodeType":"ExpressionStatement","src":"1544:22:158"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":79379,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41320,"src":"1591:5:158","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":79380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1591:7:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":79378,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"1576:14:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":79381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1576:23:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79382,"nodeType":"ExpressionStatement","src":"1576:23:158"},{"expression":{"arguments":[{"id":79384,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79313,"src":"1628:10:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79383,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42412,"src":"1609:18:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":79385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1609:30:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79386,"nodeType":"ExpressionStatement","src":"1609:30:158"}]},"documentation":{"id":79362,"nodeType":"StructuredDocumentation","src":"1376:47:158","text":"@custom:oz-upgrades-validate-as-initializer"},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":79365,"kind":"modifierInvocation","modifierName":{"id":79364,"name":"onlyOwner","nameLocations":["1459:9:158"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"1459:9:158"},"nodeType":"ModifierInvocation","src":"1459:9:158"},{"arguments":[{"hexValue":"32","id":79367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1483:1:158","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":79368,"kind":"modifierInvocation","modifierName":{"id":79366,"name":"reinitializer","nameLocations":["1469:13:158"],"nodeType":"IdentifierPath","referencedDeclaration":41564,"src":"1469:13:158"},"nodeType":"ModifierInvocation","src":"1469:16:158"}],"name":"reinitialize","nameLocation":"1437:12:158","parameters":{"id":79363,"nodeType":"ParameterList","parameters":[],"src":"1449:2:158"},"returnParameters":{"id":79369,"nodeType":"ParameterList","parameters":[],"src":"1486:0:158"},"scope":79413,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":79397,"nodeType":"FunctionDefinition","src":"1652:83:158","nodes":[],"body":{"id":79396,"nodeType":"Block","src":"1709:26:158","nodes":[],"statements":[{"expression":{"hexValue":"3132","id":79394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1726:2:158","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"functionReturnParameters":79393,"id":79395,"nodeType":"Return","src":"1719:9:158"}]},"baseFunctions":[41814],"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1661:8:158","overrides":{"id":79390,"nodeType":"OverrideSpecifier","overrides":[],"src":"1684:8:158"},"parameters":{"id":79389,"nodeType":"ParameterList","parameters":[],"src":"1669:2:158"},"returnParameters":{"id":79393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79392,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":79397,"src":"1702:5:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":79391,"name":"uint8","nodeType":"ElementaryTypeName","src":"1702:5:158","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1701:7:158"},"scope":79413,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":79412,"nodeType":"FunctionDefinition","src":"1741:93:158","nodes":[],"body":{"id":79411,"nodeType":"Block","src":"1800:34:158","nodes":[],"statements":[{"expression":{"arguments":[{"id":79407,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79399,"src":"1816:2:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":79408,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79401,"src":"1820:6:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":79406,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42126,"src":"1810:5:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":79409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1810:17:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79410,"nodeType":"ExpressionStatement","src":"1810:17:158"}]},"functionSelector":"40c10f19","implemented":true,"kind":"function","modifiers":[{"id":79404,"kind":"modifierInvocation","modifierName":{"id":79403,"name":"onlyOwner","nameLocations":["1790:9:158"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"1790:9:158"},"nodeType":"ModifierInvocation","src":"1790:9:158"}],"name":"mint","nameLocation":"1750:4:158","parameters":{"id":79402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79399,"mutability":"mutable","name":"to","nameLocation":"1763:2:158","nodeType":"VariableDeclaration","scope":79412,"src":"1755:10:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79398,"name":"address","nodeType":"ElementaryTypeName","src":"1755:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":79401,"mutability":"mutable","name":"amount","nameLocation":"1775:6:158","nodeType":"VariableDeclaration","scope":79412,"src":"1767:14:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79400,"name":"uint256","nodeType":"ElementaryTypeName","src":"1767:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1754:28:158"},"returnParameters":{"id":79405,"nodeType":"ParameterList","parameters":[],"src":"1800:0:158"},"scope":79413,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":79301,"name":"Initializable","nameLocations":["664:13:158"],"nodeType":"IdentifierPath","referencedDeclaration":41677,"src":"664:13:158"},"id":79302,"nodeType":"InheritanceSpecifier","src":"664:13:158"},{"baseName":{"id":79303,"name":"ERC20Upgradeable","nameLocations":["683:16:158"],"nodeType":"IdentifierPath","referencedDeclaration":42294,"src":"683:16:158"},"id":79304,"nodeType":"InheritanceSpecifier","src":"683:16:158"},{"baseName":{"id":79305,"name":"ERC20BurnableUpgradeable","nameLocations":["705:24:158"],"nodeType":"IdentifierPath","referencedDeclaration":42356,"src":"705:24:158"},"id":79306,"nodeType":"InheritanceSpecifier","src":"705:24:158"},{"baseName":{"id":79307,"name":"OwnableUpgradeable","nameLocations":["735:18:158"],"nodeType":"IdentifierPath","referencedDeclaration":41409,"src":"735:18:158"},"id":79308,"nodeType":"InheritanceSpecifier","src":"735:18:158"},{"baseName":{"id":79309,"name":"ERC20PermitUpgradeable","nameLocations":["759:22:158"],"nodeType":"IdentifierPath","referencedDeclaration":42525,"src":"759:22:158"},"id":79310,"nodeType":"InheritanceSpecifier","src":"759:22:158"}],"canonicalName":"WrappedVara","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[79413,42525,42785,43343,43750,45649,41409,42356,42294,43792,45613,45587,42571,41677],"name":"WrappedVara","nameLocation":"645:11:158","scope":79414,"usedErrors":[41245,41250,41426,41429,42391,42398,42688,43762,43767,43772,43781,43786,43791,49452,49457,49462],"usedEvents":[41256,41434,43730,45521,45530]}],"license":"UNLICENSED"},"id":158} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnFrom","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460aa575f51602061222b5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161217c90816100af8239f35b6001600160401b0319166001600160401b039081175f51602061222b5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146116f0578063095ea7b3146116ca57806318160ddd146116a157806323b872dd14611669578063313ce5671461164e5780633644e5151461162c57806340c10f19146115ef57806342966c68146115d25780636c2eb35014610e8f57806370a0823114610e4b578063715018a614610de457806379cc679014610db45780637ecebe0014610d5e57806384b0196e14610c3a5780638da5cb5b14610c0657806395d89b4114610b0c578063a9059cbb14610adb578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6117d1565b610124611c11565b611a0b565b005b5f80fd5b3461012b57604036600319011261012b576101486117d1565b6101596101536117e7565b916119d3565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6117d1565b6101976117e7565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611835565b519020610263611e1f565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611eb1565b90929192611f3e565b6001600160a01b03168481036102ae57506101299350611cfa565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16117d1565b5f51602061213c5f395f51905f52549067ffffffffffffffff60ff8360401c1615921680159081610ad3575b6001149081610ac9575b159081610ac0575b50610ab15781600167ffffffffffffffff195f51602061213c5f395f51905f525416175f51602061213c5f395f51905f5255610a7c575b60405191610375604084611835565b600c83526b57726170706564205661726160a01b60208401526040519161039d604084611835565b6005835264575641524160d81b60208401526103b7611e86565b6103bf611e86565b835167ffffffffffffffff8111610789576103e75f51602061203c5f395f51905f52546117fd565b601f8111610a0d575b50602094601f8211600114610992579481929394955f92610987575b50508160011b915f199060031b1c1916175f51602061203c5f395f51905f52555b825167ffffffffffffffff8111610789576104555f51602061209c5f395f51905f52546117fd565b601f8111610918575b506020601f821160011461089d57819293945f92610892575b50508160011b915f199060031b1c1916175f51602061209c5f395f51905f52555b6104a0611e86565b6104a8611e86565b6104b0611e86565b6104b981611a0b565b604051916104c8604084611835565b600c83526b57726170706564205661726160a01b60208401526104e9611e86565b604051916104f8604084611835565b60018352603160f81b602084015261050e611e86565b835167ffffffffffffffff8111610789576105365f51602061207c5f395f51905f52546117fd565b601f8111610823575b50602094601f82116001146107a8579481929394955f9261079d575b50508160011b915f199060031b1c1916175f51602061207c5f395f51905f52555b825167ffffffffffffffff8111610789576105a45f5160206120fc5f395f51905f52546117fd565b601f811161071a575b506020601f821160011461069f57819293945f92610694575b50508160011b915f199060031b1c1916175f5160206120fc5f395f51905f52555b5f5f51602061211c5f395f51905f528190555f51602061215c5f395f51905f52556001600160a01b0381161561068157670de0b6b3a764000061062991611d5d565b61062f57005b60ff60401b195f51602061213c5f395f51905f5254165f51602061213c5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105c6565b601f198216905f5160206120fc5f395f51905f525f52805f20915f5b818110610702575095836001959697106106ea575b505050811b015f5160206120fc5f395f51905f52556105e7565b01515f1960f88460031b161c191690558480806106d0565b9192602060018192868b0151815501940192016106bb565b5f5160206120fc5f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061077f575b601f0160051c01905b81811061077457506105ad565b5f8155600101610767565b909150819061075e565b634e487b7160e01b5f52604160045260245ffd5b01519050858061055b565b601f198216955f51602061207c5f395f51905f525f52805f20915f5b88811061080b575083600195969798106107f3575b505050811b015f51602061207c5f395f51905f525561057c565b01515f1960f88460031b161c191690558580806107d9565b919260206001819286850151815501940192016107c4565b5f51602061207c5f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c81019160208410610888575b601f0160051c01905b81811061087d575061053f565b5f8155600101610870565b9091508190610867565b015190508480610477565b601f198216905f51602061209c5f395f51905f525f52805f20915f5b818110610900575095836001959697106108e8575b505050811b015f51602061209c5f395f51905f5255610498565b01515f1960f88460031b161c191690558480806108ce565b9192602060018192868b0151815501940192016108b9565b5f51602061209c5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061097d575b601f0160051c01905b818110610972575061045e565b5f8155600101610965565b909150819061095c565b01519050858061040c565b601f198216955f51602061203c5f395f51905f525f52805f20915f5b8881106109f5575083600195969798106109dd575b505050811b015f51602061203c5f395f51905f525561042d565b01515f1960f88460031b161c191690558580806109c3565b919260206001819286850151815501940192016109ae565b5f51602061203c5f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a72575b601f0160051c01905b818110610a6757506103f0565b5f8155600101610a5a565b9091508190610a51565b6801000000000000000060ff60401b195f51602061213c5f395f51905f525416175f51602061213c5f395f51905f5255610366565b63f92ee8a960e01b5f5260045ffd5b9050158361032f565b303b159150610327565b83915061031d565b3461012b57604036600319011261012b57610b01610af76117d1565b6024359033611b40565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f51602061209c5f395f51905f5254610b38816117fd565b8084529060018116908115610be25750600114610b78575b610b7483610b6081850382611835565b6040519182916020835260208301906117ad565b0390f35b5f51602061209c5f395f51905f525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bc857509091508101602001610b60610b50565b919260018160209254838588010152019101909291610bb0565b60ff191660208086019190915291151560051b84019091019150610b609050610b50565b3461012b575f36600319011261012b575f5160206120bc5f395f51905f52546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b575f51602061211c5f395f51905f52541580610d48575b15610d0b57610caf610c70611857565b610c78611926565b6020610cbd60405192610c8b8385611835565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906117ad565b9085820360408701526117ad565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610cf457505050500390f35b835185528695509381019392810192600101610ce5565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b505f51602061215c5f395f51905f525415610c60565b3461012b57602036600319011261012b57610d776117d1565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610dd06117d1565b60243590610ddf823383611a7c565b611c44565b3461012b575f36600319011261012b57610dfc611c11565b5f5160206120bc5f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b03610e6c6117d1565b165f525f51602061205c5f395f51905f52602052602060405f2054604051908152f35b3461012b575f36600319011261012b57610ea7611c11565b5f51602061213c5f395f51905f525460ff8160401c169081156115bc575b50610ab1575f51602061213c5f395f51905f52805468ffffffffffffffffff1916680100000000000000021790556040805190610f029082611835565b600c81526b57726170706564205661726160a01b6020820152604051610f29604082611835565b6005815264575641524160d81b6020820152610f43611e86565b610f4b611e86565b815167ffffffffffffffff811161078957610f735f51602061203c5f395f51905f52546117fd565b601f811161154d575b50602092601f82116001146114d457928192935f926114c9575b50508160011b915f199060031b1c1916175f51602061203c5f395f51905f52555b805167ffffffffffffffff811161078957610fdf5f51602061209c5f395f51905f52546117fd565b601f811161145a575b50602091601f82116001146113e2579181925f926113d7575b50508160011b915f199060031b1c1916175f51602061209c5f395f51905f52555b61102a611e86565b5f5160206120bc5f395f51905f5254611056906001600160a01b031661104e611e86565b610124611e86565b604051611064604082611835565b600c81526b57726170706564205661726160a01b6020820152611085611e86565b604051611093604082611835565b60018152603160f81b60208201526110a9611e86565b815167ffffffffffffffff8111610789576110d15f51602061207c5f395f51905f52546117fd565b601f8111611368575b50602092601f82116001146112ef57928192935f926112e4575b50508160011b915f199060031b1c1916175f51602061207c5f395f51905f52555b805167ffffffffffffffff81116107895761113d5f5160206120fc5f395f51905f52546117fd565b601f8111611275575b50602091601f82116001146111fd579181925f926111f2575b50508160011b915f199060031b1c1916175f5160206120fc5f395f51905f52555b5f5f51602061211c5f395f51905f52555f5f51602061215c5f395f51905f525560ff60401b195f51602061213c5f395f51905f5254165f51602061213c5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b01519050828061115f565b601f198216925f5160206120fc5f395f51905f525f52805f20915f5b85811061125d57508360019510611245575b505050811b015f5160206120fc5f395f51905f5255611180565b01515f1960f88460031b161c1916905582808061122b565b91926020600181928685015181550194019201611219565b5f5160206120fc5f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c810191602084106112da575b601f0160051c01905b8181106112cf5750611146565b5f81556001016112c2565b90915081906112b9565b0151905083806110f4565b601f198216935f51602061207c5f395f51905f525f52805f20915f5b8681106113505750836001959610611338575b505050811b015f51602061207c5f395f51905f5255611115565b01515f1960f88460031b161c1916905583808061131e565b9192602060018192868501518155019401920161130b565b5f51602061207c5f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106113cd575b601f0160051c01905b8181106113c257506110da565b5f81556001016113b5565b90915081906113ac565b015190508280611001565b601f198216925f51602061209c5f395f51905f525f52805f20915f5b8581106114425750836001951061142a575b505050811b015f51602061209c5f395f51905f5255611022565b01515f1960f88460031b161c19169055828080611410565b919260206001819286850151815501940192016113fe565b5f51602061209c5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c810191602084106114bf575b601f0160051c01905b8181106114b45750610fe8565b5f81556001016114a7565b909150819061149e565b015190508380610f96565b601f198216935f51602061203c5f395f51905f525f52805f20915f5b868110611535575083600195961061151d575b505050811b015f51602061203c5f395f51905f5255610fb7565b01515f1960f88460031b161c19169055838080611503565b919260206001819286850151815501940192016114f0565b5f51602061203c5f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c810191602084106115b2575b601f0160051c01905b8181106115a75750610f7c565b5f815560010161159a565b9091508190611591565b6002915067ffffffffffffffff16101581610ec5565b3461012b57602036600319011261012b5761012960043533611c44565b3461012b57604036600319011261012b576116086117d1565b611610611c11565b6001600160a01b03811615610681576101299060243590611d5d565b3461012b575f36600319011261012b576020611646611e1f565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b016116856117d1565b61168d6117e7565b6044359161169c833383611a7c565b611b40565b3461012b575f36600319011261012b5760205f5160206120dc5f395f51905f5254604051908152f35b3461012b57604036600319011261012b57610b016116e66117d1565b6024359033611cfa565b3461012b575f36600319011261012b576040515f5f51602061203c5f395f51905f525461171c816117fd565b8084529060018116908115610be2575060011461174357610b7483610b6081850382611835565b5f51602061203c5f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b80821061179357509091508101602001610b60610b50565b91926001816020925483858801015201910190929161177b565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c9216801561182b575b602083101461181757565b634e487b7160e01b5f52602260045260245ffd5b91607f169161180c565b90601f8019910116810190811067ffffffffffffffff82111761078957604052565b604051905f825f51602061207c5f395f51905f525491611876836117fd565b8083529260018116908115611907575060011461189c575b61189a92500383611835565b565b505f51602061207c5f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106118eb57505090602061189a9282010161188e565b60209193508060019154838589010152019101909184926118d3565b6020925061189a94915060ff191682840152151560051b82010161188e565b604051905f825f5160206120fc5f395f51905f525491611945836117fd565b808352926001811690811561190757506001146119685761189a92500383611835565b505f5160206120fc5f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106119b757505090602061189a9282010161188e565b602091935080600191548385890101520191019091849261199f565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b03168015611a69575f5160206120bc5f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b9190611a87836119d3565b60018060a01b0382165f5260205260405f2054925f198410611aaa575b50505050565b828410611b1d576001600160a01b03811615611b0a576001600160a01b03821615611af757611ad8906119d3565b9060018060a01b03165f5260205260405f20910390555f808080611aa4565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b0316908115611bfe576001600160a01b031691821561068157815f525f51602061205c5f395f51905f5260205260405f2054818110611be557817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f51602061205c5f395f51905f5284520360405f2055845f525f51602061205c5f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f5160206120bc5f395f51905f52546001600160a01b03163303611c3157565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b03168015611bfe57805f525f51602061205c5f395f51905f5260205260405f2054838110611ce0576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f51602061205c5f395f51905f528452036040862055805f5160206120dc5f395f51905f5254035f5160206120dc5f395f51905f5255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b038316918215611b0a576001600160a01b0316928315611af7577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591611d496020926119d3565b855f5282528060405f2055604051908152a3565b5f5160206120dc5f395f51905f525490828201809211611e0b575f5160206120dc5f395f51905f52919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060209084611de957805f5160206120dc5f395f51905f5254035f5160206120dc5f395f51905f52555b604051908152a3565b8484525f51602061205c5f395f51905f52825260408420818154019055611de0565b634e487b7160e01b5f52601160045260245ffd5b611e27611fb2565b611e2f612009565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611e8060c082611835565b51902090565b60ff5f51602061213c5f395f51905f525460401c1615611ea257565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611f33579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611f28575f516001600160a01b03811615611f1e57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004811015611f9e5780611f50575050565b60018103611f675763f645eedf60e01b5f5260045ffd5b60028103611f82575063fce698f760e01b5f5260045260245ffd5b600314611f8c5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b611fba611857565b8051908115611fca576020012090565b50505f51602061211c5f395f51905f52548015611fe45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b612011611926565b8051908115612021576020012090565b50505f51602061215c5f395f51905f52548015611fe4579056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"636:1200:158:-:0;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;7894:76:30;;-1:-1:-1;;;;;;;;;;;636:1200:158;;7983:34:30;7979:146;;-1:-1:-1;636:1200:158;;;;;;;;;7979:146:30;-1:-1:-1;;;;;;636:1200:158;-1:-1:-1;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;8085:29:30;;636:1200:158;;8085:29:30;7979:146;;;;7894:76;7936:23;;;-1:-1:-1;7936:23:30;;-1:-1:-1;7936:23:30;636:1200:158;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146116f0578063095ea7b3146116ca57806318160ddd146116a157806323b872dd14611669578063313ce5671461164e5780633644e5151461162c57806340c10f19146115ef57806342966c68146115d25780636c2eb35014610e8f57806370a0823114610e4b578063715018a614610de457806379cc679014610db45780637ecebe0014610d5e57806384b0196e14610c3a5780638da5cb5b14610c0657806395d89b4114610b0c578063a9059cbb14610adb578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6117d1565b610124611c11565b611a0b565b005b5f80fd5b3461012b57604036600319011261012b576101486117d1565b6101596101536117e7565b916119d3565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6117d1565b6101976117e7565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611835565b519020610263611e1f565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611eb1565b90929192611f3e565b6001600160a01b03168481036102ae57506101299350611cfa565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16117d1565b5f51602061213c5f395f51905f52549067ffffffffffffffff60ff8360401c1615921680159081610ad3575b6001149081610ac9575b159081610ac0575b50610ab15781600167ffffffffffffffff195f51602061213c5f395f51905f525416175f51602061213c5f395f51905f5255610a7c575b60405191610375604084611835565b600c83526b57726170706564205661726160a01b60208401526040519161039d604084611835565b6005835264575641524160d81b60208401526103b7611e86565b6103bf611e86565b835167ffffffffffffffff8111610789576103e75f51602061203c5f395f51905f52546117fd565b601f8111610a0d575b50602094601f8211600114610992579481929394955f92610987575b50508160011b915f199060031b1c1916175f51602061203c5f395f51905f52555b825167ffffffffffffffff8111610789576104555f51602061209c5f395f51905f52546117fd565b601f8111610918575b506020601f821160011461089d57819293945f92610892575b50508160011b915f199060031b1c1916175f51602061209c5f395f51905f52555b6104a0611e86565b6104a8611e86565b6104b0611e86565b6104b981611a0b565b604051916104c8604084611835565b600c83526b57726170706564205661726160a01b60208401526104e9611e86565b604051916104f8604084611835565b60018352603160f81b602084015261050e611e86565b835167ffffffffffffffff8111610789576105365f51602061207c5f395f51905f52546117fd565b601f8111610823575b50602094601f82116001146107a8579481929394955f9261079d575b50508160011b915f199060031b1c1916175f51602061207c5f395f51905f52555b825167ffffffffffffffff8111610789576105a45f5160206120fc5f395f51905f52546117fd565b601f811161071a575b506020601f821160011461069f57819293945f92610694575b50508160011b915f199060031b1c1916175f5160206120fc5f395f51905f52555b5f5f51602061211c5f395f51905f528190555f51602061215c5f395f51905f52556001600160a01b0381161561068157670de0b6b3a764000061062991611d5d565b61062f57005b60ff60401b195f51602061213c5f395f51905f5254165f51602061213c5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105c6565b601f198216905f5160206120fc5f395f51905f525f52805f20915f5b818110610702575095836001959697106106ea575b505050811b015f5160206120fc5f395f51905f52556105e7565b01515f1960f88460031b161c191690558480806106d0565b9192602060018192868b0151815501940192016106bb565b5f5160206120fc5f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061077f575b601f0160051c01905b81811061077457506105ad565b5f8155600101610767565b909150819061075e565b634e487b7160e01b5f52604160045260245ffd5b01519050858061055b565b601f198216955f51602061207c5f395f51905f525f52805f20915f5b88811061080b575083600195969798106107f3575b505050811b015f51602061207c5f395f51905f525561057c565b01515f1960f88460031b161c191690558580806107d9565b919260206001819286850151815501940192016107c4565b5f51602061207c5f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c81019160208410610888575b601f0160051c01905b81811061087d575061053f565b5f8155600101610870565b9091508190610867565b015190508480610477565b601f198216905f51602061209c5f395f51905f525f52805f20915f5b818110610900575095836001959697106108e8575b505050811b015f51602061209c5f395f51905f5255610498565b01515f1960f88460031b161c191690558480806108ce565b9192602060018192868b0151815501940192016108b9565b5f51602061209c5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061097d575b601f0160051c01905b818110610972575061045e565b5f8155600101610965565b909150819061095c565b01519050858061040c565b601f198216955f51602061203c5f395f51905f525f52805f20915f5b8881106109f5575083600195969798106109dd575b505050811b015f51602061203c5f395f51905f525561042d565b01515f1960f88460031b161c191690558580806109c3565b919260206001819286850151815501940192016109ae565b5f51602061203c5f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a72575b601f0160051c01905b818110610a6757506103f0565b5f8155600101610a5a565b9091508190610a51565b6801000000000000000060ff60401b195f51602061213c5f395f51905f525416175f51602061213c5f395f51905f5255610366565b63f92ee8a960e01b5f5260045ffd5b9050158361032f565b303b159150610327565b83915061031d565b3461012b57604036600319011261012b57610b01610af76117d1565b6024359033611b40565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f51602061209c5f395f51905f5254610b38816117fd565b8084529060018116908115610be25750600114610b78575b610b7483610b6081850382611835565b6040519182916020835260208301906117ad565b0390f35b5f51602061209c5f395f51905f525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bc857509091508101602001610b60610b50565b919260018160209254838588010152019101909291610bb0565b60ff191660208086019190915291151560051b84019091019150610b609050610b50565b3461012b575f36600319011261012b575f5160206120bc5f395f51905f52546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b575f51602061211c5f395f51905f52541580610d48575b15610d0b57610caf610c70611857565b610c78611926565b6020610cbd60405192610c8b8385611835565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906117ad565b9085820360408701526117ad565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610cf457505050500390f35b835185528695509381019392810192600101610ce5565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b505f51602061215c5f395f51905f525415610c60565b3461012b57602036600319011261012b57610d776117d1565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610dd06117d1565b60243590610ddf823383611a7c565b611c44565b3461012b575f36600319011261012b57610dfc611c11565b5f5160206120bc5f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b03610e6c6117d1565b165f525f51602061205c5f395f51905f52602052602060405f2054604051908152f35b3461012b575f36600319011261012b57610ea7611c11565b5f51602061213c5f395f51905f525460ff8160401c169081156115bc575b50610ab1575f51602061213c5f395f51905f52805468ffffffffffffffffff1916680100000000000000021790556040805190610f029082611835565b600c81526b57726170706564205661726160a01b6020820152604051610f29604082611835565b6005815264575641524160d81b6020820152610f43611e86565b610f4b611e86565b815167ffffffffffffffff811161078957610f735f51602061203c5f395f51905f52546117fd565b601f811161154d575b50602092601f82116001146114d457928192935f926114c9575b50508160011b915f199060031b1c1916175f51602061203c5f395f51905f52555b805167ffffffffffffffff811161078957610fdf5f51602061209c5f395f51905f52546117fd565b601f811161145a575b50602091601f82116001146113e2579181925f926113d7575b50508160011b915f199060031b1c1916175f51602061209c5f395f51905f52555b61102a611e86565b5f5160206120bc5f395f51905f5254611056906001600160a01b031661104e611e86565b610124611e86565b604051611064604082611835565b600c81526b57726170706564205661726160a01b6020820152611085611e86565b604051611093604082611835565b60018152603160f81b60208201526110a9611e86565b815167ffffffffffffffff8111610789576110d15f51602061207c5f395f51905f52546117fd565b601f8111611368575b50602092601f82116001146112ef57928192935f926112e4575b50508160011b915f199060031b1c1916175f51602061207c5f395f51905f52555b805167ffffffffffffffff81116107895761113d5f5160206120fc5f395f51905f52546117fd565b601f8111611275575b50602091601f82116001146111fd579181925f926111f2575b50508160011b915f199060031b1c1916175f5160206120fc5f395f51905f52555b5f5f51602061211c5f395f51905f52555f5f51602061215c5f395f51905f525560ff60401b195f51602061213c5f395f51905f5254165f51602061213c5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b01519050828061115f565b601f198216925f5160206120fc5f395f51905f525f52805f20915f5b85811061125d57508360019510611245575b505050811b015f5160206120fc5f395f51905f5255611180565b01515f1960f88460031b161c1916905582808061122b565b91926020600181928685015181550194019201611219565b5f5160206120fc5f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c810191602084106112da575b601f0160051c01905b8181106112cf5750611146565b5f81556001016112c2565b90915081906112b9565b0151905083806110f4565b601f198216935f51602061207c5f395f51905f525f52805f20915f5b8681106113505750836001959610611338575b505050811b015f51602061207c5f395f51905f5255611115565b01515f1960f88460031b161c1916905583808061131e565b9192602060018192868501518155019401920161130b565b5f51602061207c5f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106113cd575b601f0160051c01905b8181106113c257506110da565b5f81556001016113b5565b90915081906113ac565b015190508280611001565b601f198216925f51602061209c5f395f51905f525f52805f20915f5b8581106114425750836001951061142a575b505050811b015f51602061209c5f395f51905f5255611022565b01515f1960f88460031b161c19169055828080611410565b919260206001819286850151815501940192016113fe565b5f51602061209c5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c810191602084106114bf575b601f0160051c01905b8181106114b45750610fe8565b5f81556001016114a7565b909150819061149e565b015190508380610f96565b601f198216935f51602061203c5f395f51905f525f52805f20915f5b868110611535575083600195961061151d575b505050811b015f51602061203c5f395f51905f5255610fb7565b01515f1960f88460031b161c19169055838080611503565b919260206001819286850151815501940192016114f0565b5f51602061203c5f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c810191602084106115b2575b601f0160051c01905b8181106115a75750610f7c565b5f815560010161159a565b9091508190611591565b6002915067ffffffffffffffff16101581610ec5565b3461012b57602036600319011261012b5761012960043533611c44565b3461012b57604036600319011261012b576116086117d1565b611610611c11565b6001600160a01b03811615610681576101299060243590611d5d565b3461012b575f36600319011261012b576020611646611e1f565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b016116856117d1565b61168d6117e7565b6044359161169c833383611a7c565b611b40565b3461012b575f36600319011261012b5760205f5160206120dc5f395f51905f5254604051908152f35b3461012b57604036600319011261012b57610b016116e66117d1565b6024359033611cfa565b3461012b575f36600319011261012b576040515f5f51602061203c5f395f51905f525461171c816117fd565b8084529060018116908115610be2575060011461174357610b7483610b6081850382611835565b5f51602061203c5f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b80821061179357509091508101602001610b60610b50565b91926001816020925483858801015201910190929161177b565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c9216801561182b575b602083101461181757565b634e487b7160e01b5f52602260045260245ffd5b91607f169161180c565b90601f8019910116810190811067ffffffffffffffff82111761078957604052565b604051905f825f51602061207c5f395f51905f525491611876836117fd565b8083529260018116908115611907575060011461189c575b61189a92500383611835565b565b505f51602061207c5f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106118eb57505090602061189a9282010161188e565b60209193508060019154838589010152019101909184926118d3565b6020925061189a94915060ff191682840152151560051b82010161188e565b604051905f825f5160206120fc5f395f51905f525491611945836117fd565b808352926001811690811561190757506001146119685761189a92500383611835565b505f5160206120fc5f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106119b757505090602061189a9282010161188e565b602091935080600191548385890101520191019091849261199f565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b03168015611a69575f5160206120bc5f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b9190611a87836119d3565b60018060a01b0382165f5260205260405f2054925f198410611aaa575b50505050565b828410611b1d576001600160a01b03811615611b0a576001600160a01b03821615611af757611ad8906119d3565b9060018060a01b03165f5260205260405f20910390555f808080611aa4565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b0316908115611bfe576001600160a01b031691821561068157815f525f51602061205c5f395f51905f5260205260405f2054818110611be557817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f51602061205c5f395f51905f5284520360405f2055845f525f51602061205c5f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f5160206120bc5f395f51905f52546001600160a01b03163303611c3157565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b03168015611bfe57805f525f51602061205c5f395f51905f5260205260405f2054838110611ce0576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f51602061205c5f395f51905f528452036040862055805f5160206120dc5f395f51905f5254035f5160206120dc5f395f51905f5255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b038316918215611b0a576001600160a01b0316928315611af7577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591611d496020926119d3565b855f5282528060405f2055604051908152a3565b5f5160206120dc5f395f51905f525490828201809211611e0b575f5160206120dc5f395f51905f52919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060209084611de957805f5160206120dc5f395f51905f5254035f5160206120dc5f395f51905f52555b604051908152a3565b8484525f51602061205c5f395f51905f52825260408420818154019055611de0565b634e487b7160e01b5f52601160045260245ffd5b611e27611fb2565b611e2f612009565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611e8060c082611835565b51902090565b60ff5f51602061213c5f395f51905f525460401c1615611ea257565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611f33579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611f28575f516001600160a01b03811615611f1e57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004811015611f9e5780611f50575050565b60018103611f675763f645eedf60e01b5f5260045ffd5b60028103611f82575063fce698f760e01b5f5260045260245ffd5b600314611f8c5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b611fba611857565b8051908115611fca576020012090565b50505f51602061211c5f395f51905f52548015611fe45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b612011611926565b8051908115612021576020012090565b50505f51602061215c5f395f51905f52548015611fe4579056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101","sourceMap":"636:1200:158:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;2357:1:29;636:1200:158;;:::i;:::-;2303:62:29;;:::i;:::-;2357:1;:::i;:::-;636:1200:158;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;4771:20:31;636:1200:158;;:::i;:::-;4771:20:31;;:::i;:::-;:29;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;2286:15:33;;:26;2282:97;;7051:25:74;7105:8;636:1200:158;;;;;;;;;;;;972:64:36;636:1200:158;;;;;;;;;;;;;;;;2420:78:33;636:1200:158;2420:78:33;;636:1200:158;1279:95:33;636:1200:158;;1279:95:33;636:1200:158;1279:95:33;;636:1200:158;;;;;;;;;1279:95:33;;636:1200:158;1279:95:33;636:1200:158;1279:95:33;;636:1200:158;;1279:95:33;;636:1200:158;;1279:95:33;;636:1200:158;;2420:78:33;;;636:1200:158;2420:78:33;;:::i;:::-;636:1200:158;2410:89:33;;3980:23:39;;:::i;:::-;3993:249:77;636:1200:158;3993:249:77;;-1:-1:-1;;;3993:249:77;;;;;;;;;;636:1200:158;;;3993:249:77;636:1200:158;;3993:249:77;;7051:25:74;:::i;:::-;7105:8;;;;;:::i;:::-;-1:-1:-1;;;;;636:1200:158;2623:15:33;;;2619:88;;10021:4:31;;;;;:::i;2619:88:33:-;2661:35;;;;;636:1200:158;2661:35:33;636:1200:158;;;;;;2661:35:33;2282:97;2335:33;;;;636:1200:158;2335:33:33;636:1200:158;;;;2335:33:33;636:1200:158;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;4301:16:30;636:1200:158;;4724:16:30;;:34;;;;636:1200:158;4803:1:30;4788:16;:50;;;;636:1200:158;4853:13:30;:30;;;;636:1200:158;4849:91:30;;;636:1200:158;4803:1:30;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;4977:67:30;;636:1200:158;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;636:1200:158;;;;;;;;;;;:::i;:::-;825:14;636:1200;;-1:-1:-1;;;636:1200:158;825:14;;;6891:76:30;;:::i;:::-;;;:::i;:::-;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;6891:76:30;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;6959:1;;;:::i;:::-;636:1200:158;;;;;;;:::i;:::-;;;;-1:-1:-1;;;636:1200:158;;;;6891:76:30;;:::i;:::-;636:1200:158;;;;;;;:::i;:::-;6591:4:30;636:1200:158;;-1:-1:-1;;;636:1200:158;;;;6891:76:30;;:::i;:::-;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;-1:-1:-1;;;;;636:1200:158;;8707:21:31;8703:91;;945:9:158;8832:5:31;;;:::i;:::-;5064:101:30;;636:1200:158;5064:101:30;-1:-1:-1;;;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;5140:14:30;636:1200:158;;;4803:1:30;636:1200:158;;5140:14:30;636:1200:158;8703:91:31;8751:32;;;636:1200:158;8751:32:31;636:1200:158;;;;;8751:32:31;636:1200:158;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;4803:1:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;4977:67:30;636:1200:158;-1:-1:-1;;;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;4977:67:30;;4849:91;6496:23;;;636:1200:158;4906:23:30;636:1200:158;;4906:23:30;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:30;;4724:34;;;-1:-1:-1;4724:34:30;;636:1200:158;;;;;;-1:-1:-1;;636:1200:158;;;;4545:5:31;636:1200:158;;:::i;:::-;;;966:10:34;;4545:5:31;:::i;:::-;636:1200:158;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;;636:1200:158;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;636:1200:158;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;5647:18:39;:43;;;636:1200:158;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5835:13:39;636:1200:158;;;;5870:4:39;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;-1:-1:-1;;;636:1200:158;;;;;;;;;;;;-1:-1:-1;;;636:1200:158;;;;;;;5647:43:39;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;5669:21:39;5647:43;;636:1200:158;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;;;;;;;;;972:64:36;636:1200:158;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;1479:5:32;636:1200:158;;:::i;:::-;;;966:10:34;1448:5:32;966:10:34;;1448:5:32;;:::i;:::-;1479;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;636:1200:158;;;;;;;-1:-1:-1;;;;;636:1200:158;3975:40:29;636:1200:158;;3975:40:29;636:1200:158;;;;;;;-1:-1:-1;;636:1200:158;;;;-1:-1:-1;;;;;636:1200:158;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;6429:44:30;;;;;636:1200:158;6425:105:30;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;636:1200:158;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;636:1200:158;;;;;;;;;;:::i;:::-;825:14;636:1200;;-1:-1:-1;;;636:1200:158;825:14;;;6891:76:30;;:::i;:::-;;;:::i;:::-;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;6891:76:30;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;6959:1:30;;-1:-1:-1;;;;;636:1200:158;6891:76:30;;:::i;:::-;;;:::i;6959:1::-;636:1200:158;;;;;;:::i;:::-;;;;-1:-1:-1;;;636:1200:158;;;;6891:76:30;;:::i;:::-;636:1200:158;;;;;;:::i;:::-;6591:4:30;636:1200:158;;-1:-1:-1;;;636:1200:158;;;;6891:76:30;;:::i;:::-;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;2581:7:31;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;-1:-1:-1;;;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;6654:20:30;636:1200:158;;;1483:1;636:1200;;6654:20:30;636:1200:158;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;2581:7:31;636:1200:158;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;825:14;636:1200;;;;;;;;;;;;825:14;636:1200;;;;;;;;;;;;;;;;6591:4:30;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;6429:44:30;1483:1:158;636:1200;;;;6448:25:30;;6429:44;;;636:1200:158;;;;;;-1:-1:-1;;636:1200:158;;;;1005:5:32;636:1200:158;;966:10:34;1005:5:32;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;;;:::i;:::-;2303:62:29;;:::i;:::-;-1:-1:-1;;;;;636:1200:158;;8707:21:31;8703:91;;8832:5;636:1200:158;;;8832:5:31;;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;;3980:23:39;;:::i;:::-;636:1200:158;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;;;;1726:2;636:1200;;;;;;;;;-1:-1:-1;;636:1200:158;;;;6102:5:31;636:1200:158;;:::i;:::-;;;:::i;:::-;;;966:10:34;6066:5:31;966:10:34;;6066:5:31;;:::i;:::-;6102;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;-1:-1:-1;;636:1200:158;;;;10021:4:31;636:1200:158;;:::i;:::-;;;966:10:34;;10021:4:31;:::i;636:1200:158:-;;;;;;-1:-1:-1;;636:1200:158;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;;;;;;;;-1:-1:-1;;636:1200:158;;;;:::o;:::-;;;;-1:-1:-1;;;;;636:1200:158;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;636:1200:158;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;;;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;636:1200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;636:1200:158;;;;;4771:13:31;636:1200:158;;;;;;:::o;3405:215:29:-;-1:-1:-1;;;;;636:1200:158;3489:22:29;;3485:91;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;636:1200:158;;;;;;;-1:-1:-1;;;;;636:1200:158;3975:40:29;-1:-1:-1;;3975:40:29;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;636:1200:158;;3509:1:29;3534:31;11649:476:31;;;4771:20;;;:::i;:::-;636:1200:158;;;;;;;-1:-1:-1;636:1200:158;;;;-1:-1:-1;636:1200:158;;;;;11814:36:31;;11810:309;;11649:476;;;;;:::o;11810:309::-;11870:24;;;11866:130;;-1:-1:-1;;;;;636:1200:158;;11045:19:31;11041:89;;-1:-1:-1;;;;;636:1200:158;;11143:21:31;11139:90;;11238:20;;;:::i;:::-;:29;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;-1:-1:-1;636:1200:158;;;;;11810:309:31;;;;;;11139:90;11187:31;;;-1:-1:-1;11187:31:31;-1:-1:-1;11187:31:31;636:1200:158;;-1:-1:-1;11187:31:31;11041:89;11087:32;;;-1:-1:-1;11087:32:31;-1:-1:-1;11087:32:31;636:1200:158;;-1:-1:-1;11087:32:31;11866:130;11921:60;;;;;;-1:-1:-1;11921:60:31;636:1200:158;;;;;;11921:60:31;636:1200:158;;;;;;-1:-1:-1;11921:60:31;6509:300;-1:-1:-1;;;;;636:1200:158;;6592:18:31;;6588:86;;-1:-1:-1;;;;;636:1200:158;;6687:16:31;;6683:86;;636:1200:158;6608:1:31;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;6608:1:31;636:1200:158;;7513:19:31;;;7509:115;;636:1200:158;8262:25:31;636:1200:158;;;;6608:1:31;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;6608:1:31;636:1200:158;;;6608:1:31;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;6608:1:31;636:1200:158;;;;;;;;;;;;8262:25:31;6509:300::o;7509:115::-;7559:50;;;;6608:1;7559:50;;636:1200:158;;;;;;6608:1:31;7559:50;6588:86;6633:30;;;6608:1;6633:30;6608:1;6633:30;636:1200:158;;6608:1:31;6633:30;2658:162:29;-1:-1:-1;;;;;;;;;;;636:1200:158;-1:-1:-1;;;;;636:1200:158;966:10:34;2717:23:29;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:29;966:10:34;2763:40:29;636:1200:158;;-1:-1:-1;2763:40:29;9163:206:31;;;;-1:-1:-1;;;;;636:1200:158;9233:21:31;;9229:89;;636:1200:158;9252:1:31;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;9252:1:31;636:1200:158;;7513:19:31;;;7509:115;;636:1200:158;;9252:1:31;636:1200:158;;8262:25:31;636:1200:158;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;8262:25:31;9163:206::o;7509:115::-;7559:50;;;;;9252:1;7559:50;;636:1200:158;;;;;;9252:1:31;7559:50;10880:487;;-1:-1:-1;;;;;636:1200:158;;;11045:19:31;;11041:89;;-1:-1:-1;;;;;636:1200:158;;11143:21:31;;11139:90;;11319:31;11238:20;;636:1200:158;11238:20:31;;:::i;:::-;636:1200:158;-1:-1:-1;636:1200:158;;;;;-1:-1:-1;636:1200:158;;;;;;;11319:31:31;10880:487::o;7124:1170::-;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;-1:-1:-1;;;;;636:1200:158;;;;8262:25:31;;636:1200:158;;7822:16:31;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;-1:-1:-1;;;;;;;;;;;636:1200:158;7818:429:31;636:1200:158;;;;;8262:25:31;7124:1170::o;7818:429::-;636:1200:158;;;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;;;;;;;;7818:429:31;;636:1200:158;;;;;945:9;;;;;636:1200;945:9;4016:191:39;4129:17;;:::i;:::-;4148:20;;:::i;:::-;636:1200:158;;4107:92:39;;;;636:1200:158;1959:95:39;636:1200:158;;;1959:95:39;;636:1200:158;1959:95:39;;;636:1200:158;4170:13:39;1959:95;;;636:1200:158;4193:4:39;1959:95;;;636:1200:158;1959:95:39;4107:92;;;;;;:::i;:::-;636:1200:158;4097:103:39;;4016:191;:::o;7082:141:30:-;636:1200:158;-1:-1:-1;;;;;;;;;;;636:1200:158;;;;7148:18:30;7144:73;;7082:141::o;7144:73::-;7189:17;;;-1:-1:-1;7189:17:30;;-1:-1:-1;7189:17:30;5203:1551:74;;;6283:66;6270:79;;6266:164;;636:1200:158;;;;;;-1:-1:-1;636:1200:158;;;;;;;;;;;;;;;;;;;6541:24:74;;;;;;;;;-1:-1:-1;6541:24:74;-1:-1:-1;;;;;636:1200:158;;6579:20:74;6575:113;;6698:49;-1:-1:-1;6698:49:74;-1:-1:-1;5203:1551:74;:::o;6575:113::-;6615:62;-1:-1:-1;6615:62:74;6541:24;6615:62;-1:-1:-1;6615:62:74;:::o;6541:24::-;636:1200:158;;;-1:-1:-1;636:1200:158;;;;;6266:164:74;6365:54;;;6381:1;6365:54;6385:30;6365:54;;:::o;7280:532::-;636:1200:158;;;;;;7366:29:74;;;7411:7;;:::o;7362:444::-;636:1200:158;7462:38:74;;636:1200:158;;7523:23:74;;;7375:20;7523:23;636:1200:158;7375:20:74;7523:23;7458:348;7576:35;7567:44;;7576:35;;7634:46;;;;7375:20;7634:46;636:1200:158;;;7375:20:74;7634:46;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;;;7375:20;7763:32;636:1200:158;;;7375:20:74;7763:32;636:1200:158;;;;7375:20:74;636:1200:158;;;;;7375:20:74;636:1200:158;6928:687:39;636:1200:158;;:::i;:::-;;;;7100:22:39;;;;636:1200:158;;7145:22:39;7138:29;:::o;7096:513::-;-1:-1:-1;;;;;;;;;;;;;636:1200:158;7473:15:39;;;;7508:17;:::o;7469:130::-;7564:20;7571:13;7564:20;:::o;7836:723::-;636:1200:158;;:::i;:::-;;;;8017:25:39;;;;636:1200:158;;8065:25:39;8058:32;:::o;8013:540::-;-1:-1:-1;;;;;;;;;;;;;636:1200:158;8411:18:39;;;;8449:20;:::o","linkReferences":{}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","eip712Domain()":"84b0196e","initialize(address)":"c4d66de8","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"burn(uint256)\":{\"details\":\"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"reinitialize()\":{\"custom:oz-upgrades-validate-as-initializer\":\"\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WrappedVara.sol\":\"WrappedVara\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@symbioticfi/core/=lib/symbiotic-rewards/lib/core/\",\":core/=lib/symbiotic-rewards/lib/core/\",\":ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":script/=script/\",\":src/=src/\",\":symbiotic-core/=lib/symbiotic-core/\",\":symbiotic-rewards/=lib/symbiotic-rewards/\",\":test/=test/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0xfcd09c2aa8cc3f93e12545454359f901965db312bc03833daf84de0c03e05022\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07701188648d2ab83dab1037808298585264559bddf243bd8929037adcb984b0\",\"dweb:/ipfs/QmavmG5REdHCAWsZ8Cag26BCxAq27DRKGxr3uBg5ZYxQ51\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"keccak256\":\"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f\",\"dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x075302c23ba4b3a1d2a5000947ac44bbb4e84b011ecadad6f5e3fd92cd568659\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13806b62ea930e61dfba5fbbfd4eafe135bb0e2e4d55ce8cde1407d7b20a739\",\"dweb:/ipfs/QmYjt4fwBLdKrMbGHZPqdsiwsK4obFdXdKFhQBBW5ruEuC\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol\":{\"keccak256\":\"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827\",\"dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x89374b2a634f0a9c08f5891b6ecce0179bc2e0577819c787ed3268ca428c2459\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f13d2572e5bdd55e483dfac069aac47603644071616a41fce699e94368e38c13\",\"dweb:/ipfs/QmfKeyNT6vyb99vJQatPZ88UyZgXNmAiHUXSWnaR1TPE11\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0xfb223a85dd0b2175cfbbaa325a744e2cd74ecd17c3df2b77b0722f991d2725ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84bf1dea0589ec49c8d15d559cc6d86ee493048a89b2d4adb60fbe705a3d89ae\",\"dweb:/ipfs/Qmd56n556d529wk2pRMhYhm5nhMDhviwereodDikjs68w1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x2fa0657dd7b8bc75475a47f64bc04a9adb42236b15d65e6781594ea69a46c3e4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7496f42681aed94bf0142a077324e50b86046610c1724e7c12e96cf1c365914a\",\"dweb:/ipfs/QmZvhNdSAAbN4PKPdheAqwpXukUiXp3Q3TdQccDMg2NDTV\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/WrappedVara.sol\":{\"keccak256\":\"0xa098ad5acb3219b96af6e145e5bcf934a19f9b1aa084e6109e5039d02d212379\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://65dae2ef61afd86b92e59663e7bd9138faa227e39399d052843a026524c1bcb7\",\"dweb:/ipfs/QmW4LdDjeJCjH1MhJw5TjL8L2BVYfYsmcW7i7moJBoG3ub\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burnFrom"},{"inputs":[],"stateMutability":"pure","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"Returns the value of tokens owned by `account`."},"burn(uint256)":{"details":"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}."},"burnFrom(address,uint256)":{"details":"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"reinitialize()":{"custom:oz-upgrades-validate-as-initializer":""},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@symbioticfi/core/=lib/symbiotic-rewards/lib/core/","core/=lib/symbiotic-rewards/lib/core/","ds-test/=lib/symbiotic-core/lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","frost-secp256k1-evm/=lib/frost-secp256k1-evm/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","script/=script/","src/=src/","symbiotic-core/=lib/symbiotic-core/","symbiotic-rewards/=lib/symbiotic-rewards/","test/=test/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/WrappedVara.sol":"WrappedVara"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0xfcd09c2aa8cc3f93e12545454359f901965db312bc03833daf84de0c03e05022","urls":["bzz-raw://07701188648d2ab83dab1037808298585264559bddf243bd8929037adcb984b0","dweb:/ipfs/QmavmG5REdHCAWsZ8Cag26BCxAq27DRKGxr3uBg5ZYxQ51"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"keccak256":"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f","urls":["bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f","dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x075302c23ba4b3a1d2a5000947ac44bbb4e84b011ecadad6f5e3fd92cd568659","urls":["bzz-raw://c13806b62ea930e61dfba5fbbfd4eafe135bb0e2e4d55ce8cde1407d7b20a739","dweb:/ipfs/QmYjt4fwBLdKrMbGHZPqdsiwsK4obFdXdKFhQBBW5ruEuC"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol":{"keccak256":"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4","urls":["bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827","dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol":{"keccak256":"0x89374b2a634f0a9c08f5891b6ecce0179bc2e0577819c787ed3268ca428c2459","urls":["bzz-raw://f13d2572e5bdd55e483dfac069aac47603644071616a41fce699e94368e38c13","dweb:/ipfs/QmfKeyNT6vyb99vJQatPZ88UyZgXNmAiHUXSWnaR1TPE11"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol":{"keccak256":"0xfb223a85dd0b2175cfbbaa325a744e2cd74ecd17c3df2b77b0722f991d2725ee","urls":["bzz-raw://84bf1dea0589ec49c8d15d559cc6d86ee493048a89b2d4adb60fbe705a3d89ae","dweb:/ipfs/Qmd56n556d529wk2pRMhYhm5nhMDhviwereodDikjs68w1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e","urls":["bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23","dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f","urls":["bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e","dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x2fa0657dd7b8bc75475a47f64bc04a9adb42236b15d65e6781594ea69a46c3e4","urls":["bzz-raw://7496f42681aed94bf0142a077324e50b86046610c1724e7c12e96cf1c365914a","dweb:/ipfs/QmZvhNdSAAbN4PKPdheAqwpXukUiXp3Q3TdQccDMg2NDTV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4","urls":["bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e","dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631","urls":["bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59","dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6","urls":["bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3","dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"src/WrappedVara.sol":{"keccak256":"0xa098ad5acb3219b96af6e145e5bcf934a19f9b1aa084e6109e5039d02d212379","urls":["bzz-raw://65dae2ef61afd86b92e59663e7bd9138faa227e39399d052843a026524c1bcb7","dweb:/ipfs/QmW4LdDjeJCjH1MhJw5TjL8L2BVYfYsmcW7i7moJBoG3ub"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/WrappedVara.sol","id":79441,"exportedSymbols":{"ERC20BurnableUpgradeable":[42356],"ERC20PermitUpgradeable":[42525],"ERC20Upgradeable":[42294],"Initializable":[41677],"OwnableUpgradeable":[41409],"WrappedVara":[79440]},"nodeType":"SourceUnit","src":"39:1798:158","nodes":[{"id":79317,"nodeType":"PragmaDirective","src":"39:24:158","nodes":[],"literals":["solidity","^","0.8",".28"]},{"id":79319,"nodeType":"ImportDirective","src":"65:96:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":79441,"sourceUnit":41678,"symbolAliases":[{"foreign":{"id":79318,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41677,"src":"73:13:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79321,"nodeType":"ImportDirective","src":"162:102:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","nameLocation":"-1:-1:-1","scope":79441,"sourceUnit":42295,"symbolAliases":[{"foreign":{"id":79320,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42294,"src":"170:16:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79323,"nodeType":"ImportDirective","src":"265:135:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79441,"sourceUnit":42357,"symbolAliases":[{"foreign":{"id":79322,"name":"ERC20BurnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42356,"src":"278:24:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79325,"nodeType":"ImportDirective","src":"401:101:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79441,"sourceUnit":41410,"symbolAliases":[{"foreign":{"id":79324,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41409,"src":"409:18:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79327,"nodeType":"ImportDirective","src":"503:131:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol","nameLocation":"-1:-1:-1","scope":79441,"sourceUnit":42526,"symbolAliases":[{"foreign":{"id":79326,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42525,"src":"516:22:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":79440,"nodeType":"ContractDefinition","src":"636:1200:158","nodes":[{"id":79340,"nodeType":"VariableDeclaration","src":"788:51:158","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_NAME","nameLocation":"812:10:158","scope":79440,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":79338,"name":"string","nodeType":"ElementaryTypeName","src":"788:6:158","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"577261707065642056617261","id":79339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"825:14:158","typeDescriptions":{"typeIdentifier":"t_stringliteral_985e2e9885ca23de2896caee5fad5adf116e2558361aa44c502ff8b2c1b2a41b","typeString":"literal_string \"Wrapped Vara\""},"value":"Wrapped Vara"},"visibility":"private"},{"id":79343,"nodeType":"VariableDeclaration","src":"845:46:158","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_SYMBOL","nameLocation":"869:12:158","scope":79440,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":79341,"name":"string","nodeType":"ElementaryTypeName","src":"845:6:158","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"5756415241","id":79342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"884:7:158","typeDescriptions":{"typeIdentifier":"t_stringliteral_203a7c23d1b412674989fae6808de72f52c6953d49ac548796ba3c05451693a4","typeString":"literal_string \"WVARA\""},"value":"WVARA"},"visibility":"private"},{"id":79346,"nodeType":"VariableDeclaration","src":"897:57:158","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_INITIAL_SUPPLY","nameLocation":"922:20:158","scope":79440,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79344,"name":"uint256","nodeType":"ElementaryTypeName","src":"897:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"315f3030305f303030","id":79345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"945:9:158","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1_000_000"},"visibility":"private"},{"id":79354,"nodeType":"FunctionDefinition","src":"1014:53:158","nodes":[],"body":{"id":79353,"nodeType":"Block","src":"1028:39:158","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":79350,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41631,"src":"1038:20:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":79351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1038:22:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79352,"nodeType":"ExpressionStatement","src":"1038:22:158"}]},"documentation":{"id":79347,"nodeType":"StructuredDocumentation","src":"961:48:158","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":79348,"nodeType":"ParameterList","parameters":[],"src":"1025:2:158"},"returnParameters":{"id":79349,"nodeType":"ParameterList","parameters":[],"src":"1028:0:158"},"scope":79440,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":79388,"nodeType":"FunctionDefinition","src":"1073:297:158","nodes":[],"body":{"id":79387,"nodeType":"Block","src":"1134:236:158","nodes":[],"statements":[{"expression":{"arguments":[{"id":79362,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79340,"src":"1157:10:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":79363,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79343,"src":"1169:12:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79361,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41745,"src":"1144:12:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":79364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1144:38:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79365,"nodeType":"ExpressionStatement","src":"1144:38:158"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":79366,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42315,"src":"1192:20:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":79367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1192:22:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79368,"nodeType":"ExpressionStatement","src":"1192:22:158"},{"expression":{"arguments":[{"id":79370,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79356,"src":"1239:12:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":79369,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"1224:14:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":79371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1224:28:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79372,"nodeType":"ExpressionStatement","src":"1224:28:158"},{"expression":{"arguments":[{"id":79374,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79340,"src":"1281:10:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79373,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42412,"src":"1262:18:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":79375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1262:30:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79376,"nodeType":"ExpressionStatement","src":"1262:30:158"},{"expression":{"arguments":[{"id":79378,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79356,"src":"1309:12:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":79379,"name":"TOKEN_INITIAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79346,"src":"1323:20:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":79383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":79380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1346:2:158","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":79381,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[79424],"referencedDeclaration":79424,"src":"1352:8:158","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":79382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1352:10:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1346:16:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1323:39:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":79377,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42126,"src":"1303:5:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":79385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1303:60:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79386,"nodeType":"ExpressionStatement","src":"1303:60:158"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":79359,"kind":"modifierInvocation","modifierName":{"id":79358,"name":"initializer","nameLocations":["1122:11:158"],"nodeType":"IdentifierPath","referencedDeclaration":41517,"src":"1122:11:158"},"nodeType":"ModifierInvocation","src":"1122:11:158"}],"name":"initialize","nameLocation":"1082:10:158","parameters":{"id":79357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79356,"mutability":"mutable","name":"initialOwner","nameLocation":"1101:12:158","nodeType":"VariableDeclaration","scope":79388,"src":"1093:20:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79355,"name":"address","nodeType":"ElementaryTypeName","src":"1093:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1092:22:158"},"returnParameters":{"id":79360,"nodeType":"ParameterList","parameters":[],"src":"1134:0:158"},"scope":79440,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":79415,"nodeType":"FunctionDefinition","src":"1428:218:158","nodes":[],"body":{"id":79414,"nodeType":"Block","src":"1486:160:158","nodes":[],"statements":[{"expression":{"arguments":[{"id":79398,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79340,"src":"1509:10:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":79399,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79343,"src":"1521:12:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79397,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41745,"src":"1496:12:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":79400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1496:38:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79401,"nodeType":"ExpressionStatement","src":"1496:38:158"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":79402,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42315,"src":"1544:20:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":79403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1544:22:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79404,"nodeType":"ExpressionStatement","src":"1544:22:158"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":79406,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41320,"src":"1591:5:158","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":79407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1591:7:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":79405,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41269,"src":"1576:14:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":79408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1576:23:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79409,"nodeType":"ExpressionStatement","src":"1576:23:158"},{"expression":{"arguments":[{"id":79411,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79340,"src":"1628:10:158","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":79410,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42412,"src":"1609:18:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":79412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1609:30:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79413,"nodeType":"ExpressionStatement","src":"1609:30:158"}]},"documentation":{"id":79389,"nodeType":"StructuredDocumentation","src":"1376:47:158","text":"@custom:oz-upgrades-validate-as-initializer"},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":79392,"kind":"modifierInvocation","modifierName":{"id":79391,"name":"onlyOwner","nameLocations":["1459:9:158"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"1459:9:158"},"nodeType":"ModifierInvocation","src":"1459:9:158"},{"arguments":[{"hexValue":"32","id":79394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1483:1:158","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":79395,"kind":"modifierInvocation","modifierName":{"id":79393,"name":"reinitializer","nameLocations":["1469:13:158"],"nodeType":"IdentifierPath","referencedDeclaration":41564,"src":"1469:13:158"},"nodeType":"ModifierInvocation","src":"1469:16:158"}],"name":"reinitialize","nameLocation":"1437:12:158","parameters":{"id":79390,"nodeType":"ParameterList","parameters":[],"src":"1449:2:158"},"returnParameters":{"id":79396,"nodeType":"ParameterList","parameters":[],"src":"1486:0:158"},"scope":79440,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":79424,"nodeType":"FunctionDefinition","src":"1652:83:158","nodes":[],"body":{"id":79423,"nodeType":"Block","src":"1709:26:158","nodes":[],"statements":[{"expression":{"hexValue":"3132","id":79421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1726:2:158","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"functionReturnParameters":79420,"id":79422,"nodeType":"Return","src":"1719:9:158"}]},"baseFunctions":[41814],"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1661:8:158","overrides":{"id":79417,"nodeType":"OverrideSpecifier","overrides":[],"src":"1684:8:158"},"parameters":{"id":79416,"nodeType":"ParameterList","parameters":[],"src":"1669:2:158"},"returnParameters":{"id":79420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":79424,"src":"1702:5:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":79418,"name":"uint8","nodeType":"ElementaryTypeName","src":"1702:5:158","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1701:7:158"},"scope":79440,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":79439,"nodeType":"FunctionDefinition","src":"1741:93:158","nodes":[],"body":{"id":79438,"nodeType":"Block","src":"1800:34:158","nodes":[],"statements":[{"expression":{"arguments":[{"id":79434,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79426,"src":"1816:2:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":79435,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79428,"src":"1820:6:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":79433,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42126,"src":"1810:5:158","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":79436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1810:17:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":79437,"nodeType":"ExpressionStatement","src":"1810:17:158"}]},"functionSelector":"40c10f19","implemented":true,"kind":"function","modifiers":[{"id":79431,"kind":"modifierInvocation","modifierName":{"id":79430,"name":"onlyOwner","nameLocations":["1790:9:158"],"nodeType":"IdentifierPath","referencedDeclaration":41304,"src":"1790:9:158"},"nodeType":"ModifierInvocation","src":"1790:9:158"}],"name":"mint","nameLocation":"1750:4:158","parameters":{"id":79429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79426,"mutability":"mutable","name":"to","nameLocation":"1763:2:158","nodeType":"VariableDeclaration","scope":79439,"src":"1755:10:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79425,"name":"address","nodeType":"ElementaryTypeName","src":"1755:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":79428,"mutability":"mutable","name":"amount","nameLocation":"1775:6:158","nodeType":"VariableDeclaration","scope":79439,"src":"1767:14:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":79427,"name":"uint256","nodeType":"ElementaryTypeName","src":"1767:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1754:28:158"},"returnParameters":{"id":79432,"nodeType":"ParameterList","parameters":[],"src":"1800:0:158"},"scope":79440,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":79328,"name":"Initializable","nameLocations":["664:13:158"],"nodeType":"IdentifierPath","referencedDeclaration":41677,"src":"664:13:158"},"id":79329,"nodeType":"InheritanceSpecifier","src":"664:13:158"},{"baseName":{"id":79330,"name":"ERC20Upgradeable","nameLocations":["683:16:158"],"nodeType":"IdentifierPath","referencedDeclaration":42294,"src":"683:16:158"},"id":79331,"nodeType":"InheritanceSpecifier","src":"683:16:158"},{"baseName":{"id":79332,"name":"ERC20BurnableUpgradeable","nameLocations":["705:24:158"],"nodeType":"IdentifierPath","referencedDeclaration":42356,"src":"705:24:158"},"id":79333,"nodeType":"InheritanceSpecifier","src":"705:24:158"},{"baseName":{"id":79334,"name":"OwnableUpgradeable","nameLocations":["735:18:158"],"nodeType":"IdentifierPath","referencedDeclaration":41409,"src":"735:18:158"},"id":79335,"nodeType":"InheritanceSpecifier","src":"735:18:158"},{"baseName":{"id":79336,"name":"ERC20PermitUpgradeable","nameLocations":["759:22:158"],"nodeType":"IdentifierPath","referencedDeclaration":42525,"src":"759:22:158"},"id":79337,"nodeType":"InheritanceSpecifier","src":"759:22:158"}],"canonicalName":"WrappedVara","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[79440,42525,42785,43343,43750,45649,41409,42356,42294,43792,45613,45587,42571,41677],"name":"WrappedVara","nameLocation":"645:11:158","scope":79441,"usedErrors":[41245,41250,41426,41429,42391,42398,42688,43762,43767,43772,43781,43786,43791,49452,49457,49462],"usedEvents":[41256,41434,43730,45521,45530]}],"license":"UNLICENSED"},"id":158} \ No newline at end of file diff --git a/ethexe/ethereum/src/deploy.rs b/ethexe/ethereum/src/deploy.rs index 66cb8fdbf6e..79910f6dda7 100644 --- a/ethexe/ethereum/src/deploy.rs +++ b/ethexe/ethereum/src/deploy.rs @@ -41,7 +41,7 @@ use anyhow::Result; use ethexe_common::{ Address as LocalAddress, ValidatorsVec, ecdsa::PublicKey, gear::AggregatedPublicKey, }; -use gprimitives::{ActorId, H160, U256 as GearU256}; +use gprimitives::U256 as GearU256; use gsigner::secp256k1::Signer as LocalSigner; use roast_secp256k1_evm::frost::{ Identifier, @@ -69,7 +69,7 @@ pub struct EthereumDeployer { params: ContractsDeploymentParams, /// Verifiable secret sharing commitment generated during key generation. - /// If not provided, will be generate with [`keys::generate_with_dealer`] function. + /// Must be provided explicitly for production deployments. verifiable_secret_sharing_commitment: Option, } @@ -136,6 +136,14 @@ impl EthereumDeployer { self } + pub fn with_generated_verifiable_secret_sharing_commitment(mut self) -> Self { + let validators: Vec = self.validators.clone().into(); + let identifiers = identifiers_from_validators(&validators); + self.verifiable_secret_sharing_commitment = + Some(generate_secret_sharing_commitment(&identifiers)); + self + } + pub fn with_verifiable_secret_sharing_commitment( mut self, verifiable_secret_sharing_commitment: VerifiableSecretSharingCommitment, @@ -164,7 +172,13 @@ impl EthereumDeployer { let router = deploy_router( deployer, *wrapped_vara.address(), - self.verifiable_secret_sharing_commitment.clone(), + self.verifiable_secret_sharing_commitment + .clone() + .ok_or_else(|| { + anyhow::anyhow!( + "Missing verifiable secret sharing commitment for router deployment" + ) + })?, self.validators .clone() .into_iter() @@ -240,7 +254,7 @@ where async fn deploy_router

( deployer: Address, wvara_address: Address, - maybe_verifiable_secret_sharing_commitment: Option, + verifiable_secret_sharing_commitment: VerifiableSecretSharingCommitment, validators: Vec

, params: ContractsDeploymentParams, provider: P, @@ -248,18 +262,8 @@ async fn deploy_router

( where P: Provider + Clone, { - let validators_identifiers: Vec<_> = validators - .iter() - .map(|address| { - Identifier::deserialize(&ActorId::from(H160(address.0.0)).into_bytes()) - .expect("conversion failed") - }) - .collect(); - - let verifiable_secret_sharing_commitment = match maybe_verifiable_secret_sharing_commitment { - Some(commitment) => commitment, - None => generate_secret_sharing_commitment(&validators_identifiers), - }; + let validators_local: Vec = validators.iter().copied().map(Into::into).collect(); + let validators_identifiers = identifiers_from_validators(&validators_local); let identifiers = validators_identifiers.clone().into_iter().collect(); let aggregated_public_key = aggregated_public_key(&identifiers, &verifiable_secret_sharing_commitment); @@ -450,6 +454,13 @@ fn generate_secret_sharing_commitment( .unwrap() } +fn identifiers_from_validators(validators: &[LocalAddress]) -> Vec { + validators + .iter() + .map(|address| Identifier::derive(address.as_ref()).expect("conversion failed")) + .collect() +} + fn aggregated_public_key( identifiers: &BTreeSet, verifiable_secret_sharing_commitment: &VerifiableSecretSharingCommitment, @@ -494,6 +505,7 @@ mod tests { let ethereum = EthereumDeployer::new(&anvil.endpoint(), signer, sender_address) .await? + .with_generated_verifiable_secret_sharing_commitment() .with_middleware() .deploy() .await?; diff --git a/ethexe/ethereum/src/middleware/mod.rs b/ethexe/ethereum/src/middleware/mod.rs index 2290f8948f4..b12af709f77 100644 --- a/ethexe/ethereum/src/middleware/mod.rs +++ b/ethexe/ethereum/src/middleware/mod.rs @@ -32,7 +32,7 @@ use tokio::sync::RwLock; type Instance = IMiddleware::IMiddlewareInstance; type QueryInstance = IMiddleware::IMiddlewareInstance; -/// Trait for executing elections in the blockchain +/// Trait for executing elections in the blockchain. #[async_trait::async_trait] pub trait ElectionProvider: Send + Sync { fn clone_boxed(&self) -> Box; @@ -80,6 +80,7 @@ impl ElectionProvider for MiddlewareQuery { } async fn make_election_at(&self, ts: u64, max_validators: u128) -> Result { + // Calls on-chain view to obtain ordered validator addresses for an era. let validators = self .0 .makeElectionAt( diff --git a/ethexe/ethereum/src/router/mod.rs b/ethexe/ethereum/src/router/mod.rs index 3c88423d37f..910d143bee3 100644 --- a/ethexe/ethereum/src/router/mod.rs +++ b/ethexe/ethereum/src/router/mod.rs @@ -27,9 +27,9 @@ use crate::{ use alloy::{ consensus::{SidecarBuilder, SimpleCoder}, eips::BlockId, - primitives::{Address, Bytes}, + primitives::{Address, Bytes, fixed_bytes}, providers::{PendingTransactionBuilder, Provider, ProviderBuilder, RootProvider}, - rpc::types::TransactionReceipt, + rpc::types::{TransactionReceipt, state::AccountOverride}, }; use anyhow::{Result, anyhow}; use ethexe_common::{ @@ -51,6 +51,7 @@ use futures::StreamExt; use gear_core::ids::prelude::CodeIdExt as _; use gprimitives::{ActorId, CodeId, H256}; use serde::Serialize; +use std::collections::HashMap; pub mod events; @@ -297,6 +298,7 @@ impl Router { Ok((receipt, actor_id)) } + /// Submits a batch commitment with ECDSA signatures. pub async fn commit_batch( &self, commitment: BatchCommitment, @@ -309,6 +311,7 @@ impl Router { .map(|receipt| H256(receipt.transaction_hash.0)) } + /// Builds a pending ECDSA commit batch transaction. pub async fn commit_batch_pending( &self, commitment: BatchCommitment, @@ -323,7 +326,77 @@ impl Router { .collect(), ); - let gas_limit = Self::HUGE_GAS_LIMIT; + // Override router.reserved to skip block predecessor checks in gas estimation. + let mut state_diff = HashMap::default(); + state_diff.insert( + // keccak256(abi.encode(uint256(keccak256(bytes("router.storage.RouterV1"))) - 1)) & ~bytes32(uint256(0xff)) + fixed_bytes!("e3d827fd4fed52666d49a0df00f9cc2ac79f0f2378fc627e62463164801b6500"), + // router.reserved = 1 + fixed_bytes!("0000000000000000000000000000000000000000000000000000000000000001"), + ); + + let mut state = HashMap::default(); + state.insert( + *self.instance.address(), + AccountOverride { + state_diff: Some(state_diff), + ..Default::default() + }, + ); + + let estimate_gas_builder = builder.clone().state(state); + let gas_limit = Self::HUGE_GAS_LIMIT + .max(estimate_gas_builder.estimate_gas().await? + Self::GEAR_BLOCK_IS_PREDECESSOR_GAS); + + builder.gas(gas_limit).send().await.map_err(Into::into) + } + + /// Submits a batch commitment with a FROST signature (96 bytes). + pub async fn commit_batch_frost( + &self, + commitment: BatchCommitment, + signature96: [u8; 96], + ) -> Result { + self.commit_batch_frost_pending(commitment, signature96) + .await? + .try_get_receipt_check_reverted() + .await + .map(|receipt| H256(receipt.transaction_hash.0)) + } + + /// Builds a pending FROST commit batch transaction. + pub async fn commit_batch_frost_pending( + &self, + commitment: BatchCommitment, + signature96: [u8; 96], + ) -> Result> { + let builder = self.instance.commitBatch( + commitment.into(), + SignatureType::FROST as u8, + vec![Bytes::from(signature96.to_vec())], + ); + + // Override router.reserved to skip block predecessor checks in gas estimation. + let mut state_diff = HashMap::default(); + state_diff.insert( + // keccak256(abi.encode(uint256(keccak256(bytes("router.storage.RouterV1"))) - 1)) & ~bytes32(uint256(0xff)) + fixed_bytes!("e3d827fd4fed52666d49a0df00f9cc2ac79f0f2378fc627e62463164801b6500"), + // router.reserved = 1 + fixed_bytes!("0000000000000000000000000000000000000000000000000000000000000001"), + ); + + let mut state = HashMap::default(); + state.insert( + *self.instance.address(), + AccountOverride { + state_diff: Some(state_diff), + ..Default::default() + }, + ); + + let estimate_gas_builder = builder.clone().state(state); + let gas_limit = Self::HUGE_GAS_LIMIT + .max(estimate_gas_builder.estimate_gas().await? + Self::GEAR_BLOCK_IS_PREDECESSOR_GAS); builder.gas(gas_limit).send().await.map_err(Into::into) } @@ -732,6 +805,7 @@ mod tests { EthereumDeployer::new(anvil.endpoint_url().as_str(), signer, alice.to_address()) .await .unwrap() + .with_generated_verifiable_secret_sharing_commitment() .deploy() .await .unwrap() @@ -760,6 +834,7 @@ mod tests { EthereumDeployer::new(anvil.endpoint_url().as_str(), signer, alice.to_address()) .await .unwrap() + .with_generated_verifiable_secret_sharing_commitment() .deploy() .await .unwrap() diff --git a/ethexe/network/Cargo.toml b/ethexe/network/Cargo.toml index b29783b4338..ef3721e952d 100644 --- a/ethexe/network/Cargo.toml +++ b/ethexe/network/Cargo.toml @@ -30,7 +30,6 @@ auto_impl.workspace = true lru.workspace = true thiserror.workspace = true indexmap.workspace = true -gear-workspace-hack.workspace = true [dependencies.libp2p] version = "0.56.0" diff --git a/ethexe/network/src/gossipsub.rs b/ethexe/network/src/gossipsub.rs index 93677ee32a2..eb18b9263f4 100644 --- a/ethexe/network/src/gossipsub.rs +++ b/ethexe/network/src/gossipsub.rs @@ -43,7 +43,7 @@ use std::{ #[derive(Debug, derive_more::From)] pub enum Message { // TODO: rename to `Validators` - Commitments(SignedValidatorMessage), + Commitments(Box), Promise(SignedPromise), } @@ -175,7 +175,8 @@ impl Behaviour { source.expect("ValidationMode::Strict implies `source` is always present"); let res = if topic == self.commitments_topic.hash() { - SignedValidatorMessage::decode(&mut &data[..]).map(Message::Commitments) + SignedValidatorMessage::decode(&mut &data[..]) + .map(|m| Message::Commitments(Box::new(m))) } else if topic == self.promises_topic.hash() { SignedPromise::decode(&mut &data[..]).map(Message::Promise) } else { diff --git a/ethexe/network/src/lib.rs b/ethexe/network/src/lib.rs index 33308f60930..740ec5d45be 100644 --- a/ethexe/network/src/lib.rs +++ b/ethexe/network/src/lib.rs @@ -559,7 +559,10 @@ impl NetworkService { } pub fn publish_message(&mut self, data: impl Into) { - self.swarm.behaviour_mut().gossipsub.publish(data.into()) + self.swarm + .behaviour_mut() + .gossipsub + .publish(Box::new(data.into())) } pub fn send_injected_transaction( diff --git a/ethexe/observer/Cargo.toml b/ethexe/observer/Cargo.toml index c4d6355e77f..b4c767c9355 100644 --- a/ethexe/observer/Cargo.toml +++ b/ethexe/observer/Cargo.toml @@ -33,7 +33,6 @@ futures.workspace = true log.workspace = true tracing.workspace = true derive_more.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gear-utils.workspace = true diff --git a/ethexe/observer/src/tests.rs b/ethexe/observer/src/tests.rs index 226e26d915d..721e9a2fc93 100644 --- a/ethexe/observer/src/tests.rs +++ b/ethexe/observer/src/tests.rs @@ -48,11 +48,11 @@ async fn test_deployment() -> Result<()> { let sender_address = sender_public_key.to_address(); let validators: Vec

= vec!["0x45D6536E3D4AdC8f4e13c5c4aA54bE968C55Abf1".parse()?]; - let deployer = EthereumDeployer::new(ðereum_rpc, signer, sender_address) + let ethereum = EthereumDeployer::new(ðereum_rpc, signer, sender_address) .await - .unwrap(); - let ethereum = deployer + .unwrap() .with_validators(validators.try_into().unwrap()) + .with_generated_verifiable_secret_sharing_commitment() .deploy() .await?; diff --git a/ethexe/processor/Cargo.toml b/ethexe/processor/Cargo.toml index 3a579722850..bafbf8c3d86 100644 --- a/ethexe/processor/Cargo.toml +++ b/ethexe/processor/Cargo.toml @@ -28,7 +28,6 @@ sp-wasm-interface = { workspace = true, features = ["std", "wasmtime"] } tokio = { workspace = true, features = ["full"] } rayon.workspace = true itertools = { workspace = true, features = ["use_std"] } -gear-workspace-hack.workspace = true [dev-dependencies] anyhow.workspace = true diff --git a/ethexe/prometheus/Cargo.toml b/ethexe/prometheus/Cargo.toml index fbff637998d..82ab56fef06 100644 --- a/ethexe/prometheus/Cargo.toml +++ b/ethexe/prometheus/Cargo.toml @@ -20,4 +20,3 @@ hyper = { version = "0.14.16", default-features = false, features = [ log.workspace = true prometheus.workspace = true tokio.workspace = true -gear-workspace-hack.workspace = true diff --git a/ethexe/rpc/Cargo.toml b/ethexe/rpc/Cargo.toml index dbc04186b41..a84627705dc 100644 --- a/ethexe/rpc/Cargo.toml +++ b/ethexe/rpc/Cargo.toml @@ -28,7 +28,6 @@ gear-core = { workspace = true, features = ["std"] } serde = { workspace = true, features = ["std"] } tracing.workspace = true dashmap.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] jsonrpsee = { workspace = true, features = ["client"] } diff --git a/ethexe/runtime/Cargo.toml b/ethexe/runtime/Cargo.toml index c1557b4a314..5c1a13c5dc1 100644 --- a/ethexe/runtime/Cargo.toml +++ b/ethexe/runtime/Cargo.toml @@ -19,7 +19,6 @@ ethexe-common.workspace = true ## Operational deps. log.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] substrate-wasm-builder = { workspace = true, optional = true } diff --git a/ethexe/runtime/common/Cargo.toml b/ethexe/runtime/common/Cargo.toml index 81b4ec1f7d5..098160021b1 100644 --- a/ethexe/runtime/common/Cargo.toml +++ b/ethexe/runtime/common/Cargo.toml @@ -24,7 +24,6 @@ log.workspace = true derive_more.workspace = true auto_impl.workspace = true serde = { workspace = true, features = ["derive"], optional = true } -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/ethexe/sdk/Cargo.toml b/ethexe/sdk/Cargo.toml index ef1ab6e79d7..4c6109b0fbf 100644 --- a/ethexe/sdk/Cargo.toml +++ b/ethexe/sdk/Cargo.toml @@ -23,4 +23,3 @@ futures.workspace = true gsigner.workspace = true gprimitives.workspace = true jsonrpsee = { workspace = true, features = ["client"] } -gear-workspace-hack.workspace = true diff --git a/ethexe/service/Cargo.toml b/ethexe/service/Cargo.toml index dd5f4bf79ce..b219d69bf1c 100644 --- a/ethexe/service/Cargo.toml +++ b/ethexe/service/Cargo.toml @@ -41,7 +41,6 @@ rand.workspace = true tempfile.workspace = true derive_more.workspace = true async-trait.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] alloy = { workspace = true, features = [ @@ -58,6 +57,7 @@ alloy = { workspace = true, features = [ "signer-local", ] } ntest.workspace = true +ethexe-dkg-roast.workspace = true gear-core-errors.workspace = true ethexe-network.workspace = true roast-secp256k1-evm.workspace = true @@ -79,3 +79,6 @@ demo-delayed-sender-ethexe = { workspace = true, features = [ "debug", "ethexe", ] } + +[features] +test-utils = [] diff --git a/ethexe/service/src/lib.rs b/ethexe/service/src/lib.rs index a42dcbbb571..0d8335eca0d 100644 --- a/ethexe/service/src/lib.rs +++ b/ethexe/service/src/lib.rs @@ -58,6 +58,7 @@ use tokio::sync::oneshot; pub mod config; mod fast_sync; + #[cfg(test)] mod tests; @@ -172,6 +173,7 @@ impl Service { .await .unwrap() .with_validators(vec![validator_address].try_into().unwrap()) + .with_generated_verifiable_secret_sharing_commitment() .deploy() .await?; @@ -575,6 +577,7 @@ impl Service { let (reply, _) = reply.into_parts(); consensus.receive_validation_reply(reply)? } + _ => consensus.receive_verified_validator_message(message)?, }; } NetworkEvent::InjectedTransaction(event) => match event { @@ -686,6 +689,14 @@ impl Service { network.publish_message(message); } + ConsensusEvent::BroadcastValidatorMessage(message) => { + if let Some(network) = network.as_mut() { + network.publish_message(message.clone()); + consensus.receive_validator_message(message)?; + } else { + consensus.receive_validator_message(message)?; + } + } ConsensusEvent::CommitmentSubmitted(info) => { log::info!("{info}"); } diff --git a/ethexe/service/src/tests/commit_rejected.rs b/ethexe/service/src/tests/commit_rejected.rs new file mode 100644 index 00000000000..1cc872da9c8 --- /dev/null +++ b/ethexe/service/src/tests/commit_rejected.rs @@ -0,0 +1,102 @@ +// This file is part of Gear. +// +// Copyright (C) 2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +use crate::tests::utils::{ + EnvNetworkConfig, NodeConfig, TestEnv, TestEnvConfig, ValidatorsConfig, init_logger, +}; +use ethexe_common::{ecdsa::ContractSignature, gear::BatchCommitment}; +use ethexe_consensus::BatchCommitter; +use ethexe_ethereum::{TryGetReceipt, router::Router}; +use gprimitives::H256; +use tokio::time::timeout; + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(60_000)] +async fn commit_rejected_with_bad_frost_signature() { + init_logger(); + + #[derive(Clone)] + struct BadSignatureCommitter { + router: Router, + } + + #[async_trait::async_trait] + impl BatchCommitter for BadSignatureCommitter { + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } + + async fn commit( + self: Box, + batch: BatchCommitment, + signatures: Vec, + ) -> anyhow::Result { + let pending = self.router.commit_batch_pending(batch, signatures).await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + + async fn commit_frost( + self: Box, + batch: BatchCommitment, + mut signature96: [u8; 96], + ) -> anyhow::Result { + signature96[0] ^= 0x01; + let pending = self + .router + .commit_batch_frost_pending(batch, signature96) + .await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + } + + let config = TestEnvConfig { + validators: ValidatorsConfig::PreDefined(1), + network: EnvNetworkConfig::Enabled, + ..Default::default() + }; + let mut env = TestEnv::new(config).await.unwrap(); + + let mut validator = + env.new_node(NodeConfig::named("validator").validator(env.validators[0].clone())); + validator.start_service().await; + + let uploaded_code = env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + validator.stop_service().await; + validator.custom_committer = Some(Box::new(BadSignatureCommitter { + router: env.ethereum.router(), + })); + validator.start_service().await; + + let pending = env + .send_message(ping_actor.program_id, b"PING") + .await + .unwrap(); + + timeout(env.block_time * 5, pending.wait_for()) + .await + .expect_err("Timeout expected due to bad signature"); +} diff --git a/ethexe/service/src/tests/dkg_roast/dkg.rs b/ethexe/service/src/tests/dkg_roast/dkg.rs new file mode 100644 index 00000000000..b9f9e77ddd7 --- /dev/null +++ b/ethexe/service/src/tests/dkg_roast/dkg.rs @@ -0,0 +1,70 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +use super::helpers::{networked_config, start_validators}; +use crate::tests::utils::{NodeConfig, TestEnv, init_logger}; +use ethexe_common::db::DkgStorageRO; + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(60_000)] +async fn dkg_share_is_available_for_validator() { + init_logger(); + + let config = networked_config(3); + let mut env = TestEnv::new(config).await.unwrap(); + + let mut validator = + env.new_node(NodeConfig::named("validator").validator(env.validators[0].clone())); + validator.start_service().await; + + assert!(validator.db.dkg_share(0).is_some()); + assert!(validator.db.public_key_package(0).is_some()); + assert!(validator.db.dkg_vss_commitment(0).is_some()); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(60_000)] +async fn dkg_persists_across_validator_restart() { + init_logger(); + + let config = networked_config(3); + let mut env = TestEnv::new(config).await.unwrap(); + + let mut validators = start_validators(&mut env).await; + + validators[0].stop_service().await; + validators[0].start_service().await; + + assert!(validators[0].db.dkg_share(0).is_some()); + assert!(validators[0].db.public_key_package(0).is_some()); + assert!(validators[0].db.dkg_vss_commitment(0).is_some()); + + let uploaded_code = env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + let reply = env + .send_message(ping_actor.program_id, b"PING") + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + assert_eq!(reply.payload, b"PONG"); +} diff --git a/ethexe/service/src/tests/dkg_roast/helpers.rs b/ethexe/service/src/tests/dkg_roast/helpers.rs new file mode 100644 index 00000000000..81f69dd8558 --- /dev/null +++ b/ethexe/service/src/tests/dkg_roast/helpers.rs @@ -0,0 +1,45 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +use crate::tests::utils::{ + EnvNetworkConfig, Node, NodeConfig, TestEnv, TestEnvConfig, TestingEventReceiver, + ValidatorsConfig, +}; + +pub fn networked_config(validators: usize) -> TestEnvConfig { + TestEnvConfig { + validators: ValidatorsConfig::PreDefined(validators), + network: EnvNetworkConfig::Enabled, + ..Default::default() + } +} + +pub async fn start_validators(env: &mut TestEnv) -> Vec { + let mut validators = Vec::new(); + for (index, validator) in env.validators.clone().into_iter().enumerate() { + log::info!("📗 Starting validator-{index}"); + let mut node = + env.new_node(NodeConfig::named(format!("validator-{index}")).validator(validator)); + node.start_service().await; + validators.push(node); + } + validators +} + +pub async fn start_validators_with_events( + env: &mut TestEnv, +) -> (Vec, Vec) { + let mut validators = Vec::new(); + let mut events = Vec::new(); + for (index, validator) in env.validators.clone().into_iter().enumerate() { + log::info!("📗 Starting validator-{index}"); + let mut node = + env.new_node(NodeConfig::named(format!("validator-{index}")).validator(validator)); + node.start_service().await; + events.push(node.new_events()); + validators.push(node); + } + (validators, events) +} diff --git a/ethexe/service/src/tests/dkg_roast/mod.rs b/ethexe/service/src/tests/dkg_roast/mod.rs new file mode 100644 index 00000000000..ee38cc2257d --- /dev/null +++ b/ethexe/service/src/tests/dkg_roast/mod.rs @@ -0,0 +1,8 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +mod dkg; +mod helpers; +mod roast; diff --git a/ethexe/service/src/tests/dkg_roast/roast.rs b/ethexe/service/src/tests/dkg_roast/roast.rs new file mode 100644 index 00000000000..bec05b61c20 --- /dev/null +++ b/ethexe/service/src/tests/dkg_roast/roast.rs @@ -0,0 +1,306 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +use super::helpers::{networked_config, start_validators, start_validators_with_events}; +use crate::tests::utils::{ + InfiniteStreamExt, TestEnv, TestingEvent, TestingNetworkEvent, init_logger, +}; +use ethexe_common::network::VerifiedValidatorMessage; +use ethexe_dkg_roast::roast::select_leader; +use std::time::Duration; + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(120_000)] +async fn roast_signing_with_missing_validator() { + init_logger(); + + let config = networked_config(4); + let mut env = TestEnv::new(config).await.unwrap(); + + let mut validators = start_validators(&mut env).await; + + let uploaded_code = env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + validators[3].stop_service().await; + + while env.next_block_producer_index().await == 3 { + env.force_new_block().await; + } + + let reply = env + .send_message(ping_actor.program_id, b"PING") + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + assert_eq!(reply.payload, b"PONG"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(180_000)] +async fn roast_retries_after_leader_timeout() { + init_logger(); + + let config = networked_config(4); + let mut env = TestEnv::new(config).await.unwrap(); + + let (mut validators, mut node_events) = start_validators_with_events(&mut env).await; + + let uploaded_code = env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + log::info!("📗 Resetting observer events before sending message"); + let mut observer_events = validators[0].new_events(); + + let pending = env + .send_message(ping_actor.program_id, b"PING") + .await + .unwrap(); + + let (leader_request, request_sender) = tokio::time::timeout(Duration::from_secs(10), async { + observer_events + .find_map(|event| match event { + TestingEvent::Network(TestingNetworkEvent::ValidatorMessage(msg)) => { + if let VerifiedValidatorMessage::SignSessionRequest(ref request) = msg { + Some((request.data().payload.clone(), msg.address())) + } else { + None + } + } + _ => None, + }) + .await + }) + .await + .expect("sign session request not observed"); + let leader_address = leader_request.leader; + let next_leader = select_leader( + &leader_request.participants, + leader_request.msg_hash, + leader_request.session.era, + leader_request.attempt.saturating_add(1), + ); + log::info!( + "📗 ROAST leaders: leader {}, next_leader {}, request_sender {}", + leader_address, + next_leader, + request_sender + ); + + if leader_address == request_sender { + log::warn!( + "Leader matches request sender; skipping leader stop to avoid aborting coordinator" + ); + } else { + let leader_index = env + .validators + .iter() + .position(|cfg| cfg.public_key.to_address() == leader_address) + .expect("leader must be one of validators"); + validators[leader_index].stop_service().await; + } + + let retry_index = env + .validators + .iter() + .position(|cfg| cfg.public_key.to_address() == next_leader) + .expect("retry leader must be one of validators"); + let mut retry_events = node_events.swap_remove(retry_index); + + let retry_observed = tokio::time::timeout(Duration::from_secs(120), async { + retry_events + .find_map(|event| match event { + TestingEvent::Network(TestingNetworkEvent::ValidatorMessage(msg)) => { + if let VerifiedValidatorMessage::SignSessionRequest(request) = msg { + let payload = request.data().payload.clone(); + if payload.attempt > 0 || payload.leader == next_leader { + return Some(payload.attempt); + } + } + None + } + _ => None, + }) + .await + }) + .await + .is_ok(); + + if !retry_observed { + log::warn!("Retry sign session request not observed; continuing to await completion"); + } + + let reply = tokio::time::timeout(Duration::from_secs(60), pending.wait_for()) + .await + .expect("signing did not complete after retry") + .unwrap(); + assert_eq!(reply.payload, b"PONG"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(120_000)] +async fn roast_completes_after_lagging_validator_catchup() { + init_logger(); + + let config = networked_config(3); + let mut env = TestEnv::new(config).await.unwrap(); + + let mut validators = start_validators(&mut env).await; + + let lagging_index = 2; + validators[lagging_index].stop_service().await; + + validators[lagging_index].start_service().await; + let mut lagging_events = validators[lagging_index].new_events(); + env.force_new_block().await; + let latest_block = env.latest_block().await; + tokio::time::timeout(Duration::from_secs(20), async { + loop { + let synced = lagging_events.find_block_synced().await; + if synced == latest_block.hash { + break; + } + } + }) + .await + .expect("lagging validator did not catch up to latest block"); + + let uploaded_code = env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + let reply = env + .send_message(ping_actor.program_id, b"PING") + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + assert_eq!(reply.payload, b"PONG"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(120_000)] +async fn roast_recovers_from_mid_session_crash() { + init_logger(); + + let config = networked_config(4); + let mut env = TestEnv::new(config).await.unwrap(); + + let mut validators = start_validators(&mut env).await; + + let uploaded_code = env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + let mut observer_events = validators[0].new_events(); + let observer_address = env.validators[0].public_key.to_address(); + + let pending = env + .send_message(ping_actor.program_id, b"PING") + .await + .unwrap(); + + let leader_address = tokio::time::timeout(Duration::from_secs(10), async { + observer_events + .find_map(|event| match event { + TestingEvent::Network(TestingNetworkEvent::ValidatorMessage(msg)) => { + if let VerifiedValidatorMessage::SignSessionRequest(request) = msg { + return Some(request.data().payload.leader); + } + None + } + _ => None, + }) + .await + }) + .await + .expect("sign session request not observed"); + + let crash_address = env + .validators + .iter() + .map(|cfg| cfg.public_key.to_address()) + .find(|addr| *addr != leader_address && *addr != observer_address) + .expect("no crash candidate"); + + let crash_index = env + .validators + .iter() + .position(|cfg| cfg.public_key.to_address() == crash_address) + .expect("crash validator must be one of validators"); + validators[crash_index].stop_service().await; + tokio::time::sleep(env.block_time * 2).await; + validators[crash_index].start_service().await; + + drop(pending); + + let reply = env + .send_message(ping_actor.program_id, b"PING") + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert_eq!(reply.payload, b"PONG"); +} diff --git a/ethexe/service/src/tests/mod.rs b/ethexe/service/src/tests/mod.rs index f394beb38ce..12a9d60d11c 100644 --- a/ethexe/service/src/tests/mod.rs +++ b/ethexe/service/src/tests/mod.rs @@ -19,7 +19,12 @@ //! Integration tests. use futures::StreamExt; +mod commit_rejected; +mod dkg_roast; +mod storage_cache; pub(crate) mod utils; +mod validators_commitment; +mod validators_election; use crate::{ Service, @@ -27,7 +32,7 @@ use crate::{ tests::utils::{ AnnounceId, EnvNetworkConfig, InfiniteStreamExt, Node, NodeConfig, TestEnv, TestEnvConfig, TestingEvent, TestingNetworkEvent, TestingRpcEvent, ValidatorsConfig, WaitForReplyTo, - Wallets, init_logger, + init_logger, }, }; use alloy::{ @@ -42,7 +47,7 @@ use ethexe_common::{ events::{ BlockEvent, MirrorEvent, RouterEvent, mirror::{MessageEvent, ReplyEvent, StateChangedEvent, ValueClaimedEvent}, - router::{AnnouncesCommittedEvent, ValidatorsCommittedForEraEvent}, + router::AnnouncesCommittedEvent, }, gear::{BatchCommitment, CANONICAL_QUARANTINE, MessageType}, injected::{AddressedInjectedTransaction, InjectedTransaction, InjectedTransactionAcceptance}, @@ -52,7 +57,7 @@ use ethexe_common::{ use ethexe_compute::ComputeConfig; use ethexe_consensus::{BatchCommitter, ConsensusEvent}; use ethexe_db::{Database, verifier::IntegrityVerifier}; -use ethexe_ethereum::{TryGetReceipt, deploy::ContractsDeploymentParams, router::Router}; +use ethexe_ethereum::{TryGetReceipt, router::Router}; use ethexe_observer::{EthereumConfig, ObserverEvent}; use ethexe_processor::{DEFAULT_BLOCK_GAS_LIMIT_MULTIPLIER, RunnerConfig}; use ethexe_prometheus::PrometheusConfig; @@ -64,7 +69,7 @@ use gear_core::{ }; use gear_core_errors::{ErrorReplyReason, SimpleExecutionError, SimpleUnavailableActorError}; use gprimitives::{ActorId, H160, H256, MessageId}; -use gsigner::secp256k1::{Secp256k1SignerExt, Signer}; +use gsigner::secp256k1::Secp256k1SignerExt; use parity_scale_codec::{Decode, Encode}; use std::{ collections::{BTreeMap, BTreeSet, HashSet}, @@ -157,7 +162,7 @@ async fn ping() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -236,7 +241,7 @@ async fn uninitialized_program() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -392,7 +397,7 @@ async fn mailbox() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -632,7 +637,7 @@ async fn value_reply_program_to_user() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -731,7 +736,7 @@ async fn value_send_program_to_user_and_claimed() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -863,7 +868,7 @@ async fn value_send_program_to_user_and_replied() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -998,7 +1003,7 @@ async fn incoming_transfers() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -1095,7 +1100,8 @@ async fn ping_reorg() { let mut connect_node = env.new_node(NodeConfig::named("connect")); connect_node.start_service().await; - let mut node = env.new_node(NodeConfig::named("validator").validator(env.validators[0])); + let mut node = + env.new_node(NodeConfig::named("validator").validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -1199,7 +1205,7 @@ async fn ping_deep_sync() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -1258,7 +1264,7 @@ async fn ping_deep_sync() { } #[tokio::test(flavor = "multi_thread")] -#[ntest::timeout(60_000)] +#[ntest::timeout(120_000)] async fn multiple_validators() { init_logger(); @@ -1440,7 +1446,7 @@ async fn send_injected_tx() { log::info!("📗 Starting node 0"); let mut node0 = env.new_node( NodeConfig::default() - .validator(env.validators[0]) + .validator(env.validators[0].clone()) .service_rpc(9505), ); node0.start_service().await; @@ -1449,7 +1455,7 @@ async fn send_injected_tx() { let mut node1 = env.new_node( NodeConfig::default() .service_rpc(9506) - .validator(env.validators[1]), + .validator(env.validators[1].clone()), ); node1.start_service().await; @@ -1617,7 +1623,7 @@ async fn fast_sync() { let mut env = TestEnv::new(config).await.unwrap(); log::info!("📗 Starting Alice"); - let mut alice = env.new_node(NodeConfig::named("Alice").validator(env.validators[0])); + let mut alice = env.new_node(NodeConfig::named("Alice").validator(env.validators[0].clone())); alice.start_service().await; log::info!("📗 Creating `demo-autoreply` programs"); @@ -1737,152 +1743,6 @@ async fn fast_sync() { ); } -#[tokio::test(flavor = "multi_thread")] -#[ntest::timeout(60_000)] -async fn validators_election() { - init_logger(); - - // Setup test environment - - let election_ts = 20 * 60 * 60; - let era_duration = 24 * 60 * 60; - let deploy_params = ContractsDeploymentParams { - with_middleware: true, - era_duration, - election_duration: era_duration - election_ts, - }; - - let signer = Signer::memory(); - // 10 wallets - hardcoded in anvil - let mut wallets = Wallets::anvil(&signer); - - let current_validators: Vec<_> = (0..5).map(|_| wallets.next()).collect(); - let next_validators: Vec<_> = (0..5).map(|_| wallets.next()).collect(); - - let env_config = TestEnvConfig { - validators: ValidatorsConfig::ProvidedValidators(current_validators), - deploy_params, - network: EnvNetworkConfig::Enabled, - signer: signer.clone(), - ..Default::default() - }; - let mut env = TestEnv::new(env_config).await.unwrap(); - - let genesis_block_hash = env - .ethereum - .router() - .query() - .genesis_block_hash() - .await - .unwrap(); - let genesis_ts = env - .provider - .get_block_by_hash(genesis_block_hash.0.into()) - .await - .unwrap() - .unwrap() - .header - .timestamp; - - // Start initial validators - let mut validators = vec![]; - for (i, v) in env.validators.clone().into_iter().enumerate() { - log::info!("📗 Starting validator-{i}"); - let mut validator = env.new_node(NodeConfig::named(format!("validator-{i}")).validator(v)); - validator.start_service().await; - validators.push(validator); - } - - // Setup next validators to be elected for previous era - let (next_validators_configs, _commitment) = - TestEnv::define_session_keys(&signer, next_validators); - - let next_validators: Vec<_> = next_validators_configs - .iter() - .map(|cfg| cfg.public_key.to_address()) - .collect(); - - env.election_provider - .set_predefined_election_at( - election_ts + genesis_ts, - next_validators.try_into().unwrap(), - ) - .await; - - // Force creation new block in election period - env.provider - .anvil_set_next_block_timestamp(election_ts + genesis_ts) - .await - .unwrap(); - env.force_new_block().await; - - env.new_observer_events() - .filter_map_block_synced() - .find(|event| { - matches!( - event, - BlockEvent::Router(RouterEvent::ValidatorsCommittedForEra( - ValidatorsCommittedForEraEvent { era_index: _ } - )) - ) - }) - .await; - - tracing::info!("📗 Next validators successfully committed"); - - // Upload code when next validators committed and next are not active. - // Checks, that another validators commitment not happen. - let uploaded_code = env - .upload_code(demo_ping::WASM_BINARY) - .await - .unwrap() - .wait_for() - .await - .unwrap(); - assert!(uploaded_code.valid); - - let ping_actor = env - .create_program(uploaded_code.code_id, 500_000_000_000_000) - .await - .unwrap() - .wait_for() - .await - .unwrap(); - assert_eq!(ping_actor.code_id, uploaded_code.code_id); - - // Stop previous validators - for mut node in validators.into_iter() { - node.stop_service().await; - } - - // Check that next validators can submit transactions - env.validators = next_validators_configs; - let mut new_validators = vec![]; - for (i, v) in env.validators.clone().into_iter().enumerate() { - log::info!("📗 Starting validator-{i}"); - let mut validator = env.new_node(NodeConfig::named(format!("validator-{i}")).validator(v)); - validator.start_service().await; - new_validators.push(validator); - } - - env.provider - .anvil_set_next_block_timestamp(era_duration + genesis_ts) - .await - .unwrap(); - env.force_new_block().await; - - let reply = env - .send_message(ping_actor.program_id, b"PING") - .await - .expect("pong reply") - .wait_for() - .await - .expect("reply info"); - - assert_eq!(reply.payload, b"PONG"); - assert_eq!(reply.program_id, ping_actor.program_id); -} - #[tokio::test(flavor = "multi_thread")] #[ntest::timeout(60_000)] async fn execution_with_canonical_events_quarantine() { @@ -1895,7 +1755,7 @@ async fn execution_with_canonical_events_quarantine() { let mut env = TestEnv::new(config).await.unwrap(); log::info!("📗 Starting validator"); - let mut validator = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut validator = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); validator.start_service().await; let uploaded_code = env @@ -2012,7 +1872,7 @@ async fn value_send_program_to_program() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -2158,7 +2018,7 @@ async fn value_send_delayed() { let mut env = TestEnv::new(Default::default()).await.unwrap(); - let mut node = env.new_node(NodeConfig::default().validator(env.validators[0])); + let mut node = env.new_node(NodeConfig::default().validator(env.validators[0].clone())); node.start_service().await; let res = env @@ -2338,7 +2198,7 @@ async fn injected_tx_fungible_token() { let mut node = env.new_node( NodeConfig::default() .service_rpc(8090) - .validator(env.validators[0]), + .validator(env.validators[0].clone()), ); node.start_service().await; let rpc_client = node.rpc_http_client().expect("RPC client provide by node"); @@ -2558,7 +2418,7 @@ async fn injected_tx_fungible_token_over_network() { .expect("RPC client provide by node"); let bob_pubkey = env.validators[0].public_key; - let mut bob_node = env.new_node(NodeConfig::named("Bob").validator(env.validators[0])); + let mut bob_node = env.new_node(NodeConfig::named("Bob").validator(env.validators[0].clone())); bob_node.start_service().await; // 1. Create Fungible token config @@ -2685,7 +2545,7 @@ async fn injected_tx_fungible_token_over_network() { } #[tokio::test(flavor = "multi_thread")] -#[ntest::timeout(120_000)] +#[ntest::timeout(180_000)] async fn announces_conflicts() { init_logger(); @@ -3109,6 +2969,39 @@ async fn catch_up_test_case(commitment_delay_limit: u32) { .await .map(|r| r.transaction_hash.0.into()) } + + async fn commit_frost( + mut self: Box, + batch: BatchCommitment, + signature96: [u8; 96], + ) -> anyhow::Result { + log::info!("📗 LateCommitter wait for signal to commit ..."); + self.wait_signal_sender.send(()).unwrap(); + self.commit_signal_receiver + .lock() + .await + .recv() + .await + .unwrap(); + + log::info!( + "📗 LateCommitter committing batch {}: {:?}", + batch.to_digest(), + batch + ); + let pending = self + .router + .commit_batch_frost_pending(batch, signature96) + .await; + + self.wait_signal_sender.send(()).unwrap(); + + log::info!("📗 LateCommitter waiting for transaction to be applied ..."); + pending? + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } } let config = TestEnvConfig { @@ -3119,7 +3012,7 @@ async fn catch_up_test_case(commitment_delay_limit: u32) { let mut env = TestEnv::new(config).await.unwrap(); log::info!("📗 Starting Alice"); - let mut alice = env.new_node(NodeConfig::named("Alice").validator(env.validators[0])); + let mut alice = env.new_node(NodeConfig::named("Alice").validator(env.validators[0].clone())); alice.start_service().await; log::info!("📗 Starting Bob"); diff --git a/ethexe/service/src/tests/storage_cache.rs b/ethexe/service/src/tests/storage_cache.rs new file mode 100644 index 00000000000..a9a1d59005f --- /dev/null +++ b/ethexe/service/src/tests/storage_cache.rs @@ -0,0 +1,244 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Validator storage and cache integration tests. + +use crate::tests::utils::{ + EnvNetworkConfig, InfiniteStreamExt, NodeConfig, TestEnv, TestEnvConfig, TestingEvent, + ValidatorsConfig, init_logger, +}; +use alloy::providers::ext::AnvilApi; +use ethexe_common::{ + crypto::{DkgSessionId, PreNonceCommitment, SignAggregate, SignKind, SignSessionRequest}, + db::{ + DkgSessionState, DkgStorageRO, DkgStorageRW, OnChainStorageRO, SignStorageRO, SignStorageRW, + }, + network::ValidatorMessage, +}; +use ethexe_consensus::ConsensusEvent; +use ethexe_dkg_roast::roast::select_leader; +use gprimitives::{ActorId, H256}; + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(120_000)] +async fn roast_cache_eviction_still_signs() { + init_logger(); + + let config = TestEnvConfig { + validators: ValidatorsConfig::PreDefined(1), + network: EnvNetworkConfig::Enabled, + ..Default::default() + }; + let mut env = TestEnv::new(config).await.unwrap(); + + let mut validator = + env.new_node(NodeConfig::named("validator").validator(env.validators[0].clone())); + validator.start_service().await; + + let timelines = env.db.protocol_timelines().expect("timelines missing"); + let target_era = 5; + let target_ts = timelines.genesis_ts + timelines.era * target_era; + + let target = ActorId::zero(); + let old_msg_hash0 = H256::random(); + let old_msg_hash1 = H256::random(); + let old_aggregate0 = SignAggregate { + session: DkgSessionId { era: 0 }, + msg_hash: old_msg_hash0, + tweaked_pk: [1u8; 33], + signature96: [2u8; 96], + }; + let old_aggregate1 = SignAggregate { + session: DkgSessionId { era: 1 }, + msg_hash: old_msg_hash1, + tweaked_pk: [3u8; 33], + signature96: [4u8; 96], + }; + let old_pre_nonces = vec![PreNonceCommitment { + commitments: vec![0xAA; 32], + nonces: vec![0xBB; 64], + }]; + + validator + .db + .set_signature_cache(0, target, old_msg_hash0, old_aggregate0); + validator + .db + .set_signature_cache(1, target, old_msg_hash1, old_aggregate1); + validator + .db + .set_pre_nonce_cache(0, target, old_pre_nonces.clone()); + validator + .db + .set_pre_nonce_cache(1, target, old_pre_nonces.clone()); + + let (next_configs, _commitment) = TestEnv::define_session_keys_for_era( + &env.signer, + vec![env.validators[0].public_key], + target_era, + ); + let next_public_key_package = next_configs[0].dkg_public_key_package.clone(); + let next_vss_commitment = next_configs[0].dkg_vss_commitment.clone(); + let next_key_package = next_configs[0].dkg_key_package.clone(); + let next_share = next_configs[0].dkg_share.clone(); + let next_session = DkgSessionId { era: target_era }; + + validator + .db + .set_public_key_package(next_session.era, next_public_key_package); + validator + .db + .set_dkg_vss_commitment(next_session.era, next_vss_commitment); + validator + .db + .set_dkg_key_package(next_session.era, next_key_package); + validator.db.set_dkg_share(next_share); + validator.db.set_dkg_session_state( + next_session, + DkgSessionState { + completed: true, + ..Default::default() + }, + ); + + env.provider + .anvil_set_next_block_timestamp(target_ts) + .await + .unwrap(); + env.force_new_block().await; + + let uploaded_code = env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + let reply = env + .send_message(ping_actor.program_id, b"PING") + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert_eq!(reply.payload, b"PONG"); + + assert!( + validator + .db + .signature_cache(0, target, old_msg_hash0) + .is_none() + ); + assert!( + validator + .db + .signature_cache(1, target, old_msg_hash1) + .is_none() + ); + assert!(validator.db.pre_nonce_cache(0, target).is_none()); + assert!(validator.db.pre_nonce_cache(1, target).is_none()); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(90_000)] +async fn missing_share_triggers_warning_and_recovers() { + init_logger(); + + let config = TestEnvConfig { + validators: ValidatorsConfig::PreDefined(1), + network: EnvNetworkConfig::Enabled, + ..Default::default() + }; + let mut env = TestEnv::new(config).await.unwrap(); + + let mut validator = + env.new_node(NodeConfig::named("validator").validator(env.validators[0].clone())); + validator.start_service().await; + let mut events = validator.new_events(); + + let mut share = validator.db.dkg_share(0).expect("missing share"); + let original_share = share.clone(); + share.index = share.index.saturating_add(1); + validator.db.set_dkg_share(share); + + let participants = vec![env.validators[0].public_key.to_address()]; + let msg_hash = H256::random(); + let request = SignSessionRequest { + session: DkgSessionId { era: 0 }, + leader: select_leader(&participants, msg_hash, 0, 0), + attempt: 0, + msg_hash, + tweak_target: ActorId::zero(), + threshold: original_share.threshold, + participants, + kind: SignKind::ArbitraryHash, + }; + let publisher = + env.new_node(NodeConfig::named("publisher").validator(env.validators[0].clone())); + publisher + .publish_validator_message(ValidatorMessage { + era_index: 0, + payload: request, + }) + .await; + + let warning = tokio::time::timeout(env.block_time * 5, async { + events + .find_map(|event| match event { + TestingEvent::Consensus(ConsensusEvent::Warning(msg)) => Some(msg), + _ => None, + }) + .await + }) + .await + .expect("warning not observed"); + assert!( + warning.contains("DKG share index mismatch") + || warning.contains("Missing DKG share details") + || warning.contains("Key package identifier mismatch") + || warning.contains("Missing key package"), + "unexpected warning: {warning}" + ); + + let session = DkgSessionId { era: 0 }; + tokio::time::timeout(env.block_time * 5, async { + loop { + let completed = validator + .db + .dkg_session_state(session) + .map(|state| state.completed) + .unwrap_or(false); + if !completed { + break; + } + tokio::time::sleep(env.block_time / 2).await; + } + }) + .await + .expect("DKG session was not reset after restart"); +} diff --git a/ethexe/service/src/tests/utils/env.rs b/ethexe/service/src/tests/utils/env.rs index 9fbd96d3fbe..a27cb982856 100644 --- a/ethexe/service/src/tests/utils/env.rs +++ b/ethexe/service/src/tests/utils/env.rs @@ -16,13 +16,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use crate::{ - RouterDataProvider, Service, - tests::utils::{ - InfiniteStreamExt, TestingEvent, TestingNetworkEvent, events, - events::{ObserverEventReceiver, ObserverEventSender, TestingEventReceiver}, - }, +use super::{ + InfiniteStreamExt, TestingEvent, TestingNetworkEvent, events, + events::{ObserverEventReceiver, ObserverEventSender, TestingEventReceiver}, }; +use crate::{RouterDataProvider, Service}; use alloy::{ node_bindings::{Anvil, AnvilInstance}, providers::{ProviderBuilder, RootProvider, ext::AnvilApi}, @@ -34,6 +32,8 @@ use ethexe_common::{ Address, COMMITMENT_DELAY_LIMIT, CodeAndId, DEFAULT_BLOCK_GAS_LIMIT, SimpleBlockData, ToDigest, ValidatorsVec, consensus::DEFAULT_CHAIN_DEEPNESS_THRESHOLD, + crypto::{DkgKeyPackage, DkgPublicKeyPackage, DkgSessionId, DkgShare, DkgVssCommitment}, + db::{DkgSessionState, DkgStorageRW}, ecdsa::{PrivateKey, PublicKey, SignedData}, events::{ BlockEvent, MirrorEvent, RouterEvent, @@ -623,6 +623,14 @@ impl TestEnv { pub fn define_session_keys( signer: &Signer, validators: Vec, + ) -> (Vec, VerifiableSecretSharingCommitment) { + Self::define_session_keys_for_era(signer, validators, 0) + } + + pub fn define_session_keys_for_era( + signer: &Signer, + validators: Vec, + era: u64, ) -> (Vec, VerifiableSecretSharingCommitment) { let max_signers: u16 = validators.len().try_into().expect("conversion failed"); let min_signers = max_signers @@ -632,9 +640,7 @@ impl TestEnv { let maybe_validator_identifiers: anyhow::Result, _> = validators .iter() - .map(|public_key| { - Identifier::deserialize(&ActorId::from(public_key.to_address()).into_bytes()) - }) + .map(|public_key| Identifier::derive(public_key.to_address().as_ref())) .collect(); let validator_identifiers = maybe_validator_identifiers.expect("conversion failed"); let identifiers = IdentifierList::Custom(&validator_identifiers); @@ -659,18 +665,48 @@ impl TestEnv { .expect("conversion failed"); assert_eq!(public_key_package1, public_key_package2); + let mut sorted_addresses: Vec
= validators + .iter() + .map(|public_key| public_key.to_address()) + .collect(); + sorted_addresses.sort(); + let address_index: std::collections::BTreeMap<_, _> = sorted_addresses + .into_iter() + .enumerate() + .map(|(idx, addr)| (addr, idx.saturating_add(1))) + .collect(); + ( validators .into_iter() .zip(validator_identifiers.iter()) .map(|(public_key, id)| { - let signing_share = *secret_shares[id].signing_share(); + let secret_share = secret_shares.get(id).expect("missing secret share").clone(); + let key_package = + DkgKeyPackage::try_from(secret_share.clone()).expect("key package failed"); + let signing_share = *secret_share.signing_share(); let seed: [u8; 32] = <[u8; 32]>::try_from(signing_share.serialize()).unwrap(); let private_key = PrivateKey::from_seed(seed).expect("signing share must be valid seed"); + let address = public_key.to_address(); + let index = *address_index.get(&address).expect("missing address index"); + let verifying_share = key_package.verifying_share(); ValidatorConfig { public_key, session_public_key: signer.import(private_key).unwrap(), + dkg_key_package: key_package.clone(), + dkg_share: DkgShare { + era, + identifier: *id, + index: index as u16, + signing_share: signing_share.serialize().to_vec(), + verifying_share: verifying_share + .serialize() + .expect("verifying share serialization failed"), + threshold: min_signers, + }, + dkg_public_key_package: public_key_package1.clone(), + dkg_vss_commitment: verifiable_secret_sharing_commitment.clone(), } }) .collect(), @@ -792,8 +828,8 @@ impl NodeConfig { self } - pub fn validator(mut self, config: ValidatorConfig) -> Self { - self.validator_config = Some(config); + pub fn validator(mut self, config: impl Into) -> Self { + self.validator_config = Some(config.into()); self } @@ -819,12 +855,22 @@ impl NodeConfig { } } -#[derive(Clone, Copy, PartialEq, Eq, Debug)] +#[derive(Clone, PartialEq, Eq, Debug)] pub struct ValidatorConfig { /// Validator public key. pub public_key: PublicKey, /// Validator session public key. pub session_public_key: PublicKey, + pub dkg_key_package: DkgKeyPackage, + pub dkg_share: DkgShare, + pub dkg_public_key_package: DkgPublicKeyPackage, + pub dkg_vss_commitment: DkgVssCommitment, +} + +impl From<&ValidatorConfig> for ValidatorConfig { + fn from(value: &ValidatorConfig) -> Self { + value.clone() + } } /// Provides access to hardcoded anvil wallets or custom set wallets. @@ -917,6 +963,24 @@ impl Node { .await .unwrap(); + if let Some(config) = self.validator_config.as_ref() { + let era = config.dkg_share.era; + self.db + .set_public_key_package(era, config.dkg_public_key_package.clone()); + self.db + .set_dkg_vss_commitment(era, config.dkg_vss_commitment.clone()); + self.db + .set_dkg_key_package(era, config.dkg_key_package.clone()); + self.db.set_dkg_share(config.dkg_share.clone()); + self.db.set_dkg_session_state( + DkgSessionId { era }, + DkgSessionState { + completed: true, + ..Default::default() + }, + ); + } + let consensus: Pin> = { if let Some(config) = self.validator_config.as_ref() { let committer = if let Some(custom_committer) = self.custom_committer.take() { @@ -1148,6 +1212,7 @@ impl Node { .signer .signed_data( self.validator_config + .as_ref() .expect("validator config not set") .public_key, message, @@ -1292,8 +1357,8 @@ impl WaitForReplyTo { let info = self .receiver - .filter_map_block_synced() - .find_map(|event| match event { + .filter_map_block_synced_with_header() + .find_map(|(event, block)| match event { BlockEvent::Mirror { actor_id, event: @@ -1303,14 +1368,34 @@ impl WaitForReplyTo { reply_code, value, }), - } if reply_to == self.message_id => Some(ReplyInfo { - message_id: reply_to, - program_id: actor_id, - payload, - code: reply_code, - value, - }), - _ => None, + } => { + log::debug!( + "📗 Observed reply in block {}, reply_to {}, waiting for {}", + block.hash, + reply_to, + self.message_id + ); + if reply_to == self.message_id { + Some(ReplyInfo { + message_id: reply_to, + program_id: actor_id, + payload, + code: reply_code, + value, + }) + } else { + None + } + } + other => { + log::trace!( + "📗 Block {} event while waiting for reply {}: {:?}", + block.hash, + self.message_id, + other + ); + None + } }) .await; diff --git a/ethexe/service/src/tests/utils/events.rs b/ethexe/service/src/tests/utils/events.rs index eb1bd74d8b7..f5db87d783d 100644 --- a/ethexe/service/src/tests/utils/events.rs +++ b/ethexe/service/src/tests/utils/events.rs @@ -204,7 +204,9 @@ pub struct EventSender { impl EventSender { pub async fn send(&self, event: T) { - self.inner.broadcast_direct(event).await.unwrap(); + if let Err(err) = self.inner.broadcast_direct(event).await { + tracing::trace!("dropping event send: {err}"); + } } } diff --git a/ethexe/service/src/tests/validators_commitment.rs b/ethexe/service/src/tests/validators_commitment.rs new file mode 100644 index 00000000000..0df774182fb --- /dev/null +++ b/ethexe/service/src/tests/validators_commitment.rs @@ -0,0 +1,851 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Validators commitment integration tests. + +use crate::tests::utils::{ + EnvNetworkConfig, InfiniteStreamExt, NodeConfig, ObserverEventReceiver, TestEnv, TestEnvConfig, + ValidatorsConfig, Wallets, init_logger, +}; +use alloy::providers::{Provider as _, ext::AnvilApi}; +use ethexe_common::{ + ContractSignature, + crypto::{DkgPublicKeyPackage, DkgSessionId, DkgVssCommitment}, + db::{DkgSessionState, DkgStorageRW}, + ecdsa::PublicKey, + events::{BlockEvent, RouterEvent}, + gear::{AggregatedPublicKey, BatchCommitment}, +}; +use ethexe_consensus::BatchCommitter; +use ethexe_ethereum::{TryGetReceipt, deploy::ContractsDeploymentParams, router::Router}; +use gprimitives::{H256, U256}; +use gsigner::secp256k1::Signer; +use std::sync::Arc; +use tokio::sync::Mutex; + +async fn run_validators_commitment_with_committer_and_events( + committer_factory: impl Fn(Router) -> Box, +) -> (TestEnv, ObserverEventReceiver) { + let election_ts = 20 * 60 * 60; + let era_duration = 24 * 60 * 60; + let deploy_params = ContractsDeploymentParams { + with_middleware: true, + era_duration, + election_duration: era_duration - election_ts, + }; + + let signer = Signer::memory(); + let mut wallets = Wallets::anvil(&signer); + + let current_validators: Vec<_> = (0..5).map(|_| wallets.next()).collect(); + let next_validators: Vec<_> = (0..5).map(|_| wallets.next()).collect(); + + let env_config = TestEnvConfig { + validators: ValidatorsConfig::ProvidedValidators(current_validators), + deploy_params, + network: EnvNetworkConfig::Enabled, + signer: signer.clone(), + ..Default::default() + }; + let mut env = TestEnv::new(env_config).await.unwrap(); + + let genesis_block_hash = env + .ethereum + .router() + .query() + .genesis_block_hash() + .await + .unwrap(); + let genesis_ts = env + .provider + .get_block_by_hash(genesis_block_hash.0.into()) + .await + .unwrap() + .unwrap() + .header + .timestamp; + + let mut validators = vec![]; + for (i, v) in env.validators.clone().into_iter().enumerate() { + log::info!("📗 Starting validator-{i}"); + let mut validator = env.new_node(NodeConfig::named(format!("validator-{i}")).validator(v)); + validator.custom_committer = Some(committer_factory(env.ethereum.router())); + validator.start_service().await; + validators.push(validator); + } + + let (next_validators_configs, _commitment) = + TestEnv::define_session_keys_for_era(&signer, next_validators, 1); + let next_public_key_package = next_validators_configs[0].dkg_public_key_package.clone(); + let next_vss_commitment = next_validators_configs[0].dkg_vss_commitment.clone(); + let next_dkg_session = DkgSessionId { era: 1 }; + + let next_validators: Vec<_> = next_validators_configs + .iter() + .map(|cfg| cfg.public_key.to_address()) + .collect(); + + env.election_provider + .set_predefined_election_at( + election_ts + genesis_ts, + next_validators.try_into().unwrap(), + ) + .await; + + env.provider + .anvil_set_next_block_timestamp(election_ts + genesis_ts) + .await + .unwrap(); + + for validator in validators.iter_mut() { + validator + .db + .set_public_key_package(next_dkg_session.era, next_public_key_package.clone()); + validator + .db + .set_dkg_vss_commitment(next_dkg_session.era, next_vss_commitment.clone()); + validator.db.set_dkg_session_state( + next_dkg_session, + DkgSessionState { + completed: true, + ..Default::default() + }, + ); + } + + let observer_events = env.new_observer_events(); + env.force_new_block().await; + (env, observer_events) +} + +async fn run_validators_commitment_with_committer( + committer_factory: impl Fn(Router) -> Box, +) -> TestEnv { + let (env, _) = run_validators_commitment_with_committer_and_events(committer_factory).await; + env +} + +fn aggregated_key_from_package(package: &DkgPublicKeyPackage) -> AggregatedPublicKey { + let public_key_compressed: [u8; 33] = package + .verifying_key() + .serialize() + .expect("verifying key serialization failed") + .try_into() + .expect("invalid aggregated public key length"); + let public_key_uncompressed = PublicKey::from_bytes(public_key_compressed) + .expect("valid aggregated public key") + .to_uncompressed(); + let (public_key_x_bytes, public_key_y_bytes) = public_key_uncompressed.split_at(32); + + AggregatedPublicKey { + x: U256::from_big_endian(public_key_x_bytes), + y: U256::from_big_endian(public_key_y_bytes), + } +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(90_000)] +async fn validators_commitment_rejected_with_wrong_validators() { + init_logger(); + + #[derive(Clone)] + struct WrongValidatorsCommitter { + router: Router, + } + + #[async_trait::async_trait] + impl BatchCommitter for WrongValidatorsCommitter { + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } + + async fn commit( + self: Box, + batch: BatchCommitment, + signatures: Vec, + ) -> anyhow::Result { + let pending = self.router.commit_batch_pending(batch, signatures).await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + + async fn commit_frost( + self: Box, + mut batch: BatchCommitment, + signature96: [u8; 96], + ) -> anyhow::Result { + if let Some(commitment) = batch.validators_commitment.as_mut() { + let mut validators: Vec<_> = commitment.validators.iter().copied().collect(); + if validators.len() > 1 { + let last = validators.len() - 1; + validators.swap(0, last); + commitment.validators = validators + .try_into() + .expect("validators list must remain non-empty"); + } + } + let pending = self + .router + .commit_batch_frost_pending(batch, signature96) + .await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + } + + let env = run_validators_commitment_with_committer(|router| { + Box::new(WrongValidatorsCommitter { router }) + }) + .await; + + tokio::time::timeout( + env.block_time * 5, + env.new_observer_events() + .filter_map_block_synced() + .find(|event| { + matches!( + event, + BlockEvent::Router(RouterEvent::ValidatorsCommittedForEra(_)) + ) + }), + ) + .await + .expect_err("Commitment should be rejected with wrong validators"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(90_000)] +async fn validators_commitment_rejected_with_bad_vss() { + init_logger(); + + #[derive(Clone)] + struct BadVssCommitter { + router: Router, + } + + #[async_trait::async_trait] + impl BatchCommitter for BadVssCommitter { + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } + + async fn commit( + self: Box, + batch: BatchCommitment, + signatures: Vec, + ) -> anyhow::Result { + let pending = self.router.commit_batch_pending(batch, signatures).await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + + async fn commit_frost( + self: Box, + mut batch: BatchCommitment, + signature96: [u8; 96], + ) -> anyhow::Result { + if let Some(commitment) = batch.validators_commitment.as_mut() { + let mut serialized = commitment + .verifiable_secret_sharing_commitment + .serialize() + .unwrap(); + if let Some(first_coeff) = serialized.first_mut() + && let Some(first_byte) = first_coeff.first_mut() + { + *first_byte ^= 0x01; + } + commitment.verifiable_secret_sharing_commitment = + DkgVssCommitment::deserialize(serialized).unwrap(); + } + let pending = self + .router + .commit_batch_frost_pending(batch, signature96) + .await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + } + + let env = + run_validators_commitment_with_committer(|router| Box::new(BadVssCommitter { router })) + .await; + + tokio::time::timeout( + env.block_time * 5, + env.new_observer_events() + .filter_map_block_synced() + .find(|event| { + matches!( + event, + BlockEvent::Router(RouterEvent::ValidatorsCommittedForEra(_)) + ) + }), + ) + .await + .expect_err("Commitment should be rejected with bad VSS commitment"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(90_000)] +async fn validators_commitment_rejected_with_wrong_era() { + init_logger(); + + #[derive(Clone)] + struct WrongEraCommitter { + router: Router, + } + + #[async_trait::async_trait] + impl BatchCommitter for WrongEraCommitter { + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } + + async fn commit( + self: Box, + batch: BatchCommitment, + signatures: Vec, + ) -> anyhow::Result { + let pending = self.router.commit_batch_pending(batch, signatures).await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + + async fn commit_frost( + self: Box, + mut batch: BatchCommitment, + signature96: [u8; 96], + ) -> anyhow::Result { + if let Some(commitment) = batch.validators_commitment.as_mut() { + commitment.era_index = commitment.era_index.saturating_add(1); + } + let pending = self + .router + .commit_batch_frost_pending(batch, signature96) + .await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + } + + let env = + run_validators_commitment_with_committer(|router| Box::new(WrongEraCommitter { router })) + .await; + + tokio::time::timeout( + env.block_time * 5, + env.new_observer_events() + .filter_map_block_synced() + .find(|event| { + matches!( + event, + BlockEvent::Router(RouterEvent::ValidatorsCommittedForEra(_)) + ) + }), + ) + .await + .expect_err("Commitment should be rejected with wrong era index"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(90_000)] +async fn validators_commitment_rejected_with_bad_public_key() { + init_logger(); + + #[derive(Clone)] + struct BadPublicKeyCommitter { + router: Router, + } + + #[async_trait::async_trait] + impl BatchCommitter for BadPublicKeyCommitter { + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } + + async fn commit( + self: Box, + batch: BatchCommitment, + signatures: Vec, + ) -> anyhow::Result { + let pending = self.router.commit_batch_pending(batch, signatures).await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + + async fn commit_frost( + self: Box, + mut batch: BatchCommitment, + signature96: [u8; 96], + ) -> anyhow::Result { + if let Some(commitment) = batch.validators_commitment.as_mut() { + commitment.aggregated_public_key = AggregatedPublicKey { + x: U256::from(1u64), + y: commitment.aggregated_public_key.y, + }; + } + let pending = self + .router + .commit_batch_frost_pending(batch, signature96) + .await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + } + + let env = run_validators_commitment_with_committer(|router| { + Box::new(BadPublicKeyCommitter { router }) + }) + .await; + + tokio::time::timeout( + env.block_time * 5, + env.new_observer_events() + .filter_map_block_synced() + .find(|event| { + matches!( + event, + BlockEvent::Router(RouterEvent::ValidatorsCommittedForEra(_)) + ) + }), + ) + .await + .expect_err("Commitment should be rejected with bad aggregated public key"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(90_000)] +async fn validators_commitment_rejected_with_pk_mismatch() { + init_logger(); + + let alt_signer = Signer::memory(); + let mut wallets = Wallets::anvil(&alt_signer); + let alt_validators: Vec<_> = (0..5).map(|_| wallets.next()).collect(); + let (alt_configs, _) = TestEnv::define_session_keys_for_era(&alt_signer, alt_validators, 1); + let mismatched_key = aggregated_key_from_package(&alt_configs[0].dkg_public_key_package); + + #[derive(Clone)] + struct PkMismatchCommitter { + router: Router, + mismatched_key: AggregatedPublicKey, + } + + #[async_trait::async_trait] + impl BatchCommitter for PkMismatchCommitter { + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } + + async fn commit( + self: Box, + batch: BatchCommitment, + signatures: Vec, + ) -> anyhow::Result { + let pending = self.router.commit_batch_pending(batch, signatures).await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + + async fn commit_frost( + self: Box, + mut batch: BatchCommitment, + signature96: [u8; 96], + ) -> anyhow::Result { + if let Some(commitment) = batch.validators_commitment.as_mut() { + commitment.aggregated_public_key = self.mismatched_key; + } + let pending = self + .router + .commit_batch_frost_pending(batch, signature96) + .await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + } + + let env = run_validators_commitment_with_committer(|router| { + Box::new(PkMismatchCommitter { + router, + mismatched_key: mismatched_key.clone(), + }) + }) + .await; + + tokio::time::timeout( + env.block_time * 5, + env.new_observer_events() + .filter_map_block_synced() + .find(|event| { + matches!( + event, + BlockEvent::Router(RouterEvent::ValidatorsCommittedForEra(_)) + ) + }), + ) + .await + .expect_err("Commitment should be rejected with mismatched public key package"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(90_000)] +async fn validators_commitment_rejected_with_wrong_block_hash() { + init_logger(); + + #[derive(Clone)] + struct WrongBlockHashCommitter { + router: Router, + } + + #[async_trait::async_trait] + impl BatchCommitter for WrongBlockHashCommitter { + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } + + async fn commit( + self: Box, + batch: BatchCommitment, + signatures: Vec, + ) -> anyhow::Result { + let pending = self.router.commit_batch_pending(batch, signatures).await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + + async fn commit_frost( + self: Box, + mut batch: BatchCommitment, + signature96: [u8; 96], + ) -> anyhow::Result { + batch.block_hash = H256::random(); + let pending = self + .router + .commit_batch_frost_pending(batch, signature96) + .await?; + pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into()) + } + } + + let env = run_validators_commitment_with_committer(|router| { + Box::new(WrongBlockHashCommitter { router }) + }) + .await; + + tokio::time::timeout( + env.block_time * 5, + env.new_observer_events() + .filter_map_block_synced() + .find(|event| { + matches!( + event, + BlockEvent::Router(RouterEvent::ValidatorsCommittedForEra(_)) + ) + }), + ) + .await + .expect_err("Commitment should be rejected with wrong block hash"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(90_000)] +async fn duplicate_validators_commitment_is_rejected() { + init_logger(); + + #[derive(Clone)] + enum CommitRecord { + Frost(BatchCommitment, [u8; 96]), + Ecdsa(BatchCommitment, Vec), + } + + #[derive(Clone)] + struct DuplicateCommitter { + router: Router, + record: Arc>>, + } + + #[async_trait::async_trait] + impl BatchCommitter for DuplicateCommitter { + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } + + async fn commit( + self: Box, + batch: BatchCommitment, + signatures: Vec, + ) -> anyhow::Result { + let batch_clone = batch.clone(); + let signatures_clone = signatures.clone(); + + let mut record = self.record.lock().await; + if record.is_none() { + *record = Some(CommitRecord::Ecdsa(batch_clone, signatures_clone)); + } + drop(record); + + let pending = self.router.commit_batch_pending(batch, signatures).await?; + let receipt = pending + .try_get_receipt_check_reverted() + .await + .map(|r| r.transaction_hash.0.into())?; + + Ok(receipt) + } + + async fn commit_frost( + self: Box, + batch: BatchCommitment, + signature96: [u8; 96], + ) -> anyhow::Result { + let mut record = self.record.lock().await; + if record.is_none() { + *record = Some(CommitRecord::Frost(batch.clone(), signature96)); + } + drop(record); + + let pending = self + .router + .commit_batch_frost_pending(batch.clone(), signature96) + .await?; + let receipt = pending.try_get_receipt_check_reverted().await?; + + Ok(receipt.transaction_hash.0.into()) + } + } + + let record = Arc::new(Mutex::new(None)); + let record_handle = record.clone(); + + let config = TestEnvConfig { + validators: ValidatorsConfig::PreDefined(1), + network: EnvNetworkConfig::Enabled, + ..Default::default() + }; + let mut env = TestEnv::new(config).await.unwrap(); + + let genesis_block_hash = env + .ethereum + .router() + .query() + .genesis_block_hash() + .await + .unwrap(); + let genesis_ts = env + .provider + .get_block_by_hash(genesis_block_hash.0.into()) + .await + .unwrap() + .unwrap() + .header + .timestamp; + + let mut validator = + env.new_node(NodeConfig::named("validator").validator(env.validators[0].clone())); + validator.custom_committer = Some(Box::new(DuplicateCommitter { + router: env.ethereum.router(), + record: record.clone(), + })); + validator.start_service().await; + + let next_validators: Vec<_> = vec![env.validators[0].public_key]; + let (next_configs, _commitment) = + TestEnv::define_session_keys_for_era(&env.signer, next_validators, 1); + let next_public_key_package = next_configs[0].dkg_public_key_package.clone(); + let next_vss_commitment = next_configs[0].dkg_vss_commitment.clone(); + let next_dkg_session = DkgSessionId { era: 1 }; + + let next_addresses: Vec<_> = next_configs + .iter() + .map(|cfg| cfg.public_key.to_address()) + .collect(); + + env.election_provider + .set_predefined_election_at( + 20 * 60 * 60 + genesis_ts, + next_addresses.try_into().unwrap(), + ) + .await; + + env.provider + .anvil_set_next_block_timestamp(20 * 60 * 60 + genesis_ts) + .await + .unwrap(); + + validator + .db + .set_public_key_package(next_dkg_session.era, next_public_key_package); + validator + .db + .set_dkg_vss_commitment(next_dkg_session.era, next_vss_commitment); + validator.db.set_dkg_session_state( + next_dkg_session, + DkgSessionState { + completed: true, + ..Default::default() + }, + ); + + env.force_new_block().await; + + let initial_hash = env + .ethereum + .router() + .query() + .latest_committed_batch_hash() + .await + .unwrap(); + + let uploaded_code = env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + + let pending = env + .send_message(ping_actor.program_id, b"PING") + .await + .unwrap(); + + tokio::time::timeout(env.block_time * 10, pending.wait_for()) + .await + .expect("expected ping reply") + .unwrap(); + + let record = tokio::time::timeout(env.block_time * 30, async { + loop { + if let Some(record) = record_handle.lock().await.clone() { + break record; + } + env.force_new_block().await; + tokio::time::sleep(env.block_time / 2).await; + } + }) + .await + .expect("commit batch should be recorded"); + + tokio::time::timeout(env.block_time * 10, async { + loop { + let hash = env + .ethereum + .router() + .query() + .latest_committed_batch_hash() + .await + .unwrap(); + if hash != initial_hash { + break; + } + tokio::time::sleep(env.block_time / 2).await; + } + }) + .await + .expect("initial validators commitment should succeed"); + + match record { + CommitRecord::Frost(batch, signature96) => { + let duplicate = env + .ethereum + .router() + .commit_batch_frost_pending(batch, signature96) + .await; + match duplicate { + Ok(pending) => { + let err = pending + .try_get_receipt_check_reverted() + .await + .expect_err("duplicate commitment unexpectedly succeeded"); + assert!( + err.to_string() + .contains("invalid previous committed batch hash"), + "unexpected revert reason: {err}" + ); + } + Err(err) => { + assert!( + err.to_string() + .contains("invalid previous committed batch hash"), + "unexpected submit error: {err}" + ); + } + } + } + CommitRecord::Ecdsa(batch, signatures) => { + let duplicate = env + .ethereum + .router() + .commit_batch_pending(batch, signatures) + .await; + match duplicate { + Ok(pending) => { + let err = pending + .try_get_receipt_check_reverted() + .await + .expect_err("duplicate commitment unexpectedly succeeded"); + assert!( + err.to_string() + .contains("invalid previous committed batch hash"), + "unexpected revert reason: {err}" + ); + } + Err(err) => { + assert!( + err.to_string() + .contains("invalid previous committed batch hash"), + "unexpected submit error: {err}" + ); + } + } + } + } +} diff --git a/ethexe/service/src/tests/validators_election.rs b/ethexe/service/src/tests/validators_election.rs new file mode 100644 index 00000000000..8fc5c677927 --- /dev/null +++ b/ethexe/service/src/tests/validators_election.rs @@ -0,0 +1,600 @@ +// This file is part of Gear. +// +// Copyright (C) 2024-2025 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Validator election integration tests. + +use crate::tests::utils::{ + EnvNetworkConfig, InfiniteStreamExt, Node, NodeConfig, TestEnv, TestEnvConfig, ValidatorConfig, + ValidatorsConfig, Wallets, init_logger, +}; +use alloy::providers::{Provider as _, ext::AnvilApi}; +use anyhow::Result; +use ethexe_common::{ + Address, ValidatorsVec, + crypto::{DkgPublicKeyPackage, DkgSessionId, DkgVssCommitment}, + db::{DkgSessionState, DkgStorageRW}, + events::{BlockEvent, RouterEvent}, +}; +use ethexe_ethereum::deploy::ContractsDeploymentParams; +use gsigner::secp256k1::Signer; +use std::{collections::BTreeSet, time::Duration}; + +struct ElectionEnv { + env: TestEnv, + validators: Vec, + next_validators_configs: Vec, + next_public_key_package: DkgPublicKeyPackage, + next_vss_commitment: DkgVssCommitment, + next_dkg_session: DkgSessionId, + election_ts: u64, + era_duration: u64, + genesis_ts: u64, +} + +async fn setup_election_env() -> ElectionEnv { + let election_ts = 20 * 60 * 60; + let era_duration = 24 * 60 * 60; + let deploy_params = ContractsDeploymentParams { + with_middleware: true, + era_duration, + election_duration: era_duration - election_ts, + }; + + let signer = Signer::memory(); + let mut wallets = Wallets::anvil(&signer); + + let current_validators: Vec<_> = (0..5).map(|_| wallets.next()).collect(); + let next_validators: Vec<_> = (0..5).map(|_| wallets.next()).collect(); + + let env_config = TestEnvConfig { + validators: ValidatorsConfig::ProvidedValidators(current_validators), + deploy_params, + network: EnvNetworkConfig::Enabled, + signer: signer.clone(), + ..Default::default() + }; + let mut env = TestEnv::new(env_config).await.unwrap(); + + let genesis_block_hash = env + .ethereum + .router() + .query() + .genesis_block_hash() + .await + .unwrap(); + let genesis_ts = env + .provider + .get_block_by_hash(genesis_block_hash.0.into()) + .await + .unwrap() + .unwrap() + .header + .timestamp; + + let mut validators = vec![]; + for (i, v) in env.validators.clone().into_iter().enumerate() { + log::info!("📗 Starting validator-{i}"); + let mut validator = env.new_node(NodeConfig::named(format!("validator-{i}")).validator(v)); + validator.start_service().await; + validators.push(validator); + } + + let (next_validators_configs, _commitment) = + TestEnv::define_session_keys_for_era(&signer, next_validators, 1); + let next_public_key_package = next_validators_configs[0].dkg_public_key_package.clone(); + let next_vss_commitment = next_validators_configs[0].dkg_vss_commitment.clone(); + let next_dkg_session = DkgSessionId { era: 1 }; + + ElectionEnv { + env, + validators, + next_validators_configs, + next_public_key_package, + next_vss_commitment, + next_dkg_session, + election_ts, + era_duration, + genesis_ts, + } +} + +fn validator_addresses(configs: &[ValidatorConfig]) -> Vec
{ + configs + .iter() + .map(|cfg| cfg.public_key.to_address()) + .collect() +} + +async fn seed_next_era_dkg(env: &mut ElectionEnv) { + for validator in env.validators.iter_mut() { + validator.db.set_public_key_package( + env.next_dkg_session.era, + env.next_public_key_package.clone(), + ); + validator + .db + .set_dkg_vss_commitment(env.next_dkg_session.era, env.next_vss_commitment.clone()); + validator.db.set_dkg_session_state( + env.next_dkg_session, + DkgSessionState { + completed: true, + ..Default::default() + }, + ); + } +} + +async fn apply_next_era_state(env: &mut ElectionEnv, next_validators: ValidatorsVec) { + env.env + .election_provider + .set_predefined_election_at(env.election_ts + env.genesis_ts, next_validators) + .await; + + env.env + .provider + .anvil_set_next_block_timestamp(env.election_ts + env.genesis_ts) + .await + .unwrap(); + + seed_next_era_dkg(env).await; + + env.env.force_new_block().await; +} + +async fn wait_for_validators_commit(env: &TestEnv) -> Result<(), tokio::time::error::Elapsed> { + tokio::time::timeout( + Duration::from_secs(20), + env.new_observer_events() + .filter_map_block_synced() + .find(|event| { + matches!( + event, + BlockEvent::Router(RouterEvent::ValidatorsCommittedForEra(_)) + ) + }), + ) + .await + .map(|_| ()) +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(180_000)] +async fn validators_election_quorum_with_offline_next_validator() { + init_logger(); + + let mut env = setup_election_env().await; + + let next_validators = validator_addresses(&env.next_validators_configs); + + apply_next_era_state(&mut env, next_validators.try_into().unwrap()).await; + + wait_for_validators_commit(&env.env) + .await + .expect("validators commitment should succeed"); + + let uploaded_code = env + .env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert_eq!(ping_actor.code_id, uploaded_code.code_id); + + for mut node in env.validators.into_iter() { + node.stop_service().await; + } + + env.env.validators = env.next_validators_configs; + let mut new_validators = vec![]; + for (i, v) in env.env.validators.clone().into_iter().enumerate() { + if i == 4 { + continue; + } + log::info!("📗 Starting validator-{i}"); + let mut validator = env + .env + .new_node(NodeConfig::named(format!("validator-{i}")).validator(v)); + validator.start_service().await; + new_validators.push(validator); + } + + env.env + .provider + .anvil_set_next_block_timestamp(env.era_duration + env.genesis_ts) + .await + .unwrap(); + env.env.force_new_block().await; + + let reply = env + .env + .send_message(ping_actor.program_id, b"PING") + .await + .expect("pong reply") + .wait_for() + .await + .expect("reply info"); + + assert_eq!(reply.payload, b"PONG"); + assert_eq!(reply.program_id, ping_actor.program_id); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(120_000)] +async fn validators_election_overwrites_invalid_update() { + init_logger(); + + let mut env = setup_election_env().await; + + let mut wrong_validators: Vec<_> = env + .next_validators_configs + .iter() + .map(|cfg| cfg.public_key.to_address()) + .collect(); + wrong_validators.pop(); + + let next_validators: Vec<_> = env + .next_validators_configs + .iter() + .map(|cfg| cfg.public_key.to_address()) + .collect(); + + env.env + .election_provider + .set_predefined_election_at( + env.election_ts + env.genesis_ts, + wrong_validators.try_into().unwrap(), + ) + .await; + env.env + .election_provider + .set_predefined_election_at( + env.election_ts + env.genesis_ts, + next_validators.clone().try_into().unwrap(), + ) + .await; + + env.env + .provider + .anvil_set_next_block_timestamp(env.election_ts + env.genesis_ts) + .await + .unwrap(); + + for validator in env.validators.iter_mut() { + validator.db.set_public_key_package( + env.next_dkg_session.era, + env.next_public_key_package.clone(), + ); + validator + .db + .set_dkg_vss_commitment(env.next_dkg_session.era, env.next_vss_commitment.clone()); + validator.db.set_dkg_session_state( + env.next_dkg_session, + DkgSessionState { + completed: true, + ..Default::default() + }, + ); + } + env.env.force_new_block().await; + + wait_for_validators_commit(&env.env) + .await + .expect("validators commitment should succeed with updated election"); + + env.env + .provider + .anvil_set_next_block_timestamp(env.era_duration + env.genesis_ts) + .await + .unwrap(); + env.env.force_new_block().await; + + let latest_block = env.env.latest_block().await; + let committed_validators = env + .env + .ethereum + .router() + .query() + .validators_at(latest_block.hash) + .await + .unwrap(); + let committed_set: BTreeSet<_> = committed_validators.iter().copied().collect(); + let expected_set: BTreeSet<_> = next_validators.iter().copied().collect(); + assert_eq!(committed_set, expected_set); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(120_000)] +async fn validators_election_rejects_wrong_validator_count() { + init_logger(); + + let mut env = setup_election_env().await; + + let mut wrong_validators = validator_addresses(&env.next_validators_configs); + wrong_validators.pop(); + + apply_next_era_state(&mut env, wrong_validators.try_into().unwrap()).await; + + assert!( + wait_for_validators_commit(&env.env).await.is_err(), + "validators commitment should be rejected with wrong validator count" + ); + + env.env + .provider + .anvil_set_next_block_timestamp(env.era_duration + env.genesis_ts) + .await + .unwrap(); + env.env.force_new_block().await; + + let latest_block = env.env.latest_block().await; + let committed_validators = env + .env + .ethereum + .router() + .query() + .validators_at(latest_block.hash) + .await + .unwrap(); + let committed_set: BTreeSet<_> = committed_validators.iter().copied().collect(); + let expected_set: BTreeSet<_> = validator_addresses(&env.env.validators) + .iter() + .copied() + .collect(); + assert_eq!(committed_set, expected_set); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(120_000)] +async fn validators_election_last_update_wins() { + init_logger(); + + let mut env = setup_election_env().await; + + let first_validators = validator_addresses(&env.env.validators); + let next_validators = validator_addresses(&env.next_validators_configs); + + env.env + .election_provider + .set_predefined_election_at( + env.election_ts + env.genesis_ts, + first_validators.try_into().unwrap(), + ) + .await; + env.env + .election_provider + .set_predefined_election_at( + env.election_ts + env.genesis_ts, + next_validators.clone().try_into().unwrap(), + ) + .await; + + env.env + .provider + .anvil_set_next_block_timestamp(env.election_ts + env.genesis_ts) + .await + .unwrap(); + + seed_next_era_dkg(&mut env).await; + env.env.force_new_block().await; + + wait_for_validators_commit(&env.env) + .await + .expect("validators commitment should succeed with latest election"); + + env.env + .provider + .anvil_set_next_block_timestamp(env.era_duration + env.genesis_ts) + .await + .unwrap(); + env.env.force_new_block().await; + + let latest_block = env.env.latest_block().await; + let committed_validators = env + .env + .ethereum + .router() + .query() + .validators_at(latest_block.hash) + .await + .unwrap(); + let committed_set: BTreeSet<_> = committed_validators.iter().copied().collect(); + let expected_set: BTreeSet<_> = next_validators.iter().copied().collect(); + assert_eq!(committed_set, expected_set); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(120_000)] +async fn validators_election_succeeds_with_offline_current_validator() { + init_logger(); + + let mut env = setup_election_env().await; + + let next_validators: Vec<_> = env + .next_validators_configs + .iter() + .map(|cfg| cfg.public_key.to_address()) + .collect(); + + env.validators[0].stop_service().await; + apply_next_era_state(&mut env, next_validators.try_into().unwrap()).await; + + wait_for_validators_commit(&env.env) + .await + .expect("validators commitment should succeed with quorum"); +} + +#[tokio::test(flavor = "multi_thread")] +#[ntest::timeout(60_000)] +async fn validators_election() { + init_logger(); + + let election_ts = 20 * 60 * 60; + let era_duration = 24 * 60 * 60; + let deploy_params = ContractsDeploymentParams { + with_middleware: true, + era_duration, + election_duration: era_duration - election_ts, + }; + + let signer = Signer::memory(); + let mut wallets = Wallets::anvil(&signer); + + let current_validators: Vec<_> = (0..5).map(|_| wallets.next()).collect(); + let next_validators: Vec<_> = (0..5).map(|_| wallets.next()).collect(); + + let env_config = TestEnvConfig { + validators: ValidatorsConfig::ProvidedValidators(current_validators), + deploy_params, + network: EnvNetworkConfig::Enabled, + signer: signer.clone(), + ..Default::default() + }; + let mut env = TestEnv::new(env_config).await.unwrap(); + + let genesis_block_hash = env + .ethereum + .router() + .query() + .genesis_block_hash() + .await + .unwrap(); + let genesis_ts = env + .provider + .get_block_by_hash(genesis_block_hash.0.into()) + .await + .unwrap() + .unwrap() + .header + .timestamp; + + let mut validators = vec![]; + for (i, v) in env.validators.clone().into_iter().enumerate() { + let mut validator = env.new_node(NodeConfig::named(format!("validator-{i}")).validator(v)); + validator.start_service().await; + validators.push(validator); + } + + let (next_validators_configs, _commitment) = + TestEnv::define_session_keys_for_era(&signer, next_validators, 1); + let next_public_key_package = next_validators_configs[0].dkg_public_key_package.clone(); + let next_vss_commitment = next_validators_configs[0].dkg_vss_commitment.clone(); + let next_dkg_session = DkgSessionId { era: 1 }; + + let next_validators: Vec<_> = next_validators_configs + .iter() + .map(|cfg| cfg.public_key.to_address()) + .collect(); + + env.election_provider + .set_predefined_election_at( + election_ts + genesis_ts, + next_validators.try_into().unwrap(), + ) + .await; + + env.provider + .anvil_set_next_block_timestamp(election_ts + genesis_ts) + .await + .unwrap(); + + for validator in validators.iter_mut() { + validator + .db + .set_public_key_package(next_dkg_session.era, next_public_key_package.clone()); + validator + .db + .set_dkg_vss_commitment(next_dkg_session.era, next_vss_commitment.clone()); + validator.db.set_dkg_session_state( + next_dkg_session, + DkgSessionState { + completed: true, + ..Default::default() + }, + ); + } + env.force_new_block().await; + + env.new_observer_events() + .filter_map_block_synced() + .find(|event| { + matches!( + event, + BlockEvent::Router(RouterEvent::ValidatorsCommittedForEra(_)) + ) + }) + .await; + + let uploaded_code = env + .upload_code(demo_ping::WASM_BINARY) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert!(uploaded_code.valid); + + let ping_actor = env + .create_program(uploaded_code.code_id, 500_000_000_000_000) + .await + .unwrap() + .wait_for() + .await + .unwrap(); + assert_eq!(ping_actor.code_id, uploaded_code.code_id); + + for mut node in validators.into_iter() { + node.stop_service().await; + } + + env.validators = next_validators_configs; + let mut new_validators = vec![]; + for (i, v) in env.validators.clone().into_iter().enumerate() { + let mut validator = env.new_node(NodeConfig::named(format!("validator-{i}")).validator(v)); + validator.start_service().await; + new_validators.push(validator); + } + + env.provider + .anvil_set_next_block_timestamp(era_duration + genesis_ts) + .await + .unwrap(); + env.force_new_block().await; + + let reply = env + .send_message(ping_actor.program_id, b"PING") + .await + .expect("pong reply") + .wait_for() + .await + .expect("reply info"); + + assert_eq!(reply.payload, b"PONG"); + assert_eq!(reply.program_id, ping_actor.program_id); +} diff --git a/ethexe/service/utils/Cargo.toml b/ethexe/service/utils/Cargo.toml index d544a6dad4d..d93257e642b 100644 --- a/ethexe/service/utils/Cargo.toml +++ b/ethexe/service/utils/Cargo.toml @@ -11,4 +11,3 @@ repository.workspace = true log.workspace = true futures.workspace = true tokio = { workspace = true, features = ["time"] } -gear-workspace-hack.workspace = true diff --git a/examples/async-critical/Cargo.toml b/examples/async-critical/Cargo.toml index 8f28aa08ac4..43a4a124377 100644 --- a/examples/async-critical/Cargo.toml +++ b/examples/async-critical/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/async-custom-entry/Cargo.toml b/examples/async-custom-entry/Cargo.toml index 8c39a51c75f..3cfad818329 100644 --- a/examples/async-custom-entry/Cargo.toml +++ b/examples/async-custom-entry/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/async-init/Cargo.toml b/examples/async-init/Cargo.toml index 1b8cb712ef1..f4c82fd34ac 100644 --- a/examples/async-init/Cargo.toml +++ b/examples/async-init/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true parity-scale-codec.workspace = true futures.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/async-recursion/Cargo.toml b/examples/async-recursion/Cargo.toml index 222f2bc2062..99fc3c4f579 100644 --- a/examples/async-recursion/Cargo.toml +++ b/examples/async-recursion/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true async-recursion.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/async-reply-hook/Cargo.toml b/examples/async-reply-hook/Cargo.toml index 61782a657c6..1555a043f09 100644 --- a/examples/async-reply-hook/Cargo.toml +++ b/examples/async-reply-hook/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/async-signal-entry/Cargo.toml b/examples/async-signal-entry/Cargo.toml index 98fdcd2fb38..b04865a96f2 100644 --- a/examples/async-signal-entry/Cargo.toml +++ b/examples/async-signal-entry/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/async-tester/Cargo.toml b/examples/async-tester/Cargo.toml index c97a07d09a2..4e75128315a 100644 --- a/examples/async-tester/Cargo.toml +++ b/examples/async-tester/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/async/Cargo.toml b/examples/async/Cargo.toml index 9e023cfe791..824309d8785 100644 --- a/examples/async/Cargo.toml +++ b/examples/async/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/autoreply/Cargo.toml b/examples/autoreply/Cargo.toml index 5c50b95d45a..7ffad680a94 100644 --- a/examples/autoreply/Cargo.toml +++ b/examples/autoreply/Cargo.toml @@ -7,7 +7,6 @@ license.workspace = true [dependencies] gstd = { workspace = true, features = ["debug"] } -gear-workspace-hack.workspace = true [dev-dependencies] gtest.workspace = true diff --git a/examples/big-data-section/Cargo.toml b/examples/big-data-section/Cargo.toml index 3da8776194d..fd1e04fe067 100644 --- a/examples/big-data-section/Cargo.toml +++ b/examples/big-data-section/Cargo.toml @@ -14,7 +14,6 @@ workspace = true [dependencies] gstd = { workspace = true, features = ["debug"] } parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gtest.workspace = true diff --git a/examples/bls381/Cargo.toml b/examples/bls381/Cargo.toml index 5940cbd1d37..4bb99eca101 100644 --- a/examples/bls381/Cargo.toml +++ b/examples/bls381/Cargo.toml @@ -12,7 +12,6 @@ parity-scale-codec = { workspace = true, features = ["derive"] } gstd = { workspace = true, features = ["debug"] } gbuiltin-bls381.workspace = true hex-literal.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/calc-hash/Cargo.toml b/examples/calc-hash/Cargo.toml index 78f523a65f0..0ddad98a8fd 100644 --- a/examples/calc-hash/Cargo.toml +++ b/examples/calc-hash/Cargo.toml @@ -10,6 +10,5 @@ repository.workspace = true [dependencies] parity-scale-codec.workspace = true sha2.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] diff --git a/examples/calc-hash/in-one-block/Cargo.toml b/examples/calc-hash/in-one-block/Cargo.toml index 508c829461d..7192e5baca9 100644 --- a/examples/calc-hash/in-one-block/Cargo.toml +++ b/examples/calc-hash/in-one-block/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true parity-scale-codec.workspace = true shared = { path = "..", package = "demo-calc-hash" } -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/calc-hash/over-blocks/Cargo.toml b/examples/calc-hash/over-blocks/Cargo.toml index 9016b9e674d..5d93098fe37 100644 --- a/examples/calc-hash/over-blocks/Cargo.toml +++ b/examples/calc-hash/over-blocks/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true parity-scale-codec.workspace = true shared = { path = "../", package = "demo-calc-hash" } -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/compose/Cargo.toml b/examples/compose/Cargo.toml index e7d967bc5e4..bd4a1891822 100644 --- a/examples/compose/Cargo.toml +++ b/examples/compose/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true hex.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/constructor/Cargo.toml b/examples/constructor/Cargo.toml index 2673c4bea91..4df08a70b72 100644 --- a/examples/constructor/Cargo.toml +++ b/examples/constructor/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gcore.workspace = true gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/create-program-reentrance/Cargo.toml b/examples/create-program-reentrance/Cargo.toml index b0a22b639b7..3d52a92f6dd 100644 --- a/examples/create-program-reentrance/Cargo.toml +++ b/examples/create-program-reentrance/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true hex.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/ctor/Cargo.toml b/examples/ctor/Cargo.toml index 004deaf1410..0ddff7a2e3a 100644 --- a/examples/ctor/Cargo.toml +++ b/examples/ctor/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gtest.workspace = true diff --git a/examples/custom/Cargo.toml b/examples/custom/Cargo.toml index d5493388c51..bcf618a3c63 100644 --- a/examples/custom/Cargo.toml +++ b/examples/custom/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true gsys.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gtest.workspace = true diff --git a/examples/delayed-reservation-sender/Cargo.toml b/examples/delayed-reservation-sender/Cargo.toml index 6a02d59a243..e313b5080da 100644 --- a/examples/delayed-reservation-sender/Cargo.toml +++ b/examples/delayed-reservation-sender/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/delayed-sender-ethexe/Cargo.toml b/examples/delayed-sender-ethexe/Cargo.toml index 79d89e00141..7b63c8e50e7 100644 --- a/examples/delayed-sender-ethexe/Cargo.toml +++ b/examples/delayed-sender-ethexe/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/delayed-sender/Cargo.toml b/examples/delayed-sender/Cargo.toml index 0662cb99565..199aaa4efa4 100644 --- a/examples/delayed-sender/Cargo.toml +++ b/examples/delayed-sender/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/distributor/Cargo.toml b/examples/distributor/Cargo.toml index 40b17181234..73887d6fd87 100644 --- a/examples/distributor/Cargo.toml +++ b/examples/distributor/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/fungible-token/Cargo.toml b/examples/fungible-token/Cargo.toml index e6cbbd13e95..f205954d1a1 100644 --- a/examples/fungible-token/Cargo.toml +++ b/examples/fungible-token/Cargo.toml @@ -12,7 +12,6 @@ gstd.workspace = true hashbrown.workspace = true parity-scale-codec.workspace = true scale-info.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/futures-unordered/Cargo.toml b/examples/futures-unordered/Cargo.toml index 0218e81d008..b20a78af317 100644 --- a/examples/futures-unordered/Cargo.toml +++ b/examples/futures-unordered/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true parity-scale-codec.workspace = true futures = { workspace = true, features = ["async-await"] } -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/gas-burned/Cargo.toml b/examples/gas-burned/Cargo.toml index 498f7a43d9b..9ad1445febf 100644 --- a/examples/gas-burned/Cargo.toml +++ b/examples/gas-burned/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/incomplete-async-payloads/Cargo.toml b/examples/incomplete-async-payloads/Cargo.toml index 13112a508dc..1c4ef56a519 100644 --- a/examples/incomplete-async-payloads/Cargo.toml +++ b/examples/incomplete-async-payloads/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/inheritor-in-error-reply/Cargo.toml b/examples/inheritor-in-error-reply/Cargo.toml index 435c8412b92..1f3ececd8ce 100644 --- a/examples/inheritor-in-error-reply/Cargo.toml +++ b/examples/inheritor-in-error-reply/Cargo.toml @@ -8,7 +8,6 @@ license.workspace = true [dependencies] gstd = { workspace = true, features = ["debug"] } parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gear-core.workspace = true diff --git a/examples/init-fail-sender/Cargo.toml b/examples/init-fail-sender/Cargo.toml index 17dc018dc87..34611c8f1fb 100644 --- a/examples/init-fail-sender/Cargo.toml +++ b/examples/init-fail-sender/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/init-wait-reply-exit/Cargo.toml b/examples/init-wait-reply-exit/Cargo.toml index aa2bb264c4a..71b6321fe47 100644 --- a/examples/init-wait-reply-exit/Cargo.toml +++ b/examples/init-wait-reply-exit/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/init-wait/Cargo.toml b/examples/init-wait/Cargo.toml index 7d874f21c99..de95cd060ee 100644 --- a/examples/init-wait/Cargo.toml +++ b/examples/init-wait/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/messenger/Cargo.toml b/examples/messenger/Cargo.toml index d2823d78ced..4b68812e2ef 100644 --- a/examples/messenger/Cargo.toml +++ b/examples/messenger/Cargo.toml @@ -7,7 +7,6 @@ edition.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/mul-by-const/Cargo.toml b/examples/mul-by-const/Cargo.toml index fce4c01a3ba..64e2f97f889 100644 --- a/examples/mul-by-const/Cargo.toml +++ b/examples/mul-by-const/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true hex.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/ncompose/Cargo.toml b/examples/ncompose/Cargo.toml index 3cf760abab4..9cb597e461a 100644 --- a/examples/ncompose/Cargo.toml +++ b/examples/ncompose/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true hex.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/node/Cargo.toml b/examples/node/Cargo.toml index 5d4fa5a9173..d0e5078b4f4 100644 --- a/examples/node/Cargo.toml +++ b/examples/node/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/out-of-memory/Cargo.toml b/examples/out-of-memory/Cargo.toml index bfc4c932038..c075c8d99e3 100644 --- a/examples/out-of-memory/Cargo.toml +++ b/examples/out-of-memory/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd = { workspace = true, features = ["oom-handler"] } -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/panic-payload/Cargo.toml b/examples/panic-payload/Cargo.toml index 9373b6cb214..743f844d225 100644 --- a/examples/panic-payload/Cargo.toml +++ b/examples/panic-payload/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gear-core.workspace = true diff --git a/examples/piggy-bank/Cargo.toml b/examples/piggy-bank/Cargo.toml index ae04bf2c482..9ae512ba199 100644 --- a/examples/piggy-bank/Cargo.toml +++ b/examples/piggy-bank/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/ping/Cargo.toml b/examples/ping/Cargo.toml index 4350063695a..d8149139d3d 100644 --- a/examples/ping/Cargo.toml +++ b/examples/ping/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/program-factory/Cargo.toml b/examples/program-factory/Cargo.toml index c23a486ee40..104d6b64ff3 100644 --- a/examples/program-factory/Cargo.toml +++ b/examples/program-factory/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true parity-scale-codec.workspace = true hex-literal.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/program-generator/Cargo.toml b/examples/program-generator/Cargo.toml index eb3b34ceefd..9782f2a468f 100644 --- a/examples/program-generator/Cargo.toml +++ b/examples/program-generator/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true hex-literal.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/proxy-broker/Cargo.toml b/examples/proxy-broker/Cargo.toml index a3f24f8a2a9..b293900fcdb 100644 --- a/examples/proxy-broker/Cargo.toml +++ b/examples/proxy-broker/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gbuiltin-proxy.workspace = true gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/proxy-relay/Cargo.toml b/examples/proxy-relay/Cargo.toml index ac63b34072a..4378c75e4e3 100644 --- a/examples/proxy-relay/Cargo.toml +++ b/examples/proxy-relay/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true parity-scale-codec.workspace = true scale-info.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/proxy-reservation-with-gas/Cargo.toml b/examples/proxy-reservation-with-gas/Cargo.toml index 50523737f64..c8e775cdf43 100644 --- a/examples/proxy-reservation-with-gas/Cargo.toml +++ b/examples/proxy-reservation-with-gas/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true parity-scale-codec.workspace = true scale-info.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/proxy/Cargo.toml b/examples/proxy/Cargo.toml index 571b7858a51..f679ca89cd5 100644 --- a/examples/proxy/Cargo.toml +++ b/examples/proxy/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true parity-scale-codec.workspace = true scale-info.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/read-big-state/Cargo.toml b/examples/read-big-state/Cargo.toml index 5b04ed9b02f..c20badfe83a 100644 --- a/examples/read-big-state/Cargo.toml +++ b/examples/read-big-state/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/reservation-manager/Cargo.toml b/examples/reservation-manager/Cargo.toml index c1e96f112a3..7ccdd62b7e2 100644 --- a/examples/reservation-manager/Cargo.toml +++ b/examples/reservation-manager/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/reserve-gas/Cargo.toml b/examples/reserve-gas/Cargo.toml index 9f21f74f536..896a36a5d0b 100644 --- a/examples/reserve-gas/Cargo.toml +++ b/examples/reserve-gas/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/rwlock/Cargo.toml b/examples/rwlock/Cargo.toml index d9d48b44794..b7a8621cb12 100644 --- a/examples/rwlock/Cargo.toml +++ b/examples/rwlock/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd = { workspace = true, features = ["debug"] } parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/send-from-reservation/Cargo.toml b/examples/send-from-reservation/Cargo.toml index c8eb2c156d0..049ba88c446 100644 --- a/examples/send-from-reservation/Cargo.toml +++ b/examples/send-from-reservation/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/signal-entry/Cargo.toml b/examples/signal-entry/Cargo.toml index d3233256b19..9e786a2254c 100644 --- a/examples/signal-entry/Cargo.toml +++ b/examples/signal-entry/Cargo.toml @@ -12,7 +12,6 @@ gcore.workspace = true gstd.workspace = true parity-scale-codec.workspace = true gear-core.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/stack-allocations/Cargo.toml b/examples/stack-allocations/Cargo.toml index b54bffec9b8..53bc2070b90 100644 --- a/examples/stack-allocations/Cargo.toml +++ b/examples/stack-allocations/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gtest.workspace = true diff --git a/examples/staking-broker/Cargo.toml b/examples/staking-broker/Cargo.toml index 16dbf9a72e5..329ad1f6999 100644 --- a/examples/staking-broker/Cargo.toml +++ b/examples/staking-broker/Cargo.toml @@ -13,7 +13,6 @@ gstd.workspace = true hashbrown.workspace = true hex-literal.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/state-rollback/Cargo.toml b/examples/state-rollback/Cargo.toml index 5d288f38d0f..c4d156bc250 100644 --- a/examples/state-rollback/Cargo.toml +++ b/examples/state-rollback/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/sync-duplicate/Cargo.toml b/examples/sync-duplicate/Cargo.toml index b0068e2eed9..f0d0a3adf96 100644 --- a/examples/sync-duplicate/Cargo.toml +++ b/examples/sync-duplicate/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/syscall-error/Cargo.toml b/examples/syscall-error/Cargo.toml index 4a06f3352c7..a56b74a7878 100644 --- a/examples/syscall-error/Cargo.toml +++ b/examples/syscall-error/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/syscalls/Cargo.toml b/examples/syscalls/Cargo.toml index 9f36914e3d7..1e0e64155bd 100644 --- a/examples/syscalls/Cargo.toml +++ b/examples/syscalls/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/value-sender-ethexe/Cargo.toml b/examples/value-sender-ethexe/Cargo.toml index b3de8ae37a2..a66e8fe9396 100644 --- a/examples/value-sender-ethexe/Cargo.toml +++ b/examples/value-sender-ethexe/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/value-sender/Cargo.toml b/examples/value-sender/Cargo.toml index 52ad016fccf..9846125b1a7 100644 --- a/examples/value-sender/Cargo.toml +++ b/examples/value-sender/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/vec/Cargo.toml b/examples/vec/Cargo.toml index 440d2890464..176929ad803 100644 --- a/examples/vec/Cargo.toml +++ b/examples/vec/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd = { workspace = true, features = ["debug"] } -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/wait-timeout/Cargo.toml b/examples/wait-timeout/Cargo.toml index b7baad4ae75..c1e7c4e47a0 100644 --- a/examples/wait-timeout/Cargo.toml +++ b/examples/wait-timeout/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true gstd.workspace = true futures.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/wait/Cargo.toml b/examples/wait/Cargo.toml index 7ed0c41a47f..f644c5cdb78 100644 --- a/examples/wait/Cargo.toml +++ b/examples/wait/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/wait_wake/Cargo.toml b/examples/wait_wake/Cargo.toml index 1f5fc4e1d24..b92655788c4 100644 --- a/examples/wait_wake/Cargo.toml +++ b/examples/wait_wake/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true [dependencies] gstd.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/waiter/Cargo.toml b/examples/waiter/Cargo.toml index a6bcccf1001..546e34a37f7 100644 --- a/examples/waiter/Cargo.toml +++ b/examples/waiter/Cargo.toml @@ -12,7 +12,6 @@ futures.workspace = true gstd.workspace = true gcore.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/waiting-proxy/Cargo.toml b/examples/waiting-proxy/Cargo.toml index 553a7d94e73..076c2520096 100644 --- a/examples/waiting-proxy/Cargo.toml +++ b/examples/waiting-proxy/Cargo.toml @@ -9,7 +9,6 @@ repository.workspace = true [dependencies] gstd.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] gear-wasm-builder.workspace = true diff --git a/examples/wat/Cargo.toml b/examples/wat/Cargo.toml index 2d054989b56..d2f2b98377c 100644 --- a/examples/wat/Cargo.toml +++ b/examples/wat/Cargo.toml @@ -12,4 +12,3 @@ hex.workspace = true wasmparser.workspace = true wat.workspace = true wasmprinter.workspace = true -gear-workspace-hack.workspace = true diff --git a/galloc/Cargo.toml b/galloc/Cargo.toml index e5debadd4da..b20b18870f7 100644 --- a/galloc/Cargo.toml +++ b/galloc/Cargo.toml @@ -14,7 +14,6 @@ rust-version.workspace = true [dependencies] # add "checks" feature to enable hard checks in allocator dlmalloc.workspace = true -gear-workspace-hack.workspace = true [features] debug = ["dlmalloc/debug"] diff --git a/gbuiltins/bls381/Cargo.toml b/gbuiltins/bls381/Cargo.toml index a52dbc8c491..cf3578e8724 100644 --- a/gbuiltins/bls381/Cargo.toml +++ b/gbuiltins/bls381/Cargo.toml @@ -18,7 +18,6 @@ ark-ec.workspace = true ark-ff.workspace = true ark-scale = { workspace = true, features = ["hazmat"] } ark-serialize = { workspace = true, features = ["derive"] } -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/gbuiltins/eth-bridge/Cargo.toml b/gbuiltins/eth-bridge/Cargo.toml index f9900a87a25..e9000a425fb 100644 --- a/gbuiltins/eth-bridge/Cargo.toml +++ b/gbuiltins/eth-bridge/Cargo.toml @@ -14,7 +14,6 @@ rust-version.workspace = true parity-scale-codec = { workspace = true, features = ["derive"] } scale-info = { workspace = true, features = ["derive"] } gprimitives.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/gbuiltins/proxy/Cargo.toml b/gbuiltins/proxy/Cargo.toml index 60f1b4c7eb6..4afd4b9ff35 100644 --- a/gbuiltins/proxy/Cargo.toml +++ b/gbuiltins/proxy/Cargo.toml @@ -14,4 +14,3 @@ rust-version.workspace = true parity-scale-codec = { workspace = true, features = ["derive"] } scale-info = { workspace = true, features = ["derive"] } gprimitives = { workspace = true, features = ["codec"] } -gear-workspace-hack.workspace = true diff --git a/gbuiltins/staking/Cargo.toml b/gbuiltins/staking/Cargo.toml index ab77fe9a414..ff8146acc48 100644 --- a/gbuiltins/staking/Cargo.toml +++ b/gbuiltins/staking/Cargo.toml @@ -14,4 +14,3 @@ rust-version.workspace = true parity-scale-codec = { workspace = true, features = ["derive"] } scale-info = { workspace = true, features = ["derive"] } gprimitives = { workspace = true, features = ["codec"] } -gear-workspace-hack.workspace = true diff --git a/gcli/Cargo.toml b/gcli/Cargo.toml index 65d41ca3619..5aaef77df4f 100644 --- a/gcli/Cargo.toml +++ b/gcli/Cargo.toml @@ -43,7 +43,6 @@ etc.workspace = true runtime-primitives.workspace = true url = { workspace = true, features = ["serde"] } toml.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] diff --git a/gcore/Cargo.toml b/gcore/Cargo.toml index 98bb17895f0..a875de0b856 100644 --- a/gcore/Cargo.toml +++ b/gcore/Cargo.toml @@ -18,7 +18,6 @@ gear-stack-buffer.workspace = true thiserror.workspace = true arrayvec.workspace = true paste.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] hex-literal.workspace = true diff --git a/gprimitives/Cargo.toml b/gprimitives/Cargo.toml index b7babc95a68..c04b1ffbf52 100644 --- a/gprimitives/Cargo.toml +++ b/gprimitives/Cargo.toml @@ -23,7 +23,6 @@ serde = { workspace = true, features = ["derive"], optional = true } hex.workspace = true gear-ss58.workspace = true thiserror.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/gsdk/Cargo.toml b/gsdk/Cargo.toml index 3d616053603..391615641f6 100644 --- a/gsdk/Cargo.toml +++ b/gsdk/Cargo.toml @@ -35,7 +35,6 @@ thiserror.workspace = true tokio = { workspace = true, features = ["fs"] } url.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] ark-bls12-381 = { workspace = true, features = ["curve"] } diff --git a/gsdk/codegen/Cargo.toml b/gsdk/codegen/Cargo.toml index 84bce477412..22a4a340f45 100644 --- a/gsdk/codegen/Cargo.toml +++ b/gsdk/codegen/Cargo.toml @@ -19,4 +19,3 @@ proc-macro = true syn = { workspace = true, features = ["default", "full"] } quote.workspace = true proc-macro2.workspace = true -gear-workspace-hack.workspace = true diff --git a/gsigner/Cargo.toml b/gsigner/Cargo.toml index 0b8965466fa..8f3e7bf7265 100644 --- a/gsigner/Cargo.toml +++ b/gsigner/Cargo.toml @@ -60,7 +60,6 @@ libp2p-identity = { version = "0.2", default-features = false, features = [ "serde", ], optional = true } secrecy = "0.8" -gear-workspace-hack.workspace = true [dev-dependencies] assert_cmd = "2.1" diff --git a/gstd/Cargo.toml b/gstd/Cargo.toml index a45dbfaf46f..30b1a310b41 100644 --- a/gstd/Cargo.toml +++ b/gstd/Cargo.toml @@ -28,7 +28,6 @@ scale-info = { workspace = true, features = ["derive"] } futures = { workspace = true, features = ["alloc"] } waker-fn = "1.2.0" thiserror.workspace = true -gear-workspace-hack.workspace = true [features] #! ## Default features: diff --git a/gstd/codegen/Cargo.toml b/gstd/codegen/Cargo.toml index 2637054f3fb..a62159186dd 100644 --- a/gstd/codegen/Cargo.toml +++ b/gstd/codegen/Cargo.toml @@ -20,7 +20,6 @@ syn = { workspace = true, features = ["default", "full"] } quote.workspace = true proc-macro2.workspace = true gprimitives.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gstd = { path = "..", features = ["ethexe"] } diff --git a/gsys/Cargo.toml b/gsys/Cargo.toml index 88009b18d7b..827e1255687 100644 --- a/gsys/Cargo.toml +++ b/gsys/Cargo.toml @@ -14,7 +14,6 @@ rust-version.workspace = true [dependencies] bytemuck = { workspace = true, features = ["derive"] } -gear-workspace-hack.workspace = true [features] ethexe = [] diff --git a/gtest/Cargo.toml b/gtest/Cargo.toml index 88cec179e11..cbd49fd1373 100644 --- a/gtest/Cargo.toml +++ b/gtest/Cargo.toml @@ -35,7 +35,6 @@ log.workspace = true cargo_toml.workspace = true etc.workspace = true thiserror.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] ark-std.workspace = true diff --git a/lazy-pages/Cargo.toml b/lazy-pages/Cargo.toml index 3826ad3f9df..b565cc06832 100644 --- a/lazy-pages/Cargo.toml +++ b/lazy-pages/Cargo.toml @@ -22,7 +22,6 @@ wasmer-vm.workspace = true gear-sandbox-host.workspace = true gear-core.workspace = true gear-lazy-pages-common.workspace = true -gear-workspace-hack.workspace = true [target."cfg(target_vendor = \"apple\")".dependencies.mach] version = "0.3.2" diff --git a/lazy-pages/common/Cargo.toml b/lazy-pages/common/Cargo.toml index 27784d44cec..ad45a1fd40f 100644 --- a/lazy-pages/common/Cargo.toml +++ b/lazy-pages/common/Cargo.toml @@ -15,4 +15,3 @@ gear-core.workspace = true num_enum.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true diff --git a/lazy-pages/interface/Cargo.toml b/lazy-pages/interface/Cargo.toml index f84520fae03..5b65321a36b 100644 --- a/lazy-pages/interface/Cargo.toml +++ b/lazy-pages/interface/Cargo.toml @@ -18,7 +18,6 @@ gear-lazy-pages-common.workspace = true gear-runtime-interface.workspace = true sp-std.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/lazy-pages/native-interface/Cargo.toml b/lazy-pages/native-interface/Cargo.toml index 8c790c1a1f2..a6e6260f7a1 100644 --- a/lazy-pages/native-interface/Cargo.toml +++ b/lazy-pages/native-interface/Cargo.toml @@ -15,4 +15,3 @@ gear-core.workspace = true gear-lazy-pages-common.workspace = true gear-lazy-pages.workspace = true log.workspace = true -gear-workspace-hack.workspace = true diff --git a/node/authorship/Cargo.toml b/node/authorship/Cargo.toml index aebd4c3f91c..c5ae7f61acc 100644 --- a/node/authorship/Cargo.toml +++ b/node/authorship/Cargo.toml @@ -39,7 +39,6 @@ sp-inherents = { workspace = true, features = ["std"] } # Substrate Other prometheus-endpoint.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] sc-transaction-pool.workspace = true diff --git a/node/cli/Cargo.toml b/node/cli/Cargo.toml index 7ebcc56b806..2d81b3cdc74 100644 --- a/node/cli/Cargo.toml +++ b/node/cli/Cargo.toml @@ -57,7 +57,6 @@ frame-benchmarking-cli = { workspace = true, optional = true } # Program CLI gcli = { workspace = true, optional = true } -gear-workspace-hack.workspace = true [build-dependencies] substrate-build-script-utils.workspace = true diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 321c04fbf40..86c0e8542f6 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -94,7 +94,6 @@ frame-benchmarking = { workspace = true, features = ["std"] } frame-benchmarking-cli.workspace = true substrate-frame-rpc-system.workspace = true substrate-state-trie-migration-rpc.workspace = true -gear-workspace-hack.workspace = true [build-dependencies] diff --git a/node/testing/Cargo.toml b/node/testing/Cargo.toml index eccb0e87621..07b187e66b8 100644 --- a/node/testing/Cargo.toml +++ b/node/testing/Cargo.toml @@ -31,4 +31,3 @@ sp-io.workspace = true # Substrate Other frame-system.workspace = true frame-metadata-hash-extension.workspace = true -gear-workspace-hack.workspace = true diff --git a/pallets/gas/Cargo.toml b/pallets/gas/Cargo.toml index 255697040f0..957e1e02585 100644 --- a/pallets/gas/Cargo.toml +++ b/pallets/gas/Cargo.toml @@ -28,7 +28,6 @@ frame-benchmarking = { workspace = true, optional = true } sp-std.workspace = true sp-runtime.workspace = true pallet-balances.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] tracing-subscriber.workspace = true diff --git a/pallets/gear-bank/Cargo.toml b/pallets/gear-bank/Cargo.toml index 6b3a3ea458b..ae158126768 100644 --- a/pallets/gear-bank/Cargo.toml +++ b/pallets/gear-bank/Cargo.toml @@ -22,7 +22,6 @@ frame-benchmarking = { workspace = true, optional = true } pallet-authorship.workspace = true pallet-balances.workspace = true sp-runtime.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] common = { workspace = true, features = ["std"] } diff --git a/pallets/gear-builtin/Cargo.toml b/pallets/gear-builtin/Cargo.toml index fc4c97f4ef0..4c947f06d37 100644 --- a/pallets/gear-builtin/Cargo.toml +++ b/pallets/gear-builtin/Cargo.toml @@ -37,7 +37,6 @@ sp-runtime = { workspace = true, features = ["serde"] } pallet-gear.workspace = true pallet-staking.workspace = true pallet-proxy.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] demo-waiting-proxy.workspace = true diff --git a/pallets/gear-builtin/rpc/Cargo.toml b/pallets/gear-builtin/rpc/Cargo.toml index fb1a6594a7c..513a88c4a52 100644 --- a/pallets/gear-builtin/rpc/Cargo.toml +++ b/pallets/gear-builtin/rpc/Cargo.toml @@ -18,4 +18,3 @@ sp-runtime.workspace = true # Local packages pallet-gear-builtin-rpc-runtime-api = { workspace = true, features = ["std"] } -gear-workspace-hack.workspace = true diff --git a/pallets/gear-builtin/rpc/runtime-api/Cargo.toml b/pallets/gear-builtin/rpc/runtime-api/Cargo.toml index dd66218a75c..88bdc688c87 100644 --- a/pallets/gear-builtin/rpc/runtime-api/Cargo.toml +++ b/pallets/gear-builtin/rpc/runtime-api/Cargo.toml @@ -10,7 +10,6 @@ repository = "https://github.com/gear-tech/gear" [dependencies] sp-api.workspace = true sp-core.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/pallets/gear-eth-bridge/Cargo.toml b/pallets/gear-eth-bridge/Cargo.toml index 45c80e7d6a3..e9c0572a7db 100644 --- a/pallets/gear-eth-bridge/Cargo.toml +++ b/pallets/gear-eth-bridge/Cargo.toml @@ -36,7 +36,6 @@ pallet-grandpa.workspace = true sp-consensus-grandpa.workspace = true sp-runtime.workspace = true sp-std.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gprimitives.workspace = true diff --git a/pallets/gear-eth-bridge/primitives/Cargo.toml b/pallets/gear-eth-bridge/primitives/Cargo.toml index 1b42a8c31d8..4b846e3e5c3 100644 --- a/pallets/gear-eth-bridge/primitives/Cargo.toml +++ b/pallets/gear-eth-bridge/primitives/Cargo.toml @@ -24,7 +24,6 @@ gprimitives.workspace = true # Substrate deps. binary-merkle-tree.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/pallets/gear-eth-bridge/rpc/Cargo.toml b/pallets/gear-eth-bridge/rpc/Cargo.toml index 94b2f71be89..1f53ff6ba58 100644 --- a/pallets/gear-eth-bridge/rpc/Cargo.toml +++ b/pallets/gear-eth-bridge/rpc/Cargo.toml @@ -18,4 +18,3 @@ sp-runtime.workspace = true # Local packages pallet-gear-eth-bridge-rpc-runtime-api = { workspace = true, features = ["std"] } -gear-workspace-hack.workspace = true diff --git a/pallets/gear-eth-bridge/rpc/runtime-api/Cargo.toml b/pallets/gear-eth-bridge/rpc/runtime-api/Cargo.toml index 17039f586b1..44d9a351d8e 100644 --- a/pallets/gear-eth-bridge/rpc/runtime-api/Cargo.toml +++ b/pallets/gear-eth-bridge/rpc/runtime-api/Cargo.toml @@ -11,7 +11,6 @@ repository.workspace = true sp-api.workspace = true sp-core.workspace = true pallet-gear-eth-bridge.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/pallets/gear-messenger/Cargo.toml b/pallets/gear-messenger/Cargo.toml index 66c10359d76..33479aa7cba 100644 --- a/pallets/gear-messenger/Cargo.toml +++ b/pallets/gear-messenger/Cargo.toml @@ -28,7 +28,6 @@ frame-benchmarking = { workspace = true, optional = true } sp-runtime = { workspace = true } sp-std = { workspace = true } sp-io.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] pallet-gear-gas = { workspace = true, features = ["std"] } diff --git a/pallets/gear-program/Cargo.toml b/pallets/gear-program/Cargo.toml index dd4e2db5b9f..64f85562943 100644 --- a/pallets/gear-program/Cargo.toml +++ b/pallets/gear-program/Cargo.toml @@ -31,7 +31,6 @@ sp-runtime.workspace = true # Temporary dependencies required for migration to v8. To be removed upon migration. pallet-balances.workspace = true pallet-treasury.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] common = { workspace = true, features = ["std"] } diff --git a/pallets/gear-scheduler/Cargo.toml b/pallets/gear-scheduler/Cargo.toml index 9d6647f1cf6..9021f0f7c52 100644 --- a/pallets/gear-scheduler/Cargo.toml +++ b/pallets/gear-scheduler/Cargo.toml @@ -29,7 +29,6 @@ frame-benchmarking = { workspace = true, optional = true } sp-std.workspace = true sp-io.workspace = true sp-runtime.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] pallet-gear-bank = { workspace = true, features = ["std"] } diff --git a/pallets/gear-voucher/Cargo.toml b/pallets/gear-voucher/Cargo.toml index a566af0bcff..7117a261283 100644 --- a/pallets/gear-voucher/Cargo.toml +++ b/pallets/gear-voucher/Cargo.toml @@ -30,7 +30,6 @@ sp-io = { workspace = true } sp-runtime.workspace = true sp-std.workspace = true pallet-balances.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] common = { workspace = true, features = ["std"] } diff --git a/pallets/gear/Cargo.toml b/pallets/gear/Cargo.toml index e11d98f2022..1596119aa04 100644 --- a/pallets/gear/Cargo.toml +++ b/pallets/gear/Cargo.toml @@ -67,7 +67,6 @@ demo-constructor = { workspace = true, optional = true } demo-waiter = { workspace = true, optional = true } demo-init-wait = { workspace = true, optional = true } demo-signal-entry = { workspace = true, optional = true } -gear-workspace-hack.workspace = true # Some of tests require `debug` feature enabled [dev-dependencies] diff --git a/pallets/gear/proc-macro/Cargo.toml b/pallets/gear/proc-macro/Cargo.toml index 0fbb61ec83e..8100f907371 100644 --- a/pallets/gear/proc-macro/Cargo.toml +++ b/pallets/gear/proc-macro/Cargo.toml @@ -18,7 +18,6 @@ proc-macro = true proc-macro2.workspace = true quote.workspace = true syn = { workspace = true, features = ["full"] } -gear-workspace-hack.workspace = true [dev-dependencies] diff --git a/pallets/gear/rpc/Cargo.toml b/pallets/gear/rpc/Cargo.toml index 8a9bbb0655e..63cac0a0bb5 100644 --- a/pallets/gear/rpc/Cargo.toml +++ b/pallets/gear/rpc/Cargo.toml @@ -25,4 +25,3 @@ gear-core.workspace = true gear-core-errors = { workspace = true, features = ["codec"] } gear-common.workspace = true pallet-gear-rpc-runtime-api.workspace = true -gear-workspace-hack.workspace = true diff --git a/pallets/gear/rpc/runtime-api/Cargo.toml b/pallets/gear/rpc/runtime-api/Cargo.toml index 7229161f022..252dc9e5d8e 100644 --- a/pallets/gear/rpc/runtime-api/Cargo.toml +++ b/pallets/gear/rpc/runtime-api/Cargo.toml @@ -13,7 +13,6 @@ sp-core.workspace = true sp-runtime.workspace = true sp-std.workspace = true pallet-gear.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/pallets/grandpa-signer/Cargo.toml b/pallets/grandpa-signer/Cargo.toml index d731cb59f04..8d961cfaa9a 100644 --- a/pallets/grandpa-signer/Cargo.toml +++ b/pallets/grandpa-signer/Cargo.toml @@ -25,7 +25,6 @@ sp-application-crypto.workspace = true sp-io.workspace = true sp-std.workspace = true log.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/pallets/payment/Cargo.toml b/pallets/payment/Cargo.toml index 2b9ac3a9c3d..53d0f2bae85 100644 --- a/pallets/payment/Cargo.toml +++ b/pallets/payment/Cargo.toml @@ -28,7 +28,6 @@ sp-runtime.workspace = true pallet-authorship.workspace = true pallet-balances.workspace = true pallet-transaction-payment.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] common = { workspace = true, features = ["std"] } diff --git a/pallets/staking-rewards/Cargo.toml b/pallets/staking-rewards/Cargo.toml index d4a4cf3c660..b4260ed4f8c 100644 --- a/pallets/staking-rewards/Cargo.toml +++ b/pallets/staking-rewards/Cargo.toml @@ -28,7 +28,6 @@ pallet-balances.workspace = true pallet-staking.workspace = true pallet-staking-reward-fn.workspace = true frame-election-provider-support.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] sp-core = { workspace = true, features = ["std"] } diff --git a/pallets/staking-rewards/rpc/Cargo.toml b/pallets/staking-rewards/rpc/Cargo.toml index 9dbc1fa5142..21cabe593f6 100644 --- a/pallets/staking-rewards/rpc/Cargo.toml +++ b/pallets/staking-rewards/rpc/Cargo.toml @@ -17,4 +17,3 @@ sp-runtime.workspace = true # Local packages pallet-gear-staking-rewards-rpc-runtime-api.workspace = true -gear-workspace-hack.workspace = true diff --git a/pallets/staking-rewards/rpc/runtime-api/Cargo.toml b/pallets/staking-rewards/rpc/runtime-api/Cargo.toml index 0090c1dd7ba..d4c8c27e89d 100644 --- a/pallets/staking-rewards/rpc/runtime-api/Cargo.toml +++ b/pallets/staking-rewards/rpc/runtime-api/Cargo.toml @@ -10,7 +10,6 @@ repository = "https://github.com/gear-tech/gear" [dependencies] sp-api.workspace = true pallet-gear-staking-rewards.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/runtime-interface/Cargo.toml b/runtime-interface/Cargo.toml index 12c6c7db6cb..dbfe85c8c70 100644 --- a/runtime-interface/Cargo.toml +++ b/runtime-interface/Cargo.toml @@ -21,7 +21,6 @@ sp-runtime-interface = { workspace = true, default-features = false } sp-std.workspace = true parity-scale-codec.workspace = true log = { workspace = true, optional = true } -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/runtime-interface/sandbox/Cargo.toml b/runtime-interface/sandbox/Cargo.toml index 2ce241d27c1..81a1398e9bf 100644 --- a/runtime-interface/sandbox/Cargo.toml +++ b/runtime-interface/sandbox/Cargo.toml @@ -20,7 +20,6 @@ sp-wasm-interface.workspace = true parity-scale-codec.workspace = true gear-sandbox-host = { workspace = true, optional = true } log = { workspace = true, optional = true } -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index d8ebabdae51..9f77d938d6d 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -28,7 +28,6 @@ frame-system-benchmarking = { workspace = true, optional = true } runtime-primitives.workspace = true pallet-gear.workspace = true pallet-gear-bank.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/runtime/primitives/Cargo.toml b/runtime/primitives/Cargo.toml index 15e47ef3dca..7c2ecaaf375 100644 --- a/runtime/primitives/Cargo.toml +++ b/runtime/primitives/Cargo.toml @@ -16,7 +16,6 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] sp-core.workspace = true sp-runtime.workspace = true -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/runtime/vara/Cargo.toml b/runtime/vara/Cargo.toml index dd0f0a48f77..f9746508d83 100644 --- a/runtime/vara/Cargo.toml +++ b/runtime/vara/Cargo.toml @@ -112,7 +112,6 @@ pallet-gear-eth-bridge-rpc-runtime-api.workspace = true pallet-grandpa-signer.workspace = true runtime-primitives.workspace = true gbuiltin-proxy.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] sp-io.workspace = true diff --git a/sandbox/env/Cargo.toml b/sandbox/env/Cargo.toml index c7f1556655e..1bdb259f114 100644 --- a/sandbox/env/Cargo.toml +++ b/sandbox/env/Cargo.toml @@ -18,7 +18,6 @@ parity-scale-codec.workspace = true sp-debug-derive.workspace = true sp-std.workspace = true sp-wasm-interface-common = { workspace = true, default-features = false } -gear-workspace-hack.workspace = true [features] default = ["std"] diff --git a/sandbox/host/Cargo.toml b/sandbox/host/Cargo.toml index ccf3fcaf003..0599283f3d7 100644 --- a/sandbox/host/Cargo.toml +++ b/sandbox/host/Cargo.toml @@ -30,7 +30,6 @@ gear-sandbox-env = { workspace = true, features = ["std"] } gear-wasmer-cache = { workspace = true, optional = true } tempfile = { workspace = true, optional = true } region.workspace = true -gear-workspace-hack.workspace = true [features] default = ["wasmer-cache"] diff --git a/sandbox/sandbox/Cargo.toml b/sandbox/sandbox/Cargo.toml index 833855b3d35..7afe3ffec01 100644 --- a/sandbox/sandbox/Cargo.toml +++ b/sandbox/sandbox/Cargo.toml @@ -30,7 +30,6 @@ wasmer-vm = { workspace = true, optional = true } wasmer-compiler = { workspace = true, optional = true } gear-wasmer-cache = { workspace = true, optional = true } pathdiff = { workspace = true, optional = true } -gear-workspace-hack.workspace = true [dev-dependencies] assert_matches.workspace = true diff --git a/stack-buffer/Cargo.toml b/stack-buffer/Cargo.toml index 3ffdfd1e21c..f38c2b72497 100644 --- a/stack-buffer/Cargo.toml +++ b/stack-buffer/Cargo.toml @@ -18,4 +18,3 @@ compile-alloca = ["cc"] stack-clash-protection = [] [dependencies] -gear-workspace-hack.workspace = true diff --git a/utils/actor-system-error/Cargo.toml b/utils/actor-system-error/Cargo.toml index 0d2222a5258..304aba7b0a7 100644 --- a/utils/actor-system-error/Cargo.toml +++ b/utils/actor-system-error/Cargo.toml @@ -12,4 +12,3 @@ rust-version.workspace = true [dependencies] derive_more.workspace = true -gear-workspace-hack.workspace = true diff --git a/utils/bags-thresholds/Cargo.toml b/utils/bags-thresholds/Cargo.toml index 4b21b060bc7..4194b8c2f0d 100644 --- a/utils/bags-thresholds/Cargo.toml +++ b/utils/bags-thresholds/Cargo.toml @@ -12,4 +12,3 @@ generate-bags.workspace = true # third-party clap = { workspace = true, features = ["derive"] } -gear-workspace-hack.workspace = true diff --git a/utils/baremetal-weights-patcher/Cargo.toml b/utils/baremetal-weights-patcher/Cargo.toml index c9cc2d24cd8..04e9e61f37b 100644 --- a/utils/baremetal-weights-patcher/Cargo.toml +++ b/utils/baremetal-weights-patcher/Cargo.toml @@ -10,4 +10,3 @@ license.workspace = true syn = { workspace = true, features = ["parsing", "full", "visit"] } clap = { workspace = true, features = ["derive"] } proc-macro2 = { workspace = true, features = ["span-locations"]} -gear-workspace-hack.workspace = true diff --git a/utils/builtins-common/Cargo.toml b/utils/builtins-common/Cargo.toml index 3fb6aa61a09..6419ba3c339 100644 --- a/utils/builtins-common/Cargo.toml +++ b/utils/builtins-common/Cargo.toml @@ -25,7 +25,6 @@ sha2 = { workspace = true, optional = true } gbuiltin-eth-bridge = { workspace = true, optional = true } gprimitives = { workspace = true, optional = true } sha3 = { workspace = true, optional = true } -gear-workspace-hack.workspace = true [lints] workspace = true diff --git a/utils/calc-stack-height/Cargo.toml b/utils/calc-stack-height/Cargo.toml index 05b9b355c76..b12bf7c68fb 100644 --- a/utils/calc-stack-height/Cargo.toml +++ b/utils/calc-stack-height/Cargo.toml @@ -16,4 +16,3 @@ log.workspace = true tracing-subscriber.workspace = true anyhow = { workspace = true, features = ["std"] } wat.workspace = true -gear-workspace-hack.workspace = true diff --git a/utils/call-gen/Cargo.toml b/utils/call-gen/Cargo.toml index 49eedefd719..749ce2db52d 100644 --- a/utils/call-gen/Cargo.toml +++ b/utils/call-gen/Cargo.toml @@ -16,4 +16,3 @@ hex.workspace = true log.workspace = true rand.workspace = true thiserror.workspace = true -gear-workspace-hack.workspace = true diff --git a/utils/cargo-gbuild/Cargo.toml b/utils/cargo-gbuild/Cargo.toml index 6a859d458b8..ea1d2f2d602 100644 --- a/utils/cargo-gbuild/Cargo.toml +++ b/utils/cargo-gbuild/Cargo.toml @@ -23,7 +23,6 @@ tracing.workspace = true tracing-subscriber.workspace = true gear-wasm-optimizer.workspace = true glob.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] gtest.workspace = true diff --git a/utils/crates-io/Cargo.toml b/utils/crates-io/Cargo.toml index 2253d84c189..4299d6f6f16 100644 --- a/utils/crates-io/Cargo.toml +++ b/utils/crates-io/Cargo.toml @@ -13,4 +13,3 @@ reqwest = { workspace = true, features = ["json", "default-tls"] } tempfile.workspace = true tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } toml_edit.workspace = true -gear-workspace-hack.workspace = true diff --git a/utils/gear-replay-cli/Cargo.toml b/utils/gear-replay-cli/Cargo.toml index e585192540a..2391d90ff61 100644 --- a/utils/gear-replay-cli/Cargo.toml +++ b/utils/gear-replay-cli/Cargo.toml @@ -38,7 +38,6 @@ clap = { workspace = true, features = ["derive"] } hex.workspace = true log.workspace = true tokio = { workspace = true, features = ["macros"] } -gear-workspace-hack.workspace = true [features] default = ["always-wasm"] diff --git a/utils/gear-wasmer-cache/Cargo.toml b/utils/gear-wasmer-cache/Cargo.toml index 3e7c1b467d5..46524ae8036 100644 --- a/utils/gear-wasmer-cache/Cargo.toml +++ b/utils/gear-wasmer-cache/Cargo.toml @@ -21,7 +21,6 @@ uluru.workspace = true fs4.workspace = true derive_more.workspace = true bytes.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] tempfile.workspace = true diff --git a/utils/junit-common/Cargo.toml b/utils/junit-common/Cargo.toml index 7f5ca211dc7..1cb0ae08f9e 100644 --- a/utils/junit-common/Cargo.toml +++ b/utils/junit-common/Cargo.toml @@ -7,4 +7,3 @@ license.workspace = true [dependencies] serde = { version = "1", features = ["derive"] } -gear-workspace-hack.workspace = true diff --git a/utils/key-finder/Cargo.toml b/utils/key-finder/Cargo.toml index b36bbfb9cf4..3091e9f61bc 100644 --- a/utils/key-finder/Cargo.toml +++ b/utils/key-finder/Cargo.toml @@ -10,4 +10,3 @@ name = "gear-key-finder" [dependencies] hex = { workspace = true, features = ["alloc"] } directories.workspace = true -gear-workspace-hack.workspace = true diff --git a/utils/lazy-pages-fuzzer/Cargo.toml b/utils/lazy-pages-fuzzer/Cargo.toml index 89a7e2ff397..4405740707e 100644 --- a/utils/lazy-pages-fuzzer/Cargo.toml +++ b/utils/lazy-pages-fuzzer/Cargo.toml @@ -18,4 +18,3 @@ wasmer.workspace = true wasmi.workspace = true wasmprinter.workspace = true wat.workspace = true -gear-workspace-hack.workspace = true diff --git a/utils/lazy-pages-fuzzer/runner/Cargo.toml b/utils/lazy-pages-fuzzer/runner/Cargo.toml index 0c098e51ab3..8bccc104ae5 100644 --- a/utils/lazy-pages-fuzzer/runner/Cargo.toml +++ b/utils/lazy-pages-fuzzer/runner/Cargo.toml @@ -15,4 +15,3 @@ rand_chacha = { workspace = true, default-features = true } hex.workspace = true log.workspace = true serde = { workspace = true, features = ["derive"] } -gear-workspace-hack.workspace = true diff --git a/utils/node-loader/Cargo.toml b/utils/node-loader/Cargo.toml index 98718fc412a..4800625ce87 100644 --- a/utils/node-loader/Cargo.toml +++ b/utils/node-loader/Cargo.toml @@ -30,4 +30,3 @@ tokio = { workspace = true, features = [ "macros", "rt-multi-thread" ] } tracing.workspace = true tracing-appender.workspace = true tracing-subscriber = { workspace = true, features = [ "json" ] } -gear-workspace-hack.workspace = true diff --git a/utils/node-wrapper/Cargo.toml b/utils/node-wrapper/Cargo.toml index 6e85e6f5b51..fcc071c1b1d 100644 --- a/utils/node-wrapper/Cargo.toml +++ b/utils/node-wrapper/Cargo.toml @@ -15,4 +15,3 @@ anyhow = { workspace = true, features = ["std"] } rand = { workspace = true, features = [ "getrandom" ] } which.workspace = true smallvec.workspace = true -gear-workspace-hack.workspace = true diff --git a/utils/regression-analysis/Cargo.toml b/utils/regression-analysis/Cargo.toml index 6d638782a8a..0f30a30cee4 100644 --- a/utils/regression-analysis/Cargo.toml +++ b/utils/regression-analysis/Cargo.toml @@ -17,4 +17,3 @@ thousands.workspace = true vara-runtime = { workspace = true, features = ["std"] } pallet-gear = { workspace = true, features = ["std"] } frame-support = { workspace = true, features = ["std"] } -gear-workspace-hack.workspace = true diff --git a/utils/runtime-fuzzer/Cargo.toml b/utils/runtime-fuzzer/Cargo.toml index 2b57c44bdf9..de2d0298324 100644 --- a/utils/runtime-fuzzer/Cargo.toml +++ b/utils/runtime-fuzzer/Cargo.toml @@ -40,7 +40,6 @@ sp-consensus-babe.workspace = true sp-consensus-grandpa.workspace = true pallet-im-online.workspace = true sp-authority-discovery.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] proptest.workspace = true diff --git a/utils/runtime-fuzzer/fuzz/Cargo.toml b/utils/runtime-fuzzer/fuzz/Cargo.toml index 22b81377230..405cd6b31b4 100644 --- a/utils/runtime-fuzzer/fuzz/Cargo.toml +++ b/utils/runtime-fuzzer/fuzz/Cargo.toml @@ -12,7 +12,6 @@ libfuzzer-sys.workspace = true runtime-fuzzer = { path = ".." } gear-utils.workspace = true log.workspace = true -gear-workspace-hack.workspace = true [[bin]] name = "runtime-fuzzer-fuzz" diff --git a/utils/ss58/Cargo.toml b/utils/ss58/Cargo.toml index 539d66f6955..662d2a3954f 100644 --- a/utils/ss58/Cargo.toml +++ b/utils/ss58/Cargo.toml @@ -14,7 +14,6 @@ rust-version.workspace = true bs58.workspace = true blake2.workspace = true hex.workspace = true -gear-workspace-hack.workspace = true [features] alloc = [] diff --git a/utils/utils/Cargo.toml b/utils/utils/Cargo.toml index b39895baf3d..c969c23e6a8 100644 --- a/utils/utils/Cargo.toml +++ b/utils/utils/Cargo.toml @@ -19,4 +19,3 @@ serde_json.workspace = true path-clean.workspace = true gear-core.workspace = true parity-scale-codec.workspace = true -gear-workspace-hack.workspace = true diff --git a/utils/validator-checks/Cargo.toml b/utils/validator-checks/Cargo.toml index 84d8d0bed3f..76f3fbc3689 100644 --- a/utils/validator-checks/Cargo.toml +++ b/utils/validator-checks/Cargo.toml @@ -19,4 +19,3 @@ tracing-subscriber.workspace = true tokio = { workspace = true, features = [ "full" ] } parity-scale-codec.workspace = true sp-consensus-babe = { workspace = true, features = ["std"] } -gear-workspace-hack.workspace = true diff --git a/utils/wasm-builder/Cargo.toml b/utils/wasm-builder/Cargo.toml index 9cf8951da1e..f19d2b02f4d 100644 --- a/utils/wasm-builder/Cargo.toml +++ b/utils/wasm-builder/Cargo.toml @@ -26,4 +26,3 @@ gear-core.workspace = true gear-wasm-instrument.workspace = true gear-wasm-optimizer.workspace = true itertools = { workspace = true, features = ["use_std"] } -gear-workspace-hack.workspace = true diff --git a/utils/wasm-gen/Cargo.toml b/utils/wasm-gen/Cargo.toml index ab0c3c2f204..d401d0c9ebb 100644 --- a/utils/wasm-gen/Cargo.toml +++ b/utils/wasm-gen/Cargo.toml @@ -18,7 +18,6 @@ wasmparser.workspace = true thiserror.workspace = true indexmap = { workspace = true, features = ["std"] } nonempty.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] rand = { workspace = true, features = ["small_rng"] } diff --git a/utils/wasm-instrument/Cargo.toml b/utils/wasm-instrument/Cargo.toml index 66431a5b37e..23df481f765 100644 --- a/utils/wasm-instrument/Cargo.toml +++ b/utils/wasm-instrument/Cargo.toml @@ -18,7 +18,6 @@ enum-iterator.workspace = true wasmparser.workspace = true wasm-encoder.workspace = true log.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] wat.workspace = true diff --git a/utils/wasm-optimizer/Cargo.toml b/utils/wasm-optimizer/Cargo.toml index 64d7c063b09..3705cc266c7 100644 --- a/utils/wasm-optimizer/Cargo.toml +++ b/utils/wasm-optimizer/Cargo.toml @@ -20,7 +20,6 @@ log.workspace = true wasmparser.workspace = true which.workspace = true colored.workspace = true -gear-workspace-hack.workspace = true [dev-dependencies] wasmer.workspace = true diff --git a/utils/wasm-proc/Cargo.toml b/utils/wasm-proc/Cargo.toml index 8f668d94395..fab845091fa 100644 --- a/utils/wasm-proc/Cargo.toml +++ b/utils/wasm-proc/Cargo.toml @@ -18,4 +18,3 @@ log.workspace = true tracing-subscriber.workspace = true gear-wasm-builder.workspace = true gear-wasm-instrument = { workspace = true, features = ["std"] } -gear-workspace-hack.workspace = true diff --git a/utils/weight-diff/Cargo.toml b/utils/weight-diff/Cargo.toml index 95ad20f34b6..3b35c1292df 100644 --- a/utils/weight-diff/Cargo.toml +++ b/utils/weight-diff/Cargo.toml @@ -21,4 +21,3 @@ tabled.workspace = true pallet-gear = { workspace = true, features = ["std"] } frame-support = { workspace = true, features = ["std"] } vara-runtime = { workspace = true, features = ["std"] } -gear-workspace-hack.workspace = true