diff --git a/.github/workflows/cargo-linters.yml b/.github/workflows/cargo-linters.yml index 9617223..415782d 100644 --- a/.github/workflows/cargo-linters.yml +++ b/.github/workflows/cargo-linters.yml @@ -15,6 +15,28 @@ jobs: # before the plugin, as the cache uses the current rustc version as its cache key - run: rustup show + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "18" + + - name: Install Ganache + run: | + npm install -g ganache@7.9.0 + ganache --version + + - name: Install Solc + run: | + pip install solc-select + solc-select install 0.8.19 + solc-select use 0.8.19 + solc --version + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + - uses: Swatinem/rust-cache@v2 - name: Format and clippy run: | diff --git a/.github/workflows/rust-build.yml b/.github/workflows/rust-build.yml index f7cb3e0..124d63c 100644 --- a/.github/workflows/rust-build.yml +++ b/.github/workflows/rust-build.yml @@ -17,6 +17,28 @@ jobs: - uses: Swatinem/rust-cache@v2 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "18" + + - name: Install Ganache + run: | + npm install -g ganache@7.9.0 + ganache --version + + - name: Install Solc + run: | + pip install solc-select + solc-select install 0.8.19 + solc-select use 0.8.19 + solc --version + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + - name: Build the project run: | cargo build --release --workspace diff --git a/.gitignore b/.gitignore index 24f3c7b..cb696ed 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ script/anvil.json .idea +artifacts/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 0ce7593..91a4390 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,13 @@ [submodule "lib/piltover"] path = lib/piltover url = https://github.com/keep-starknet-strange/piltover +[submodule "lib/starkgate-contracts"] + path = lib/starkgate-contracts + url = https://github.com/starknet-io/starkgate-contracts +[submodule "lib/starkgate-contracts-0.9"] + path = lib/starkgate-contracts-0.9 + url = https://github.com/starknet-io/starkgate-contracts + branch = update-cairo-0.9.0 +[submodule "lib/starkgate-contracts-82e651f"] + path = lib/starkgate-contracts-82e651f + url = https://github.com/starknet-io/starkgate-contracts.git diff --git a/Cargo.lock b/Cargo.lock index 0d054a8..0fb6445 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -82,7 +82,7 @@ dependencies = [ "serde_json", "starknet", "starknet-accounts", - "starknet-core", + "starknet-core 0.11.1", "starknet-ff", "starknet-providers", ] @@ -100,7 +100,7 @@ dependencies = [ "starknet", "starknet-accounts", "starknet-contract", - "starknet-core", + "starknet-core 0.11.1", "starknet-ff", "starknet-providers", "starknet-signers", @@ -189,13 +189,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -217,14 +217,14 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" @@ -259,6 +259,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "base64ct" version = "1.6.0" @@ -361,9 +367,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" dependencies = [ "serde", ] @@ -423,9 +429,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.18" +version = "1.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" +checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945" dependencies = [ "jobserver", "libc", @@ -542,9 +548,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" dependencies = [ "cfg-if", "cpufeatures", @@ -682,7 +688,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -693,7 +699,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -741,7 +747,7 @@ checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1041,7 +1047,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "syn 2.0.77", + "syn 2.0.79", "toml", "walkdir", ] @@ -1058,7 +1064,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1083,7 +1089,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.77", + "syn 2.0.79", "tempfile", "thiserror", "tiny-keccak", @@ -1262,9 +1268,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.33" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "miniz_oxide 0.8.0", @@ -1303,9 +1309,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1318,9 +1324,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1328,15 +1334,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1345,9 +1351,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-locks" @@ -1361,26 +1367,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -1394,9 +1400,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1490,7 +1496,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.5.0", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -1505,9 +1511,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" [[package]] name = "hashers" @@ -1578,9 +1584,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -1590,9 +1596,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -1628,9 +1634,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1722,12 +1728,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.0", ] [[package]] @@ -1750,9 +1756,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "itertools" @@ -1789,9 +1795,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -1812,9 +1818,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", @@ -1865,9 +1871,9 @@ dependencies = [ [[package]] name = "lambdaworks-crypto" -version = "0.7.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb5d4f22241504f7c7b8d2c3a7d7835d7c07117f10bff2a7d96a9ef6ef217c3" +checksum = "bbc2a4da0d9e52ccfe6306801a112e81a8fc0c76aa3e4449fefeda7fef72bb34" dependencies = [ "lambdaworks-math", "serde", @@ -1877,9 +1883,9 @@ dependencies = [ [[package]] name = "lambdaworks-math" -version = "0.7.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "358e172628e713b80a530a59654154bfc45783a6ed70ea284839800cebdf8f97" +checksum = "d1bd2632acbd9957afc5aeec07ad39f078ae38656654043bf16e046fa2730e23" dependencies = [ "serde", "serde_json", @@ -1893,9 +1899,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "f0b21006cd1874ae9e650973c565615676dc4a274c965bb0a73796dac838ce4f" [[package]] name = "libm" @@ -2056,7 +2062,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2070,9 +2076,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ea5043e58958ee56f3e15a90aee535795cd7dfd319846288d93c5b57d85cbe" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "open-fastrlp" @@ -2227,7 +2233,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.5.0", + "indexmap 2.6.0", ] [[package]] @@ -2270,7 +2276,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2293,22 +2299,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2335,9 +2341,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "powerfmt" @@ -2367,7 +2373,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ "proc-macro2", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2395,9 +2401,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" dependencies = [ "unicode-ident", ] @@ -2494,9 +2500,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.4" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] @@ -2514,9 +2520,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.6" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", @@ -2526,9 +2532,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", @@ -2537,9 +2543,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -2720,9 +2726,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ryu" @@ -2852,7 +2858,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2880,9 +2886,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -2911,7 +2917,23 @@ dependencies = [ "indexmap 1.9.3", "serde", "serde_json", - "serde_with_macros", + "serde_with_macros 2.3.3", + "time", +] + +[[package]] +name = "serde_with" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros 3.11.0", "time", ] @@ -2924,7 +2946,19 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", +] + +[[package]] +name = "serde_with_macros" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] @@ -3097,7 +3131,7 @@ checksum = "1e633a772f59214c296d5037c95c36b72792c9360323818da2b625c7b4ec4b49" dependencies = [ "starknet-accounts", "starknet-contract", - "starknet-core", + "starknet-core 0.11.1", "starknet-crypto", "starknet-macros", "starknet-providers", @@ -3112,7 +3146,7 @@ checksum = "eee8a6b588a22c7e79f5d8d4e33413387db63a8beb98be8610138541794cc0a5" dependencies = [ "async-trait", "auto_impl", - "starknet-core", + "starknet-core 0.11.1", "starknet-crypto", "starknet-providers", "starknet-signers", @@ -3127,9 +3161,9 @@ checksum = "a5f91344f1e0b81873b6dc235c50ae4d084c6ea4dd4a1e3e27ad895803adb610" dependencies = [ "serde", "serde_json", - "serde_with", + "serde_with 2.3.3", "starknet-accounts", - "starknet-core", + "starknet-core 0.11.1", "starknet-providers", "thiserror", ] @@ -3147,7 +3181,26 @@ dependencies = [ "serde", "serde_json", "serde_json_pythonic", - "serde_with", + "serde_with 2.3.3", + "sha3", + "starknet-crypto", + "starknet-types-core", +] + +[[package]] +name = "starknet-core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538240cbe6663c673fe77465f294da707080f39678dd7066761554899e46100" +dependencies = [ + "base64 0.21.7", + "crypto-bigint", + "flate2", + "hex", + "serde", + "serde_json", + "serde_json_pythonic", + "serde_with 3.11.0", "sha3", "starknet-crypto", "starknet-types-core", @@ -3168,9 +3221,9 @@ dependencies = [ [[package]] name = "starknet-crypto" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2a821ad8d98c6c3e4d0e5097f3fe6e2ed120ada9d32be87cd1330c7923a2f0" +checksum = "60a5064173a8e8d2675e67744fd07f310de44573924b6b7af225a6bdd8102913" dependencies = [ "crypto-bigint", "hex", @@ -3180,28 +3233,16 @@ dependencies = [ "num-traits", "rfc6979", "sha2", - "starknet-crypto-codegen", "starknet-curve", "starknet-types-core", "zeroize", ] -[[package]] -name = "starknet-crypto-codegen" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e179dedc3fa6da064e56811d3e05d446aa2f7459e4eb0e3e49378a337235437" -dependencies = [ - "starknet-curve", - "starknet-types-core", - "syn 2.0.77", -] - [[package]] name = "starknet-curve" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56935b306dcf0b8f14bb2a1257164b8478bb8be4801dfae0923f5b266d1b457c" +checksum = "bcde6bd74269b8161948190ace6cf069ef20ac6e79cd2ba09b320efa7500b6de" dependencies = [ "starknet-types-core", ] @@ -3249,12 +3290,12 @@ dependencies = [ [[package]] name = "starknet-macros" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fe4f8d615329410578cbedcdbaa4a36c7f28f68c3f3ac56006cfbdaeaa2b41" +checksum = "8986a940af916fc0a034f4e42c6ba76d94f1e97216d75447693dfd7aefaf3ef2" dependencies = [ - "starknet-core", - "syn 2.0.77", + "starknet-core 0.12.0", + "syn 2.0.79", ] [[package]] @@ -3272,8 +3313,8 @@ dependencies = [ "reqwest", "serde", "serde_json", - "serde_with", - "starknet-core", + "serde_with 2.3.3", + "starknet-core 0.11.1", "thiserror", "url", ] @@ -3304,7 +3345,7 @@ dependencies = [ "eth-keystore", "getrandom", "rand", - "starknet-core", + "starknet-core 0.11.1", "starknet-crypto", "thiserror", ] @@ -3324,9 +3365,9 @@ dependencies = [ [[package]] name = "starknet-types-core" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6bacf0ba19bc721e518bc4bf389ff13daa8a7c5db5fd320600473b8aa9fcbd" +checksum = "fa1b9e01ccb217ab6d475c5cda05dbb22c30029f7bb52b192a010a00d77a3d74" dependencies = [ "lambdaworks-crypto", "lambdaworks-math", @@ -3380,7 +3421,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3422,9 +3463,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -3466,9 +3507,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", @@ -3490,22 +3531,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3598,7 +3639,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3662,11 +3703,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", @@ -3698,7 +3739,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3794,9 +3835,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" @@ -3806,18 +3847,18 @@ checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "untrusted" @@ -3909,9 +3950,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", @@ -3920,24 +3961,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -3947,9 +3988,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3957,28 +3998,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -4180,9 +4221,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -4249,7 +4290,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -4269,7 +4310,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b8013dc..c121b96 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ [workspace] resolver = "2" members = [ + "crates/l2/utils", "crates/l2/starknet-core-contract-client", "crates/l2/ethereum-instance", "crates/l2/starknet-eth-bridge-client", "crates/l2/starknet-token-bridge-client", "crates/l2/starkgate-manager-client", - "crates/l2/utils", "crates/l2/starknet-erc20-client", "crates/l2/starkgate-registry-client", "crates/l2/starknet-proxy-client", diff --git a/Makefile b/Makefile index dc96074..6e4f2b8 100644 --- a/Makefile +++ b/Makefile @@ -3,12 +3,86 @@ # Moreover, any project using sandbox as dependency won't build unless # there's Foundry installed on the machine. -.PHONY: artifacts +.PHONY: piltover cairo-lang local-contracts starkgate-contracts-latest starkgate-contracts-old l2-artifacts -artifacts: - mkdir crates/starknet-proxy-client/src/artifacts || true - mkdir crates/starknet-core-contract-client/src/artifacts || true +CAIRO_LANG_RELEASE_VERSION="v0.13.2" +STARKGATE_CONTRACTS_RELEASE_VERSION="v2.0.1" +STARKGATE_LEGACY_CONTRACTS_COMMIT_HASH="82e651f5f642508577b6310f47d0d457f5f9a9bb" # branch update 0.9.0 + +piltover: + (cd lib/piltover && scarb build && cp target/dev/* ../../crates/l3/appchain-core-contract-client/artifacts) + +cairo-lang: + # Building + cp build-artifacts/cairo-lang/foundry.toml lib/cairo-lang/foundry.toml + cd lib/cairo-lang && \ + git checkout $(CAIRO_LANG_RELEASE_VERSION) && \ + forge build + # Copying Contracts : + mkdir -p artifacts/cairo-lang + cp lib/cairo-lang/out/Starknet.sol/Starknet.json artifacts/cairo-lang/Starknet.json + +local-contracts: + # Building + forge build + # Copying Contracts : + cp out/StarknetDevCoreContract.sol/Starknet.json artifacts/StarknetDevCoreContract.json + cp out/UnsafeProxy.sol/UnsafeProxy.json artifacts/UnsafeProxy.json + +starkgate-contracts-latest: + # Configure solidity version + solc-select install 0.8.24 && solc-select use 0.8.24 + # Building + cd lib/starkgate-contracts && \ + git checkout $(STARKGATE_CONTRACTS_RELEASE_VERSION) && \ + ./scripts/setup.sh && \ + FILES=$$(cat src/solidity/files_to_compile.txt) && \ + solc $$FILES --allow-paths .=., --optimize --optimize-runs 200 --overwrite --combined-json abi,bin -o artifacts && \ + ./scripts/extract_artifacts.py + # building ERC20 (test) + cp build-artifacts/starkgate-contracts/foundry.toml lib/starkgate-contracts/starkware/solidity/foundry.toml && \ + cd lib/starkgate-contracts/starkware/solidity && \ + echo "pragma solidity ^0.8.0; import \"./ERC20.sol\"; contract ERC20_1 is ERC20 { constructor() { _mint(msg.sender, 100000000000); } }" > ./tokens/ERC20/ERC20_1.sol && \ forge build - cp out/UnsafeProxy.sol/UnsafeProxy.json crates/starknet-proxy-client/src/artifacts/ - cp out/StarknetSovereign.sol/Starknet.json crates/starknet-core-contract-client/src/artifacts/ - (cd lib/piltover && scarb build && cp target/dev/* ../../crates/l3/appchain-core-contract-client/artifacts) \ No newline at end of file + # Copying Contracts : + mkdir -p artifacts/starkgate-contracts + cp lib/starkgate-contracts/artifacts/StarkgateManager.json artifacts/starkgate-contracts/StarkgateManager.json + cp lib/starkgate-contracts/artifacts/StarkgateRegistry.json artifacts/starkgate-contracts/StarkgateRegistry.json + cp lib/starkgate-contracts/artifacts/Proxy.json artifacts/starkgate-contracts/Proxy_5_0_0.json + cp lib/starkgate-contracts/artifacts/StarknetTokenBridge.json artifacts/starkgate-contracts/StarknetTokenBridge.json + cp lib/starkgate-contracts/starkware/solidity/out/ERC20_1.sol/ERC20_1.json artifacts/starkgate-contracts/ERC20.json + +starkgate-contracts-old: + # Configure solidity version + solc-select install 0.6.12 && solc-select use 0.6.12 + # Building + cp build-artifacts/starkgate-contracts-0.9/foundry.toml lib/starkgate-contracts-0.9/src/starkware/solidity/foundry.toml + cp build-artifacts/starkgate-contracts-0.9/foundry2.toml lib/starkgate-contracts-0.9/src/starkware/foundry.toml + cd lib/starkgate-contracts-0.9/src/starkware/solidity && \ + forge build + cd lib/starkgate-contracts-0.9/src/starkware && \ + forge build + # Copying Contracts : + mkdir -p artifacts/starkgate-contracts-0.9 + cp lib/starkgate-contracts-0.9/src/starkware/solidity/out/Proxy.sol/Proxy.json artifacts/starkgate-contracts-0.9/Proxy_3_0_2.json + +starkgate-contracts-82e651f: + # Configure solidity version + solc-select install 0.6.12 && solc-select use 0.6.12 + # Checking out to the commit and Building + cp build-artifacts/starkgate-contracts-82e651f/foundry.toml lib/starkgate-contracts-82e651f/src/starkware/foundry.toml + cd lib/starkgate-contracts-82e651f && \ + git checkout $(STARKGATE_LEGACY_CONTRACTS_COMMIT_HASH) && \ + cd src/starkware && \ + forge build + # Copying Contracts + cp lib/starkgate-contracts-82e651f/src/starkware/out/StarknetEthBridge.sol/StarknetEthBridge.json artifacts/starkgate-contracts-0.9/StarknetLegacyBridge.json + +l2-artifacts: + make cairo-lang + make local-contracts + make starkgate-contracts-latest + make starkgate-contracts-old + make starkgate-contracts-82e651f + python3 build-artifacts/convert.py + echo "L2 Artifacts built ✅" diff --git a/build-artifacts/cairo-lang/foundry.toml b/build-artifacts/cairo-lang/foundry.toml new file mode 100644 index 0000000..2c3a57a --- /dev/null +++ b/build-artifacts/cairo-lang/foundry.toml @@ -0,0 +1,7 @@ +[profile.default] +src = "src/starkware/starknet/solidity" +out = "out" +libs = ["lib"] +solc = "0.8.27" +evm_version = "cancun" +remappings = ["starkware=src/starkware"] diff --git a/build-artifacts/convert.py b/build-artifacts/convert.py new file mode 100644 index 0000000..91b3bf3 --- /dev/null +++ b/build-artifacts/convert.py @@ -0,0 +1,22 @@ +import json +import os + +def edit_json_file(filepath): + with open(filepath, 'r') as f: + data = json.load(f) + + if isinstance(data.get('bytecode'), str): + data['bytecode'] = {'object': data['bytecode']} + + with open(filepath, 'w') as f: + json.dump(data, f, indent=4) + +script_dir = os.path.dirname(os.path.abspath(__file__)) +artifacts_dir = os.path.join(script_dir, "..", "artifacts") + +for root, dirs, files in os.walk(artifacts_dir): + for filename in files: + if filename.endswith('.json'): + full_path = os.path.join(root, filename) + print(f"Editing {filename}") + edit_json_file(full_path) diff --git a/build-artifacts/starkgate-contracts-0.9/foundry.toml b/build-artifacts/starkgate-contracts-0.9/foundry.toml new file mode 100644 index 0000000..a61b50e --- /dev/null +++ b/build-artifacts/starkgate-contracts-0.9/foundry.toml @@ -0,0 +1,5 @@ +[profile.default] +src = "./upgrade/" +out = "out" +libs = ["lib"] +solc = "0.6.12" diff --git a/build-artifacts/starkgate-contracts-0.9/foundry2.toml b/build-artifacts/starkgate-contracts-0.9/foundry2.toml new file mode 100644 index 0000000..216a3ab --- /dev/null +++ b/build-artifacts/starkgate-contracts-0.9/foundry2.toml @@ -0,0 +1,10 @@ +[profile.default] +src = "./starknet" +out = "out" +libs = ["lib"] +solc = "0.6.12" +remappings = [ + "contracts/starkware/solidity=./solidity", + "contracts/starkware/starknet=./starknet", + "contracts/starkware/cairo=./cairo", +] diff --git a/build-artifacts/starkgate-contracts-82e651f/foundry.toml b/build-artifacts/starkgate-contracts-82e651f/foundry.toml new file mode 100644 index 0000000..3816ace --- /dev/null +++ b/build-artifacts/starkgate-contracts-82e651f/foundry.toml @@ -0,0 +1,10 @@ +[profile.default] +src = "./starknet" +out = "out" +libs = ["lib"] +solc = "0.6.12" +remappings = [ + "starkware/solidity=./solidity", + "starkware/starknet=./starknet", + "starkware/cairo=./cairo", +] diff --git a/build-artifacts/starkgate-contracts/foundry.toml b/build-artifacts/starkgate-contracts/foundry.toml new file mode 100644 index 0000000..a95b4a4 --- /dev/null +++ b/build-artifacts/starkgate-contracts/foundry.toml @@ -0,0 +1,5 @@ +[profile.default] +src = "./tokens/" +out = "out" +solc = "0.8.27" +evm_version = "cancun" diff --git a/crates/l2/starkgate-manager-client/src/artifacts/StarkgateManager.json b/crates/l2/starkgate-manager-client/src/artifacts/StarkgateManager.json deleted file mode 100644 index a8852c1..0000000 --- a/crates/l2/starkgate-manager-client/src/artifacts/StarkgateManager.json +++ /dev/null @@ -1,1083 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "addExistingBridge", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "bridge_", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "blockToken", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "deactivateToken", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "enrollTokenBridge", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getRegistry", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "identify", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "initialize", - "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isFrozen", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "ExistingBridgeAdded", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "bridge", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TokenBlocked", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TokenDeactivated", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TokenEnrolled", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60c06040523480156200001157600080fd5b5030608052600160a0819052620000276200002e565b50620004f7565b336200003b81806200003e565b50565b620000486200019f565b15620000e1576001600160a01b03821660009081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000db5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ec565b620000ec82620001f3565b620000f66200033e565b1562000194576001600160a01b03811660009081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001905760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d2565b5050565b620001908162000390565b600080516020620029628339815191526000908152600080516020620029a28339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200020e6000805160206200296283398151915282620003fc565b620002487ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068600080516020620029c28339815191526200049e565b62000272600080516020620029c2833981519152600080516020620029628339815191526200049e565b6200028d60008051602062002962833981519152806200049e565b620002c87f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7600080516020620029c28339815191526200049e565b620003037f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e600080516020620029c28339815191526200049e565b6200003b7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228600080516020620029628339815191526200049e565b600080516020620029828339815191526000908152600080516020620029a28339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001ec565b620003ab60008051602062002982833981519152806200049e565b620003e67f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96600080516020620029828339815191526200049e565b6200003b60008051602062002982833981519152825b6000828152600080516020620029a2833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000190576000828152600080516020620029a2833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000828152600080516020620029a28339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a0516124456200051d60003960006106f90152600061078c01526124456000f3fe6080604052600436106101ee5760003560e01c8063726176e81161010d578063cdd1f70d116100a0578063ed9ef16a1161006f578063ed9ef16a1461057a578063ee0e68071461059a578063eeb72866146105ba578063fa0f73ba14610606578063fad8b32a1461062657600080fd5b8063cdd1f70d146104fa578063d08fb6cb1461051a578063d9fa70911461053a578063deec9c5a1461055a57600080fd5b80639463629a116100dc5780639463629a14610487578063a2bdde3d146104a7578063c1d220fe146104c7578063cb1cccce146104da57600080fd5b8063726176e814610407578063757bd9ab146104275780638101b64c146104475780638e5224ff1461046757600080fd5b80634ee165d61161018557806368173bcf1161015457806368173bcf146103875780636c04d9d5146103a75780636d70f7ae146103c75780636fc97cbf146103e757600080fd5b80634ee165d6146102fa5780635a5d1bb91461031a5780635ab1bd531461033a57806362a143761461036757600080fd5b806333eeb147116101c157806333eeb1471461027557806336568abe1461029a5780633682a450146102ba578063439fab91146102da57600080fd5b80630b3a2d21146101f35780630e770f231461021557806317896383146102355780632f95198514610255575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611eae565b610646565b005b34801561022157600080fd5b50610213610230366004611eae565b610661565b34801561024157600080fd5b50610213610250366004611eae565b610679565b34801561026157600080fd5b50610213610270366004611eae565b610691565b34801561028157600080fd5b5060005b60405190151581526020015b60405180910390f35b3480156102a657600080fd5b506102136102b5366004611ecb565b6106df565b3480156102c657600080fd5b506102136102d5366004611eae565b610771565b3480156102e657600080fd5b506102136102f5366004611efb565b610789565b34801561030657600080fd5b50610213610315366004611f6d565b61093a565b34801561032657600080fd5b50610285610335366004611eae565b610a81565b34801561034657600080fd5b5061034f610aa1565b6040516001600160a01b039091168152602001610291565b34801561037357600080fd5b50610213610382366004611eae565b610ab0565b34801561039357600080fd5b506102136103a2366004611eae565b610ac8565b3480156103b357600080fd5b506102856103c2366004611eae565b610de0565b3480156103d357600080fd5b506102856103e2366004611eae565b610dfa565b3480156103f357600080fd5b50610213610402366004611eae565b610e14565b34801561041357600080fd5b50610213610422366004611eae565b610e2c565b34801561043357600080fd5b50610285610442366004611eae565b61104c565b34801561045357600080fd5b50610213610462366004611eae565b611066565b34801561047357600080fd5b50610285610482366004611eae565b6110a7565b34801561049357600080fd5b506102136104a2366004611eae565b6110c1565b3480156104b357600080fd5b506102856104c2366004611eae565b6110d9565b6102136104d5366004611eae565b6110f3565b3480156104e657600080fd5b506102856104f5366004611eae565b6112b6565b34801561050657600080fd5b50610213610515366004611eae565b6112d0565b34801561052657600080fd5b50610285610535366004611eae565b6112e8565b34801561054657600080fd5b50610213610555366004611eae565b611302565b34801561056657600080fd5b50610213610575366004611eae565b61131a565b34801561058657600080fd5b50610213610595366004611eae565b611332565b3480156105a657600080fd5b506102136105b5366004611eae565b61134a565b3480156105c657600080fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102919190611fbf565b34801561061257600080fd5b50610213610621366004611eae565b61138b565b34801561063257600080fd5b50610213610641366004611eae565b6113a3565b61065e6000805160206123f0833981519152826113bb565b50565b61065e60008051602061236f833981519152826113bb565b61065e60008051602061238f833981519152826113bb565b80336001600160a01b038216036106c35760405162461bcd60e51b81526004016106ba90611ff2565b60405180910390fd5b6106db60008051602061238f833981519152836113d7565b5050565b6000805160206122ac8339815191528214801561071a57507f0000000000000000000000000000000000000000000000000000000000000000155b156107675760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016106ba565b6106db82826113f3565b61065e6000805160206123d0833981519152826113bb565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107fa5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016106ba565b6000610807816020612038565b9050600061081682602061204f565b90508083101561085e5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016106ba565b600061086c82848688612062565b8101906108799190611eae565b905036600061088a8582888a612062565b9150915036600061089d8887818c612062565b90925090506001600160a01b038516156108c7576108bc85838361146d565b505050505050505050565b6108cf6115af565b1561091e5780156109195760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016106ba565b6108bc565b61092882826115ca565b61093282826116e7565b6108bc61170c565b610943336110d9565b61095f5760405162461bcd60e51b81526004016106ba9061208c565b806001600160a01b0316610971611717565b6001600160a01b0316036109d85760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b60648201526084016106ba565b6109e061173a565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f90604401600060405180830381600087803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef090600090a35050565b6000610a9b6000805160206122ec8339815191528361175d565b92915050565b6000610aab61173a565b905090565b61065e6000805160206122cc833981519152826113bb565b610ad1336110d9565b610aed5760405162461bcd60e51b81526004016106ba9061208c565b6000610af761173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060009183169063f44c7c8f90602401602060405180830381865afa158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6791906120c6565b90506001600160a01b038116610bb45760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b60448201526064016106ba565b6000196001600160a01b03821601610cc457604051632ab899fb60e11b81526001600160a01b0384811660048301526000919084169063557133f690602401600060405180830381865afa158015610c10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c3891908101906120f9565b5115610c79576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610ca8565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b81526004016106ba9190611fbf565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff90600090a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401600060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b50505050610d5c611717565b6001600160a01b0316816001600160a01b031603610ddb57610d7c611717565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b600060405180830381600087803b158015610dc257600080fd5b505af1158015610dd6573d6000803e3d6000fd5b505050505b505050565b6000610a9b60008051602061230c8339815191528361175d565b6000610a9b6000805160206123d08339815191528361175d565b61065e60008051602061230c833981519152826113bb565b610e35336110d9565b610e515760405162461bcd60e51b81526004016106ba9061208c565b6000610e5b61173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060009183169063f44c7c8f90602401602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb91906120c6565b90506001600160a01b038116610f3f5760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e990600090a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610da8565b6000196001600160a01b0382160161100457604051632ab899fb60e11b81526001600160a01b0384811660048301526000919084169063557133f690602401600060405180830381865afa158015610f9b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fc391908101906120f9565b5115610c79576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610ca8565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f5345525649434500000060448201526064016106ba565b6000610a9b60008051602061236f8339815191528361175d565b80336001600160a01b0382160361108f5760405162461bcd60e51b81526004016106ba90611ff2565b6106db6000805160206122cc833981519152836113d7565b6000610a9b60008051602061238f8339815191528361175d565b61065e6000805160206122ac833981519152826113bb565b6000610a9b6000805160206123f08339815191528361175d565b60006110fd61173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d91906120c6565b6001600160a01b0316036111ba5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b60448201526064016106ba565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee490600090a3806001600160a01b031663a3ecff8f83611208611717565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b50505050611270611717565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024016000604051808303818588803b158015610dc257600080fd5b6000610a9b6000805160206122ac8339815191528361175d565b61065e6000805160206122ec833981519152826113bb565b6000610a9b6000805160206122cc8339815191528361175d565b61065e60008051602061236f833981519152826113d7565b61065e6000805160206122ec833981519152826113d7565b61065e60008051602061230c833981519152826113d7565b80336001600160a01b038216036113735760405162461bcd60e51b81526004016106ba90611ff2565b6106db6000805160206122ac833981519152836113d7565b61065e6000805160206123f0833981519152826113d7565b61065e6000805160206123d0833981519152826113d7565b6113c482611795565b6113cd816117b7565b610ddb83836117c1565b6113e082611795565b6113e9816117b7565b610ddb8383611837565b6001600160a01b03811633146114635760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106ba565b6106db8282611837565b6001600160a01b0383163b6114b95760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016106ba565b600080846001600160a01b031663439fab9160e01b85856040516024016114e19291906121be565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161151f91906121ed565b600060405180830381855af49150503d806000811461155a576040519150601f19603f3d011682016040523d82523d6000602084013e61155f565b606091505b50915091508181906115845760405162461bcd60e51b81526004016106ba9190611fbf565b5080518190156115a75760405162461bcd60e51b81526004016106ba9190611fbf565b505050505050565b6000806115ba61173a565b6001600160a01b03161415905090565b6040811461160e5760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016106ba565b60008061161d83850185611f6d565b91509150611634826001600160a01b03163b151590565b61168a5760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b60648201526084016106ba565b6001600160a01b0381163b6116e15760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f414444524553530060448201526064016106ba565b50505050565b6000806116f683850185611f6d565b91509150611703826118ab565b6116e1816118cd565b3361065e81806118ef565b6000610aab6040518060600160405280602181526020016123af602191396119f3565b6000610aab60405180606001604052806023815260200161234c602391396119f3565b600091825260008051602061232c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600090815260008051602061232c833981519152602052604090206001015490565b61065e8133611a27565b6117cb828261175d565b6106db57600082815260008051602061232c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b611841828261175d565b156106db57600082815260008051602061232c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61065e60405180606001604052806023815260200161234c6023913982611a8b565b61065e6040518060600160405280602181526020016123af6021913982611a8b565b6118f7611ae4565b15611965576119146000805160206122ac8339815191528361175d565b6119605760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016106ba565b61196e565b61196e82611b05565b611976611bf3565b156119ea576119936000805160206122cc8339815191528261175d565b6106db5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016106ba565b6106db81611c0d565b60008082604051602001611a0791906121ed565b60408051601f198184030181529190528051602090910120549392505050565b611a31828261175d565b6106db57611a49816001600160a01b03166014611c63565b611a54836020611c63565b604051602001611a65929190612209565b60408051601f198184030181529082905262461bcd60e51b82526106ba91600401611fbf565b6000611a96836119f3565b6001600160a01b031614611ada5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016106ba565b6106db8282611e06565b600080611afe6000805160206122ac833981519152611795565b1415905090565b611b1d6000805160206122ac833981519152826117c1565b611b436000805160206122ec83398151915260008051602061238f833981519152611e39565b611b6960008051602061238f8339815191526000805160206122ac833981519152611e39565b611b816000805160206122ac83398151915280611e39565b611ba76000805160206123d083398151915260008051602061238f833981519152611e39565b611bcd6000805160206123f083398151915260008051602061238f833981519152611e39565b61065e60008051602061230c8339815191526000805160206122ac833981519152611e39565b600080611afe6000805160206122cc833981519152611795565b611c256000805160206122cc83398151915280611e39565b611c4b60008051602061236f8339815191526000805160206122cc833981519152611e39565b61065e6000805160206122cc833981519152826117c1565b60606000611c72836002612038565b611c7d90600261204f565b67ffffffffffffffff811115611c9557611c956120e3565b6040519080825280601f01601f191660200182016040528015611cbf576020820181803683370190505b509050600360fc1b81600081518110611cda57611cda61227e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611d0957611d0961227e565b60200101906001600160f81b031916908160001a9053506000611d2d846002612038565b611d3890600161204f565b90505b6001811115611db0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d6c57611d6c61227e565b1a60f81b828281518110611d8257611d8261227e565b60200101906001600160f81b031916908160001a90535060049490941c93611da981612294565b9050611d3b565b508315611dff5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106ba565b9392505050565b600082604051602001611e1991906121ed565b604051602081830303815290604052805190602001209050818155505050565b6000611e4483611795565b600084815260008051602061232c8339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038116811461065e57600080fd5b600060208284031215611ec057600080fd5b8135611dff81611e99565b60008060408385031215611ede57600080fd5b823591506020830135611ef081611e99565b809150509250929050565b60008060208385031215611f0e57600080fd5b823567ffffffffffffffff80821115611f2657600080fd5b818501915085601f830112611f3a57600080fd5b813581811115611f4957600080fd5b866020828501011115611f5b57600080fd5b60209290920196919550909350505050565b60008060408385031215611f8057600080fd5b8235611f8b81611e99565b91506020830135611ef081611e99565b60005b83811015611fb6578181015183820152602001611f9e565b50506000910152565b6020815260008251806020840152611fde816040850160208701611f9b565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9b57610a9b612022565b80820180821115610a9b57610a9b612022565b6000808585111561207257600080fd5b8386111561207f57600080fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b80516120c181611e99565b919050565b6000602082840312156120d857600080fd5b8151611dff81611e99565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561210c57600080fd5b825167ffffffffffffffff8082111561212457600080fd5b818501915085601f83011261213857600080fd5b81518181111561214a5761214a6120e3565b8060051b604051601f19603f8301168101818110858211171561216f5761216f6120e3565b60405291825284820192508381018501918883111561218d57600080fd5b938501935b828510156121b2576121a3856120b6565b84529385019392850192612192565b98975050505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600082516121ff818460208701611f9b565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612241816017850160208801611f9b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612272816028840160208801611f9b565b01602801949350505050565b634e487b7160e01b600052603260045260246000fd5b6000816122a3576122a3612022565b50600019019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cd36da92815ef578b14e116ffb30dc8824458229727a0d3f24d3a4de18c97f6564736f6c6343000817003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99", - "sourceMap": "517:5134:29:-:0;;;;;;;;;;;;-1:-1:-1;479:4:45;463:21;;628:4:49;299:31:44;;;;340:21;:19;:21::i;:::-;258:110;517:5134:29;;2533:142:53;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;:::-;2564:111;2533:142::o;2681:1050::-;2782:28;:26;:28::i;:::-;2778:485;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3037:144:53;;;;-1:-1:-1;;;3037:144:53;;216:2:60;3037:144:53;;;198:21:60;255:2;235:18;;;228:30;294:27;274:18;;;267:55;339:18;;3037:144:53;;;;;;;;;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3494:151:53;;;;-1:-1:-1;;;3494:151:53;;570:2:60;3494:151:53;;;552:21:60;609:2;589:18;;;582:30;648:34;628:18;;;621:62;-1:-1:-1;;;699:18:60;;;692:32;741:19;;3494:151:53;368:398:60;3494:151:53;2681:1050;;:::o;3273:452::-;3676:38;3694:19;3676:17;:38::i;2221:152::-;-1:-1:-1;;;;;;;;;;;2282:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2282:4:53;;2305:44;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;253:64;-1:-1:-1;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;861:66;-1:-1:-1;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;1473:66;-1:-1:-1;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;1683:66;-1:-1:-1;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;-1:-1:-1;;;;;;;;;;;2438:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2438:4:53;;2461:42;5911:116:50;3737:280:53;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;1273:66;-1:-1:-1;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;8830:227:50;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;8433:241::-;8508:25;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;;:24;;;;8564:36;;;;8615:52;;5996:24;;8564:36;;5996:24;;:14;;8615:52;;8508:25;8615:52;8498:176;8433:241;;:::o;368:398:60:-;517:5134:29;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106101ee5760003560e01c8063726176e81161010d578063cdd1f70d116100a0578063ed9ef16a1161006f578063ed9ef16a1461057a578063ee0e68071461059a578063eeb72866146105ba578063fa0f73ba14610606578063fad8b32a1461062657600080fd5b8063cdd1f70d146104fa578063d08fb6cb1461051a578063d9fa70911461053a578063deec9c5a1461055a57600080fd5b80639463629a116100dc5780639463629a14610487578063a2bdde3d146104a7578063c1d220fe146104c7578063cb1cccce146104da57600080fd5b8063726176e814610407578063757bd9ab146104275780638101b64c146104475780638e5224ff1461046757600080fd5b80634ee165d61161018557806368173bcf1161015457806368173bcf146103875780636c04d9d5146103a75780636d70f7ae146103c75780636fc97cbf146103e757600080fd5b80634ee165d6146102fa5780635a5d1bb91461031a5780635ab1bd531461033a57806362a143761461036757600080fd5b806333eeb147116101c157806333eeb1471461027557806336568abe1461029a5780633682a450146102ba578063439fab91146102da57600080fd5b80630b3a2d21146101f35780630e770f231461021557806317896383146102355780632f95198514610255575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611eae565b610646565b005b34801561022157600080fd5b50610213610230366004611eae565b610661565b34801561024157600080fd5b50610213610250366004611eae565b610679565b34801561026157600080fd5b50610213610270366004611eae565b610691565b34801561028157600080fd5b5060005b60405190151581526020015b60405180910390f35b3480156102a657600080fd5b506102136102b5366004611ecb565b6106df565b3480156102c657600080fd5b506102136102d5366004611eae565b610771565b3480156102e657600080fd5b506102136102f5366004611efb565b610789565b34801561030657600080fd5b50610213610315366004611f6d565b61093a565b34801561032657600080fd5b50610285610335366004611eae565b610a81565b34801561034657600080fd5b5061034f610aa1565b6040516001600160a01b039091168152602001610291565b34801561037357600080fd5b50610213610382366004611eae565b610ab0565b34801561039357600080fd5b506102136103a2366004611eae565b610ac8565b3480156103b357600080fd5b506102856103c2366004611eae565b610de0565b3480156103d357600080fd5b506102856103e2366004611eae565b610dfa565b3480156103f357600080fd5b50610213610402366004611eae565b610e14565b34801561041357600080fd5b50610213610422366004611eae565b610e2c565b34801561043357600080fd5b50610285610442366004611eae565b61104c565b34801561045357600080fd5b50610213610462366004611eae565b611066565b34801561047357600080fd5b50610285610482366004611eae565b6110a7565b34801561049357600080fd5b506102136104a2366004611eae565b6110c1565b3480156104b357600080fd5b506102856104c2366004611eae565b6110d9565b6102136104d5366004611eae565b6110f3565b3480156104e657600080fd5b506102856104f5366004611eae565b6112b6565b34801561050657600080fd5b50610213610515366004611eae565b6112d0565b34801561052657600080fd5b50610285610535366004611eae565b6112e8565b34801561054657600080fd5b50610213610555366004611eae565b611302565b34801561056657600080fd5b50610213610575366004611eae565b61131a565b34801561058657600080fd5b50610213610595366004611eae565b611332565b3480156105a657600080fd5b506102136105b5366004611eae565b61134a565b3480156105c657600080fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102919190611fbf565b34801561061257600080fd5b50610213610621366004611eae565b61138b565b34801561063257600080fd5b50610213610641366004611eae565b6113a3565b61065e6000805160206123f0833981519152826113bb565b50565b61065e60008051602061236f833981519152826113bb565b61065e60008051602061238f833981519152826113bb565b80336001600160a01b038216036106c35760405162461bcd60e51b81526004016106ba90611ff2565b60405180910390fd5b6106db60008051602061238f833981519152836113d7565b5050565b6000805160206122ac8339815191528214801561071a57507f0000000000000000000000000000000000000000000000000000000000000000155b156107675760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016106ba565b6106db82826113f3565b61065e6000805160206123d0833981519152826113bb565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107fa5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016106ba565b6000610807816020612038565b9050600061081682602061204f565b90508083101561085e5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016106ba565b600061086c82848688612062565b8101906108799190611eae565b905036600061088a8582888a612062565b9150915036600061089d8887818c612062565b90925090506001600160a01b038516156108c7576108bc85838361146d565b505050505050505050565b6108cf6115af565b1561091e5780156109195760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016106ba565b6108bc565b61092882826115ca565b61093282826116e7565b6108bc61170c565b610943336110d9565b61095f5760405162461bcd60e51b81526004016106ba9061208c565b806001600160a01b0316610971611717565b6001600160a01b0316036109d85760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b60648201526084016106ba565b6109e061173a565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f90604401600060405180830381600087803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef090600090a35050565b6000610a9b6000805160206122ec8339815191528361175d565b92915050565b6000610aab61173a565b905090565b61065e6000805160206122cc833981519152826113bb565b610ad1336110d9565b610aed5760405162461bcd60e51b81526004016106ba9061208c565b6000610af761173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060009183169063f44c7c8f90602401602060405180830381865afa158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6791906120c6565b90506001600160a01b038116610bb45760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b60448201526064016106ba565b6000196001600160a01b03821601610cc457604051632ab899fb60e11b81526001600160a01b0384811660048301526000919084169063557133f690602401600060405180830381865afa158015610c10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c3891908101906120f9565b5115610c79576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610ca8565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b81526004016106ba9190611fbf565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff90600090a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401600060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b50505050610d5c611717565b6001600160a01b0316816001600160a01b031603610ddb57610d7c611717565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b600060405180830381600087803b158015610dc257600080fd5b505af1158015610dd6573d6000803e3d6000fd5b505050505b505050565b6000610a9b60008051602061230c8339815191528361175d565b6000610a9b6000805160206123d08339815191528361175d565b61065e60008051602061230c833981519152826113bb565b610e35336110d9565b610e515760405162461bcd60e51b81526004016106ba9061208c565b6000610e5b61173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060009183169063f44c7c8f90602401602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb91906120c6565b90506001600160a01b038116610f3f5760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e990600090a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610da8565b6000196001600160a01b0382160161100457604051632ab899fb60e11b81526001600160a01b0384811660048301526000919084169063557133f690602401600060405180830381865afa158015610f9b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fc391908101906120f9565b5115610c79576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610ca8565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f5345525649434500000060448201526064016106ba565b6000610a9b60008051602061236f8339815191528361175d565b80336001600160a01b0382160361108f5760405162461bcd60e51b81526004016106ba90611ff2565b6106db6000805160206122cc833981519152836113d7565b6000610a9b60008051602061238f8339815191528361175d565b61065e6000805160206122ac833981519152826113bb565b6000610a9b6000805160206123f08339815191528361175d565b60006110fd61173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d91906120c6565b6001600160a01b0316036111ba5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b60448201526064016106ba565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee490600090a3806001600160a01b031663a3ecff8f83611208611717565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b50505050611270611717565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024016000604051808303818588803b158015610dc257600080fd5b6000610a9b6000805160206122ac8339815191528361175d565b61065e6000805160206122ec833981519152826113bb565b6000610a9b6000805160206122cc8339815191528361175d565b61065e60008051602061236f833981519152826113d7565b61065e6000805160206122ec833981519152826113d7565b61065e60008051602061230c833981519152826113d7565b80336001600160a01b038216036113735760405162461bcd60e51b81526004016106ba90611ff2565b6106db6000805160206122ac833981519152836113d7565b61065e6000805160206123f0833981519152826113d7565b61065e6000805160206123d0833981519152826113d7565b6113c482611795565b6113cd816117b7565b610ddb83836117c1565b6113e082611795565b6113e9816117b7565b610ddb8383611837565b6001600160a01b03811633146114635760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106ba565b6106db8282611837565b6001600160a01b0383163b6114b95760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016106ba565b600080846001600160a01b031663439fab9160e01b85856040516024016114e19291906121be565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161151f91906121ed565b600060405180830381855af49150503d806000811461155a576040519150601f19603f3d011682016040523d82523d6000602084013e61155f565b606091505b50915091508181906115845760405162461bcd60e51b81526004016106ba9190611fbf565b5080518190156115a75760405162461bcd60e51b81526004016106ba9190611fbf565b505050505050565b6000806115ba61173a565b6001600160a01b03161415905090565b6040811461160e5760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016106ba565b60008061161d83850185611f6d565b91509150611634826001600160a01b03163b151590565b61168a5760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b60648201526084016106ba565b6001600160a01b0381163b6116e15760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f414444524553530060448201526064016106ba565b50505050565b6000806116f683850185611f6d565b91509150611703826118ab565b6116e1816118cd565b3361065e81806118ef565b6000610aab6040518060600160405280602181526020016123af602191396119f3565b6000610aab60405180606001604052806023815260200161234c602391396119f3565b600091825260008051602061232c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600090815260008051602061232c833981519152602052604090206001015490565b61065e8133611a27565b6117cb828261175d565b6106db57600082815260008051602061232c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b611841828261175d565b156106db57600082815260008051602061232c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61065e60405180606001604052806023815260200161234c6023913982611a8b565b61065e6040518060600160405280602181526020016123af6021913982611a8b565b6118f7611ae4565b15611965576119146000805160206122ac8339815191528361175d565b6119605760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016106ba565b61196e565b61196e82611b05565b611976611bf3565b156119ea576119936000805160206122cc8339815191528261175d565b6106db5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016106ba565b6106db81611c0d565b60008082604051602001611a0791906121ed565b60408051601f198184030181529190528051602090910120549392505050565b611a31828261175d565b6106db57611a49816001600160a01b03166014611c63565b611a54836020611c63565b604051602001611a65929190612209565b60408051601f198184030181529082905262461bcd60e51b82526106ba91600401611fbf565b6000611a96836119f3565b6001600160a01b031614611ada5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016106ba565b6106db8282611e06565b600080611afe6000805160206122ac833981519152611795565b1415905090565b611b1d6000805160206122ac833981519152826117c1565b611b436000805160206122ec83398151915260008051602061238f833981519152611e39565b611b6960008051602061238f8339815191526000805160206122ac833981519152611e39565b611b816000805160206122ac83398151915280611e39565b611ba76000805160206123d083398151915260008051602061238f833981519152611e39565b611bcd6000805160206123f083398151915260008051602061238f833981519152611e39565b61065e60008051602061230c8339815191526000805160206122ac833981519152611e39565b600080611afe6000805160206122cc833981519152611795565b611c256000805160206122cc83398151915280611e39565b611c4b60008051602061236f8339815191526000805160206122cc833981519152611e39565b61065e6000805160206122cc833981519152826117c1565b60606000611c72836002612038565b611c7d90600261204f565b67ffffffffffffffff811115611c9557611c956120e3565b6040519080825280601f01601f191660200182016040528015611cbf576020820181803683370190505b509050600360fc1b81600081518110611cda57611cda61227e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611d0957611d0961227e565b60200101906001600160f81b031916908160001a9053506000611d2d846002612038565b611d3890600161204f565b90505b6001811115611db0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d6c57611d6c61227e565b1a60f81b828281518110611d8257611d8261227e565b60200101906001600160f81b031916908160001a90535060049490941c93611da981612294565b9050611d3b565b508315611dff5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106ba565b9392505050565b600082604051602001611e1991906121ed565b604051602081830303815290604052805190602001209050818155505050565b6000611e4483611795565b600084815260008051602061232c8339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038116811461065e57600080fd5b600060208284031215611ec057600080fd5b8135611dff81611e99565b60008060408385031215611ede57600080fd5b823591506020830135611ef081611e99565b809150509250929050565b60008060208385031215611f0e57600080fd5b823567ffffffffffffffff80821115611f2657600080fd5b818501915085601f830112611f3a57600080fd5b813581811115611f4957600080fd5b866020828501011115611f5b57600080fd5b60209290920196919550909350505050565b60008060408385031215611f8057600080fd5b8235611f8b81611e99565b91506020830135611ef081611e99565b60005b83811015611fb6578181015183820152602001611f9e565b50506000910152565b6020815260008251806020840152611fde816040850160208701611f9b565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9b57610a9b612022565b80820180821115610a9b57610a9b612022565b6000808585111561207257600080fd5b8386111561207f57600080fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b80516120c181611e99565b919050565b6000602082840312156120d857600080fd5b8151611dff81611e99565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561210c57600080fd5b825167ffffffffffffffff8082111561212457600080fd5b818501915085601f83011261213857600080fd5b81518181111561214a5761214a6120e3565b8060051b604051601f19603f8301168101818110858211171561216f5761216f6120e3565b60405291825284820192508381018501918883111561218d57600080fd5b938501935b828510156121b2576121a3856120b6565b84529385019392850192612192565b98975050505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600082516121ff818460208701611f9b565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612241816017850160208801611f9b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612272816028840160208801611f9b565b01602801949350505050565b634e487b7160e01b600052603260045260246000fd5b6000816122a3576122a3612022565b50600019019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cd36da92815ef578b14e116ffb30dc8824458229727a0d3f24d3a4de18c97f6564736f6c63430008170033", - "sourceMap": "517:5134:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:116:44;;;;;;;;;;-1:-1:-1;3283:116:44;;;;;:::i;:::-;;:::i;:::-;;3155:122;;;;;;;;;;-1:-1:-1;3155:122:44;;;;;:::i;:::-;;:::i;2651:121::-;;;;;;;;;;-1:-1:-1;2651:121:44;;;;;:::i;:::-;;:::i;3680:137::-;;;;;;;;;;-1:-1:-1;3680:137:44;;;;;:::i;:::-;;:::i;757:86:49:-;;;;;;;;;;-1:-1:-1;808:4:49;757:86;;;567:14:60;;560:22;542:41;;530:2;515:18;757:86:49;;;;;;;;4632:247:44;;;;;;;;;;-1:-1:-1;4632:247:44;;;;;:::i;:::-;;:::i;2910:111::-;;;;;;;;;;-1:-1:-1;2910:111:44;;;;;:::i;:::-;;:::i;1465:1033:49:-;;;;;;;;;;-1:-1:-1;1465:1033:49;;;;;:::i;:::-;;:::i;2982:290:29:-;;;;;;;;;;-1:-1:-1;2982:290:29;;;;;:::i;:::-;;:::i;1359:135:44:-;;;;;;;;;;-1:-1:-1;1359:135:44;;;;;:::i;:::-;;:::i;1118:89:29:-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2067:32:60;;;2049:51;;2037:2;2022:18;1118:89:29;1903:203:60;3027:122:44;;;;;;;;;;-1:-1:-1;3027:122:44;;;;;:::i;:::-;;:::i;3534:763:29:-;;;;;;;;;;-1:-1:-1;3534:763:29;;;;;:::i;:::-;;:::i;2356:143:44:-;;;;;;;;;;-1:-1:-1;2356:143:44;;;;;:::i;:::-;;:::i;1793:128::-;;;;;;;;;;-1:-1:-1;1793:128:44;;;;;:::i;:::-;;:::i;3405:126::-;;;;;;;;;;-1:-1:-1;3405:126:44;;;;;:::i;:::-;;:::i;4523:708:29:-;;;;;;;;;;-1:-1:-1;4523:708:29;;;;;:::i;:::-;;:::i;2072:139:44:-;;;;;;;;;;-1:-1:-1;2072:139:44;;;;;:::i;:::-;;:::i;4087:138::-;;;;;;;;;;-1:-1:-1;4087:138:44;;;;;:::i;:::-;;:::i;1500:::-;;;;;;;;;;-1:-1:-1;1500:138:44;;;;;:::i;:::-;;:::i;2778:126::-;;;;;;;;;;-1:-1:-1;2778:126:44;;;;;:::i;:::-;;:::i;2217:133::-;;;;;;;;;;-1:-1:-1;2217:133:44;;;;;:::i;:::-;;:::i;5237:412:29:-;;;;;;:::i;:::-;;:::i;1644:143:44:-;;;;;;;;;;-1:-1:-1;1644:143:44;;;;;:::i;:::-;;:::i;2527:118::-;;;;;;;;;;-1:-1:-1;2527:118:44;;;;;:::i;:::-;;:::i;1927:139::-;;;;;;;;;;-1:-1:-1;1927:139:44;;;;;:::i;:::-;;:::i;4231:121::-;;;;;;;;;;-1:-1:-1;4231:121:44;;;;;:::i;:::-;;:::i;3557:117::-;;;;;;;;;;-1:-1:-1;3557:117:44;;;;;:::i;:::-;;:::i;4479:125::-;;;;;;;;;;-1:-1:-1;4479:125:44;;;;;:::i;:::-;;:::i;3823:142::-;;;;;;;;;;-1:-1:-1;3823:142:44;;;;;:::i;:::-;;:::i;1782:125:29:-;;;;;;;;;;-1:-1:-1;1859:41:29;;;;;;;;;;;;;;;;;1782:125;;;;1859:41;1782:125;:::i;4358:115:44:-;;;;;;;;;;-1:-1:-1;4358:115:44;;;;;:::i;:::-;;:::i;3971:110::-;;;;;;;;;;-1:-1:-1;3971:110:44;;;;;:::i;:::-;;:::i;3283:116::-;3347:45;-1:-1:-1;;;;;;;;;;;3384:7:44;3347:23;:45::i;:::-;3283:116;:::o;3155:122::-;3222:48;-1:-1:-1;;;;;;;;;;;3262:7:44;3222:23;:48::i;2651:121::-;2717:48;-1:-1:-1;;;;;;;;;;;2757:7:44;2717:23;:48::i;3680:137::-;3742:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;;;;;;;;;3761:49:::1;-1:-1:-1::0;;;;;;;;;;;3802:7:44;3761:24:::1;:49::i;:::-;3680:137:::0;;:::o;4632:247::-;-1:-1:-1;;;;;;;;;;;4708:24:44;;:45;;;;;4737:16;4736:17;4708:45;4704:118;;;4769:42;;-1:-1:-1;;;4769:42:44;;3320:2:60;4769:42:44;;;3302:21:60;;;3339:18;;;3332:30;3398:34;3378:18;;;3371:62;3450:18;;4769:42:44;3118:356:60;4704:118:44;4831:41;4858:4;4864:7;4831:26;:41::i;2910:111::-;2972:42;-1:-1:-1;;;;;;;;;;;3006:7:44;2972:23;:42::i;1465:1033:49:-;561:4:45;544:5;-1:-1:-1;;;;;544:22:45;;536:57;;;;-1:-1:-1;;;536:57:45;;3681:2:60;536:57:45;;;3663:21:60;3720:2;3700:18;;;3693:30;-1:-1:-1;;;3739:18:60;;;3732:52;3801:18;;536:57:45;3479:346:60;536:57:45;1543:17:49::1;1563:24;1543:17:::0;1563:2:::1;:24;:::i;:::-;1543:44:::0;-1:-1:-1;1597:24:49::1;1624:14;1543:44:::0;1636:2:::1;1624:14;:::i;:::-;1597:41:::0;-1:-1:-1;1656:31:49;;::::1;;1648:63;;;::::0;-1:-1:-1;;;1648:63:49;;4467:2:60;1648:63:49::1;::::0;::::1;4449:21:60::0;4506:2;4486:18;;;4479:30;-1:-1:-1;;;4525:18:60;;;4518:49;4584:18;;1648:63:49::1;4265:343:60::0;1648:63:49::1;1721:18;1753:32;1768:16:::0;1758:9;1753:4;;:32:::1;:::i;:::-;1742:55;;;;;;;:::i;:::-;1721:76:::0;-1:-1:-1;1808:35:49::1;;1846:16;1852:9:::0;1808:35;1846:4;;:16:::1;:::i;:::-;1808:54;;;;1933:23;;1959;:4:::0;1964:16;1959:4;;:23:::1;:::i;:::-;1933:49:::0;;-1:-1:-1;1933:49:49;-1:-1:-1;;;;;;2077:26:49;::::1;::::0;2073:122:::1;;2119:45;2143:10;2155:8;;2119:23;:45::i;:::-;2178:7;;;;;;;3680:137:44::0;;:::o;2073:122:49:-:1;2209:15;:13;:15::i;:::-;2205:287;;;2248:20:::0;;2240:53:::1;;;::::0;-1:-1:-1;;;2240:53:49;;5411:2:60;2240:53:49::1;::::0;::::1;5393:21:60::0;5450:2;5430:18;;;5423:30;-1:-1:-1;;;5469:18:60;;;5462:50;5529:18;;2240:53:49::1;5209:344:60::0;2240:53:49::1;2205:287;;;2373:26;2390:8;;2373:16;:26::i;:::-;2413:33;2437:8;;2413:23;:33::i;:::-;2460:21;:19;:21::i;2982:290:29:-:0;966:40:44;3290:10:50;2217:133:44;:::i;966:40::-;958:69;;;;-1:-1:-1;;;958:69:44;;;;;;;:::i;:::-;3095:7:29::1;-1:-1:-1::0;;;;;3083:19:29::1;:8;:6;:8::i;:::-;-1:-1:-1::0;;;;;3083:19:29::1;::::0;3075:72:::1;;;::::0;-1:-1:-1;;;3075:72:29;;6105:2:60;3075:72:29::1;::::0;::::1;6087:21:60::0;6144:2;6124:18;;;6117:30;6183:34;6163:18;;;6156:62;-1:-1:-1;;;6234:18:60;;;6227:38;6282:19;;3075:72:29::1;5903:404:60::0;3075:72:29::1;3176:10;:8;:10::i;:::-;3157:58;::::0;-1:-1:-1;;;3157:58:29;;-1:-1:-1;;;;;6542:15:60;;;3157:58:29::1;::::0;::::1;6524:34:60::0;6594:15;;;6574:18;;;6567:43;3157:42:29;;;::::1;::::0;::::1;::::0;6459:18:60;;3157:58:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3230:35:29::1;::::0;-1:-1:-1;;;;;3230:35:29;;::::1;::::0;-1:-1:-1;3230:35:29;::::1;::::0;-1:-1:-1;3230:35:29::1;::::0;;;::::1;2982:290:::0;;:::o;1359:135:44:-;1420:4;1443:44;-1:-1:-1;;;;;;;;;;;1479:7:44;1443:21;:44::i;:::-;1436:51;1359:135;-1:-1:-1;;1359:135:44:o;1118:89:29:-;1164:7;1190:10;:8;:10::i;:::-;1183:17;;1118:89;:::o;3027:122:44:-;3094:48;-1:-1:-1;;;;;;;;;;;3134:7:44;3094:23;:48::i;3534:763:29:-;966:40:44;3290:10:50;2217:133:44;:::i;966:40::-;958:69;;;;-1:-1:-1;;;958:69:44;;;;;;;:::i;:::-;3608:35:29::1;3665:10;:8;:10::i;:::-;3711:33;::::0;-1:-1:-1;;;3711:33:29;;-1:-1:-1;;;;;2067:32:60;;;3711:33:29::1;::::0;::::1;2049:51:60::0;3608:68:29;;-1:-1:-1;3686:22:29::1;::::0;3711:26;::::1;::::0;::::1;::::0;2022:18:60;;3711:33:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3686:58:::0;-1:-1:-1;;;;;;3763:28:29;::::1;3755:59;;;::::0;-1:-1:-1;;;3755:59:29;;7222:2:60;3755:59:29::1;::::0;::::1;7204:21:60::0;7261:2;7241:18;;;7234:30;-1:-1:-1;;;7280:18:60;;;7273:48;7338:18;;3755:59:29::1;7020:342:60::0;3755:59:29::1;-1:-1:-1::0;;;;;;;3828:31:29;::::1;::::0;3824:263:::1;;3901:44;::::0;-1:-1:-1;;;3901:44:29;;-1:-1:-1;;;;;2067:32:60;;;3901:44:29::1;::::0;::::1;2049:51:60::0;3875:23:29::1;::::0;3901:37;;::::1;::::0;::::1;::::0;2022:18:60;;3901:44:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;3901:44:29::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;:51:::0;:56;:144:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;3901:144:29::1;;::::0;::::1;3875:170;;4066:9;4059:17;;-1:-1:-1::0;;;4059:17:29::1;;;;;;;;:::i;3824:263::-;4101:35;::::0;4125:10:::1;::::0;-1:-1:-1;;;;;4101:35:29;::::1;::::0;::::1;::::0;;;::::1;4146:34;::::0;-1:-1:-1;;;4146:34:29;;-1:-1:-1;;;;;2067:32:60;;;4146:34:29::1;::::0;::::1;2049:51:60::0;4146:27:29;::::1;::::0;::::1;::::0;2022:18:60;;4146:34:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4212:8;:6;:8::i;:::-;-1:-1:-1::0;;;;;4194:26:29::1;:14;-1:-1:-1::0;;;;;4194:26:29::1;::::0;4190:101:::1;;4253:8;:6;:8::i;:::-;4236:44;::::0;-1:-1:-1;;;4236:44:29;;-1:-1:-1;;;;;2067:32:60;;;4236:44:29::1;::::0;::::1;2049:51:60::0;4236:37:29;;;::::1;::::0;::::1;::::0;2022:18:60;;4236:44:29::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4190:101;3598:699;;3534:763:::0;:::o;2356:143:44:-;2421:4;2444:48;-1:-1:-1;;;;;;;;;;;2484:7:44;2444:21;:48::i;1793:128::-;1851:4;1874:40;-1:-1:-1;;;;;;;;;;;1906:7:44;1874:21;:40::i;3405:126::-;3474:50;-1:-1:-1;;;;;;;;;;;3516:7:44;3474:23;:50::i;4523:708:29:-;966:40:44;3290:10:50;2217:133:44;:::i;966:40::-;958:69;;;;-1:-1:-1;;;958:69:44;;;;;;;:::i;:::-;4592:35:29::1;4649:10;:8;:10::i;:::-;4695:33;::::0;-1:-1:-1;;;4695:33:29;;-1:-1:-1;;;;;2067:32:60;;;4695:33:29::1;::::0;::::1;2049:51:60::0;4592:68:29;;-1:-1:-1;4670:22:29::1;::::0;4695:26;::::1;::::0;::::1;::::0;2022:18:60;;4695:33:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4670:58:::0;-1:-1:-1;;;;;;4742:28:29;::::1;4738:487;;4791:31;::::0;4811:10:::1;::::0;-1:-1:-1;;;;;4791:31:29;::::1;::::0;::::1;::::0;;;::::1;4836:34;::::0;-1:-1:-1;;;4836:34:29;;-1:-1:-1;;;;;2067:32:60;;;4836:34:29::1;::::0;::::1;2049:51:60::0;4836:27:29;::::1;::::0;::::1;::::0;2022:18:60;;4836:34:29::1;1903:203:60::0;4738:487:29::1;-1:-1:-1::0;;;;;;;4891:31:29;::::1;::::0;4887:338:::1;;4964:44;::::0;-1:-1:-1;;;4964:44:29;;-1:-1:-1;;;;;2067:32:60;;;4964:44:29::1;::::0;::::1;2049:51:60::0;4938:23:29::1;::::0;4964:37;;::::1;::::0;::::1;::::0;2022:18:60;;4964:44:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;4964:44:29::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;:51:::0;:56;:149:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;4887:338;5175:39;::::0;-1:-1:-1;;;5175:39:29;;8835:2:60;5175:39:29::1;::::0;::::1;8817:21:60::0;8874:2;8854:18;;;8847:30;8913:31;8893:18;;;8886:59;8962:18;;5175:39:29::1;8633:353:60::0;2072:139:44;2135:4;2158:46;-1:-1:-1;;;;;;;;;;;2196:7:44;2158:21;:46::i;4087:138::-;4150:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;4169:49:::1;-1:-1:-1::0;;;;;;;;;;;4210:7:44;4169:24:::1;:49::i;1500:138::-:0;1562:4;1585:46;-1:-1:-1;;;;;;;;;;;1623:7:44;1585:21;:46::i;2778:126::-;2847:50;-1:-1:-1;;;;;;;;;;;2889:7:44;2847:23;:50::i;2217:133::-;2277:4;2300:43;-1:-1:-1;;;;;;;;;;;2335:7:44;2300:21;:43::i;5237:412:29:-;5306:35;5363:10;:8;:10::i;:::-;5392:33;;-1:-1:-1;;;5392:33:29;;-1:-1:-1;;;;;2067:32:60;;;5392:33:29;;;2049:51:60;5306:68:29;;-1:-1:-1;858:3:28;;5392:26:29;;;;;2022:18:60;;5392:33:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5392:50:29;;5384:83;;;;-1:-1:-1;;;5384:83:29;;9193:2:60;5384:83:29;;;9175:21:60;9232:2;9212:18;;;9205:30;-1:-1:-1;;;9251:18:60;;;9244:50;9311:18;;5384:83:29;8991:344:60;5384:83:29;5482:32;;5503:10;;-1:-1:-1;;;;;5482:32:29;;;;;;;;5524:16;-1:-1:-1;;;;;5524:28:29;;5553:5;5560:8;:6;:8::i;:::-;5524:45;;-1:-1:-1;;;;;;5524:45:29;;;;;;;-1:-1:-1;;;;;6542:15:60;;;5524:45:29;;;6524:34:60;6594:15;;6574:18;;;6567:43;6459:18;;5524:45:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5596:8;:6;:8::i;:::-;5579:63;;-1:-1:-1;;;5579:63:29;;-1:-1:-1;;;;;2067:32:60;;;5579:63:29;;;2049:51:60;5579:38:29;;;;;;;5625:9;;2022:18:60;;5579:63:29;;;;;;;;;;;;;;;;;;;1644:143:44;1709:4;1732:48;-1:-1:-1;;;;;;;;;;;1772:7:44;1732:21;:48::i;2527:118::-;2592:46;-1:-1:-1;;;;;;;;;;;2630:7:44;2592:23;:46::i;1927:139::-;1990:4;2013:46;-1:-1:-1;;;;;;;;;;;2051:7:44;2013:21;:46::i;4231:121::-;4296:49;-1:-1:-1;;;;;;;;;;;4337:7:44;4296:24;:49::i;3557:117::-;3620:47;-1:-1:-1;;;;;;;;;;;3659:7:44;3620:24;:47::i;4479:125::-;4546:51;-1:-1:-1;;;;;;;;;;;4589:7:44;4546:24;:51::i;3823:142::-;3888:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;3907:51:::1;-1:-1:-1::0;;;;;;;;;;;3950:7:44;3907:24:::1;:51::i;4358:115::-:0;4420:46;-1:-1:-1;;;;;;;;;;;4458:7:44;4420:24;:46::i;3971:110::-;4031:43;-1:-1:-1;;;;;;;;;;;4066:7:44;4031:24;:43::i;6306:130:50:-;6374:18;6387:4;6374:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6404:25:::1;6415:4;6421:7;6404:10;:25::i;6702:132::-:0;6771:18;6784:4;6771:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6801:26:::1;6813:4;6819:7;6801:11;:26::i;7350:199::-:0;-1:-1:-1;;;;;7430:23:50;;3290:10;7430:23;7422:83;;;;-1:-1:-1;;;7422:83:50;;9542:2:60;7422:83:50;;;9524:21:60;9581:2;9561:18;;;9554:30;9620:34;9600:18;;;9593:62;-1:-1:-1;;;9671:18:60;;;9664:45;9726:19;;7422:83:50;9340:411:60;7422:83:50;7516:26;7528:4;7534:7;7516:11;:26::i;2504:540:49:-;-1:-1:-1;;;;;2632:34:49;;474:20:51;2624:67:49;;;;-1:-1:-1;;;2624:67:49;;9958:2:60;2624:67:49;;;9940:21:60;9997:2;9977:18;;;9970:30;-1:-1:-1;;;10016:18:60;;;10009:48;10074:18;;2624:67:49;9756:342:60;2624:67:49;2772:12;2786:23;2813;-1:-1:-1;;;;;2813:36:49;2886:24;;;2912:7;;2863:57;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2863:57:49;;;;;;;;;;;;;;-1:-1:-1;;;;;2863:57:49;-1:-1:-1;;;;;;2863:57:49;;;;;;;;;;2813:117;;;;2863:57;2813:117;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2771:159;;;;2948:7;2964:10;2940:36;;;;;-1:-1:-1;;;2940:36:49;;;;;;;;:::i;:::-;-1:-1:-1;2994:17:49;;:10;;:22;2986:51;;;;-1:-1:-1;;;2986:51:49;;;;;;;;:::i;:::-;;2614:430;;2504:540;;;:::o;2189:111:29:-;2246:4;;2269:10;:8;:10::i;:::-;-1:-1:-1;;;;;2269:24:29;;;2262:31;;2189:111;:::o;2597:379::-;2708:2;2693:17;;2685:47;;;;-1:-1:-1;;;2685:47:29;;10990:2:60;2685:47:29;;;10972:21:60;11029:2;11009:18;;;11002:30;-1:-1:-1;;;11048:18:60;;;11041:47;11105:18;;2685:47:29;10788:341:60;2685:47:29;2743:17;;2781:36;;;;2792:4;2781:36;:::i;:::-;2742:75;;;;2835:22;:9;-1:-1:-1;;;;;2835:20:29;474::51;520:8;;;345:190;2835:22:29;2827:68;;;;-1:-1:-1;;;2827:68:29;;11745:2:60;2827:68:29;;;11727:21:60;11784:2;11764:18;;;11757:30;11823:34;11803:18;;;11796:62;-1:-1:-1;;;11874:18:60;;;11867:31;11915:19;;2827:68:29;11543:397:60;2827:68:29;-1:-1:-1;;;;;2913:18:29;;474:20:51;2905:64:29;;;;-1:-1:-1;;;2905:64:29;;12147:2:60;2905:64:29;;;12129:21:60;12186:2;12166:18;;;12159:30;12225:33;12205:18;;;12198:61;12276:18;;2905:64:29;11945:355:60;2905:64:29;2675:301;;2597:379;;:::o;1959:224::-;2042:17;;2080:36;;;;2091:4;2080:36;:::i;:::-;2041:75;;;;2126:22;2138:9;2126:11;:22::i;:::-;2158:18;2168:7;2158:9;:18::i;2533:142:53:-;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;1384:114:29:-;1425:7;1451:40;1480:10;;;;;;;;;;;;;;;;;1451:28;:40::i;1260:118::-;1303:7;1329:42;1358:12;;;;;;;;;;;;;;;;;1329:28;:42::i;4481:132:50:-;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;;;;4481:132::o;5911:116::-;5970:7;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;:24;;;;5911:116::o;4892:95::-;4950:30;4961:4;3290:10;4950;:30::i;8830:227::-;8905:22;8913:4;8919:7;8905;:22::i;:::-;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;9216:228::-;9291:22;9299:4;9305:7;9291;:22::i;:::-;9287:151;;;9363:5;9329:14;;;-1:-1:-1;;;;;;;;;;;9329:14:50;;;;;;;;-1:-1:-1;;;;;9329:31:50;;;;;;;;;;:39;;-1:-1:-1;;9329:39:50;;;9387:40;3290:10;;9329:14;;9387:40;;9363:5;9387:40;9216:228;;:::o;1528:123:29:-;1587:57;1620:12;;;;;;;;;;;;;;;;;1634:9;1587:32;:57::i;1657:119::-;1714:55;1747:10;;;;;;;;;;;;;;;;;1759:9;1714:32;:55::i;2681:1050:53:-;2782:28;:26;:28::i;:::-;2778:485;;;3062:60;-1:-1:-1;;;;;;;;;;;3102:19:53;3062:21;:60::i;:::-;3037:144;;;;-1:-1:-1;;;3037:144:53;;12507:2:60;3037:144:53;;;12489:21:60;12546:2;12526:18;;;12519:30;12585:27;12565:18;;;12558:55;12630:18;;3037:144:53;12305:349:60;3037:144:53;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;3519:58;-1:-1:-1;;;;;;;;;;;3557:19:53;3519:21;:58::i;:::-;3494:151;;;;-1:-1:-1;;;3494:151:53;;12861:2:60;3494:151:53;;;12843:21:60;12900:2;12880:18;;;12873:30;12939:34;12919:18;;;12912:62;-1:-1:-1;;;12990:18:60;;;12983:32;13032:19;;3494:151:53;12659:398:60;3273:452:53;3676:38;3694:19;3676:17;:38::i;3268:212:52:-;3336:14;3362:12;3404:4;3387:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3387:22:52;;;;;;;;;3377:33;;3387:22;3377:33;;;;3453:11;;3268:212;-1:-1:-1;;;3268:212:52:o;5257:484:50:-;5337:22;5345:4;5351:7;5337;:22::i;:::-;5332:403;;5520:41;5548:7;-1:-1:-1;;;;;5520:41:50;5558:2;5520:19;:41::i;:::-;5632:38;5660:4;5667:2;5632:19;:38::i;:::-;5427:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5427:265:50;;;;;;;;;;-1:-1:-1;;;5375:349:50;;;;;;;:::i;3687:189:52:-;3811:3;3778:21;3794:4;3778:15;:21::i;:::-;-1:-1:-1;;;;;3778:37:52;;3770:61;;;;-1:-1:-1;;;3770:61:52;;14375:2:60;3770:61:52;;;14357:21:60;14414:2;14394:18;;;14387:30;-1:-1:-1;;;14433:18:60;;;14426:41;14484:18;;3770:61:52;14173:335:60;3770:61:52;3841:28;3857:4;3863:5;3841:15;:28::i;2221:152:53:-;2282:4;;2305:44;-1:-1:-1;;;;;;;;;;;2305:26:53;:44::i;:::-;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;2438:4;;2461:42;-1:-1:-1;;;;;;;;;;;2461:26:53;:42::i;3737:280::-;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;3949:24;:61::i;1652:441:59:-;1727:13;1752:19;1784:10;1788:6;1784:1;:10;:::i;:::-;:14;;1797:1;1784:14;:::i;:::-;1774:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1774:25:59;;1752:47;;-1:-1:-1;;;1809:6:59;1816:1;1809:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1809:15:59;;;;;;;;;-1:-1:-1;;;1834:6:59;1841:1;1834:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1834:15:59;;;;;;;;-1:-1:-1;1864:9:59;1876:10;1880:6;1876:1;:10;:::i;:::-;:14;;1889:1;1876:14;:::i;:::-;1864:26;;1859:132;1896:1;1892;:5;1859:132;;;-1:-1:-1;;;1943:5:59;1951:3;1943:11;1930:25;;;;;;;:::i;:::-;;;;1918:6;1925:1;1918:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1918:37:59;;;;;;;;-1:-1:-1;1979:1:59;1969:11;;;;;1899:3;;;:::i;:::-;;;1859:132;;;-1:-1:-1;2008:10:59;;2000:55;;;;-1:-1:-1;;;2000:55:59;;14988:2:60;2000:55:59;;;14970:21:60;;;15007:18;;;15000:30;15066:34;15046:18;;;15039:62;15118:18;;2000:55:59;14786:356:60;2000:55:59;2079:6;1652:441;-1:-1:-1;;;1652:441:59:o;3486:195:52:-;3565:12;3607:4;3590:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;3580:33;;;;;;3565:48;;3659:5;3653:4;3646:19;3632:43;3486:195;;:::o;8433:241:50:-;8508:25;8536:18;8549:4;8536:12;:18::i;:::-;8564:14;;;;-1:-1:-1;;;;;;;;;;;8564:14:50;;;;;;:24;;:36;;;8615:52;8508:46;;-1:-1:-1;8591:9:50;;8508:46;;8564:14;;8615:52;;8564:14;8615:52;8498:176;8433:241;;:::o;14:131:60:-;-1:-1:-1;;;;;89:31:60;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:315::-;662:6;670;723:2;711:9;702:7;698:23;694:32;691:52;;;739:1;736;729:12;691:52;775:9;762:23;752:33;;835:2;824:9;820:18;807:32;848:31;873:5;848:31;:::i;:::-;898:5;888:15;;;594:315;;;;;:::o;914:591::-;984:6;992;1045:2;1033:9;1024:7;1020:23;1016:32;1013:52;;;1061:1;1058;1051:12;1013:52;1101:9;1088:23;1130:18;1171:2;1163:6;1160:14;1157:34;;;1187:1;1184;1177:12;1157:34;1225:6;1214:9;1210:22;1200:32;;1270:7;1263:4;1259:2;1255:13;1251:27;1241:55;;1292:1;1289;1282:12;1241:55;1332:2;1319:16;1358:2;1350:6;1347:14;1344:34;;;1374:1;1371;1364:12;1344:34;1419:7;1414:2;1405:6;1401:2;1397:15;1393:24;1390:37;1387:57;;;1440:1;1437;1430:12;1387:57;1471:2;1463:11;;;;;1493:6;;-1:-1:-1;914:591:60;;-1:-1:-1;;;;914:591:60:o;1510:388::-;1578:6;1586;1639:2;1627:9;1618:7;1614:23;1610:32;1607:52;;;1655:1;1652;1645:12;1607:52;1694:9;1681:23;1713:31;1738:5;1713:31;:::i;:::-;1763:5;-1:-1:-1;1820:2:60;1805:18;;1792:32;1833:33;1792:32;1833:33;:::i;2111:250::-;2196:1;2206:113;2220:6;2217:1;2214:13;2206:113;;;2296:11;;;2290:18;2277:11;;;2270:39;2242:2;2235:10;2206:113;;;-1:-1:-1;;2353:1:60;2335:16;;2328:27;2111:250::o;2366:396::-;2515:2;2504:9;2497:21;2478:4;2547:6;2541:13;2590:6;2585:2;2574:9;2570:18;2563:34;2606:79;2678:6;2673:2;2662:9;2658:18;2653:2;2645:6;2641:15;2606:79;:::i;:::-;2746:2;2725:15;-1:-1:-1;;2721:29:60;2706:45;;;;2753:2;2702:54;;2366:396;-1:-1:-1;;2366:396:60:o;2767:346::-;2969:2;2951:21;;;3008:2;2988:18;;;2981:30;-1:-1:-1;;;3042:2:60;3027:18;;3020:52;3104:2;3089:18;;2767:346::o;3830:127::-;3891:10;3886:3;3882:20;3879:1;3872:31;3922:4;3919:1;3912:15;3946:4;3943:1;3936:15;3962:168;4035:9;;;4066;;4083:15;;;4077:22;;4063:37;4053:71;;4104:18;;:::i;4135:125::-;4200:9;;;4221:10;;;4218:36;;;4234:18;;:::i;4613:331::-;4718:9;4729;4771:8;4759:10;4756:24;4753:44;;;4793:1;4790;4783:12;4753:44;4822:6;4812:8;4809:20;4806:40;;;4842:1;4839;4832:12;4806:40;-1:-1:-1;;4868:23:60;;;4913:25;;;;;-1:-1:-1;4613:331:60:o;5558:340::-;5760:2;5742:21;;;5799:2;5779:18;;;5772:30;-1:-1:-1;;;5833:2:60;5818:18;;5811:46;5889:2;5874:18;;5558:340::o;6621:138::-;6700:13;;6722:31;6700:13;6722:31;:::i;:::-;6621:138;;;:::o;6764:251::-;6834:6;6887:2;6875:9;6866:7;6862:23;6858:32;6855:52;;;6903:1;6900;6893:12;6855:52;6935:9;6929:16;6954:31;6979:5;6954:31;:::i;7367:127::-;7428:10;7423:3;7419:20;7416:1;7409:31;7459:4;7456:1;7449:15;7483:4;7480:1;7473:15;7499:1129;7594:6;7625:2;7668;7656:9;7647:7;7643:23;7639:32;7636:52;;;7684:1;7681;7674:12;7636:52;7717:9;7711:16;7746:18;7787:2;7779:6;7776:14;7773:34;;;7803:1;7800;7793:12;7773:34;7841:6;7830:9;7826:22;7816:32;;7886:7;7879:4;7875:2;7871:13;7867:27;7857:55;;7908:1;7905;7898:12;7857:55;7937:2;7931:9;7959:2;7955;7952:10;7949:36;;;7965:18;;:::i;:::-;8011:2;8008:1;8004:10;8043:2;8037:9;8106:2;8102:7;8097:2;8093;8089:11;8085:25;8077:6;8073:38;8161:6;8149:10;8146:22;8141:2;8129:10;8126:18;8123:46;8120:72;;;8172:18;;:::i;:::-;8208:2;8201:22;8258:18;;;8292:15;;;;-1:-1:-1;8334:11:60;;;8330:20;;;8362:19;;;8359:39;;;8394:1;8391;8384:12;8359:39;8418:11;;;;8438:159;8454:6;8449:3;8446:15;8438:159;;;8520:34;8550:3;8520:34;:::i;:::-;8508:47;;8471:12;;;;8575;;;;8438:159;;;8616:6;7499:1129;-1:-1:-1;;;;;;;;7499:1129:60:o;10103:388::-;10260:2;10249:9;10242:21;10299:6;10294:2;10283:9;10279:18;10272:34;10356:6;10348;10343:2;10332:9;10328:18;10315:48;10412:1;10383:22;;;10407:2;10379:31;;;10372:42;;;;10475:2;10454:15;;;-1:-1:-1;;10450:29:60;10435:45;10431:54;;10103:388;-1:-1:-1;10103:388:60:o;10496:287::-;10625:3;10663:6;10657:13;10679:66;10738:6;10733:3;10726:4;10718:6;10714:17;10679:66;:::i;:::-;10761:16;;;;;10496:287;-1:-1:-1;;10496:287:60:o;13356:812::-;13767:25;13762:3;13755:38;13737:3;13822:6;13816:13;13838:75;13906:6;13901:2;13896:3;13892:12;13885:4;13877:6;13873:17;13838:75;:::i;:::-;-1:-1:-1;;;13972:2:60;13932:16;;;13964:11;;;13957:40;14022:13;;14044:76;14022:13;14106:2;14098:11;;14091:4;14079:17;;14044:76;:::i;:::-;14140:17;14159:2;14136:26;;13356:812;-1:-1:-1;;;;13356:812:60:o;14513:127::-;14574:10;14569:3;14565:20;14562:1;14555:31;14605:4;14602:1;14595:15;14629:4;14626:1;14619:15;14645:136;14684:3;14712:5;14702:39;;14721:18;;:::i;:::-;-1:-1:-1;;;14757:18:60;;14645:136::o", - "linkReferences": {}, - "immutableReferences": { - "47467": [{ "start": 1785, "length": 32 }], - "47936": [{ "start": 1932, "length": 32 }] - } - }, - "methodIdentifiers": { - "addExistingBridge(address,address)": "4ee165d6", - "blockToken(address)": "726176e8", - "deactivateToken(address)": "68173bcf", - "enrollTokenBridge(address)": "c1d220fe", - "getRegistry()": "5ab1bd53", - "identify()": "eeb72866", - "initialize(bytes)": "439fab91", - "isAppGovernor(address)": "5a5d1bb9", - "isAppRoleAdmin(address)": "8e5224ff", - "isFrozen()": "33eeb147", - "isGovernanceAdmin(address)": "cb1cccce", - "isOperator(address)": "6d70f7ae", - "isSecurityAdmin(address)": "d08fb6cb", - "isSecurityAgent(address)": "757bd9ab", - "isTokenAdmin(address)": "a2bdde3d", - "isUpgradeGovernor(address)": "6c04d9d5", - "registerAppGovernor(address)": "cdd1f70d", - "registerAppRoleAdmin(address)": "17896383", - "registerGovernanceAdmin(address)": "9463629a", - "registerOperator(address)": "3682a450", - "registerSecurityAdmin(address)": "62a14376", - "registerSecurityAgent(address)": "0e770f23", - "registerTokenAdmin(address)": "0b3a2d21", - "registerUpgradeGovernor(address)": "6fc97cbf", - "renounceRole(bytes32,address)": "36568abe", - "revokeAppGovernor(address)": "deec9c5a", - "revokeAppRoleAdmin(address)": "2f951985", - "revokeGovernanceAdmin(address)": "ee0e6807", - "revokeOperator(address)": "fad8b32a", - "revokeSecurityAdmin(address)": "8101b64c", - "revokeSecurityAgent(address)": "d9fa7091", - "revokeTokenAdmin(address)": "fa0f73ba", - "revokeUpgradeGovernor(address)": "ed9ef16a" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"ExistingBridgeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"TokenBlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"TokenDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"TokenEnrolled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge_\",\"type\":\"address\"}],\"name\":\"addExistingBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"blockToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"deactivateToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"enrollTokenBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"blockToken(address)\":{\"notice\":\"Block token from being bridged. A blocked token cannot be deployed. Note: Only an unserviced token can be blocked. In order to deactivate a serviced tokens see 'deactivateToken'.\"},\"deactivateToken(address)\":{\"notice\":\"Deactivates bridging of a specific token. A deactivated token is blocked for deposits and cannot be re-deployed. Note: Only serviced tokens can be deactivated. In order to block an unserviced tokens see 'blockToken'.\"},\"enrollTokenBridge(address)\":{\"notice\":\"Enrolls a token bridge for a specific token.\"},\"getRegistry()\":{\"notice\":\"Returns the address of the Starkgate Registry contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/solidity/StarkgateManager.sol\":\"StarkgateManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/solidity/IStarkgateBridge.sol\":{\"keccak256\":\"0xaf3121a6b46e199a684bcba5a1b43d26167f67454d70bb58cec9ccb9cd831878\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://6e21adb919d6340cd68fa9199c6b54fb209a9ecf8de4ab2918a693313b9aa004\",\"dweb:/ipfs/QmaWoVA3EXV8sSFK5k3ZqDoBYutRpATzPzenH39GZHBqGn\"]},\"src/solidity/IStarkgateManager.sol\":{\"keccak256\":\"0x922e8c094ca384f808971ce133383a1f09a08a407ff9d42390f997c23b92e54c\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9bcf0a975b59d420a33d66e9ee2148c5a87a5ed717cb8087610750d176fd39d8\",\"dweb:/ipfs/Qmf8nCJwwNN1pSB53wpV6hQzZdyNZtdgBuFt4y6JYX9PuT\"]},\"src/solidity/IStarkgateRegistry.sol\":{\"keccak256\":\"0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172\",\"dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7\"]},\"src/solidity/StarkgateConstants.sol\":{\"keccak256\":\"0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c\",\"dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx\"]},\"src/solidity/StarkgateManager.sol\":{\"keccak256\":\"0x547e201622f2d7dc733e74aed2d0a3a6755f021fa047e91a2adb1ae51aad1927\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b8694c133d78305a6465075f39957c4ca851774569b0414d6768a29d0bcd975\",\"dweb:/ipfs/QmeS9S5fmjWzZ8EU9MnkyvuDUsy3YFbnBSam3DaLotU97X\"]},\"starkware/solidity/components/Roles.sol\":{\"keccak256\":\"0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3\",\"dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv\"]},\"starkware/solidity/interfaces/BlockDirectCall.sol\":{\"keccak256\":\"0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3\",\"dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS\"]},\"starkware/solidity/interfaces/ContractInitializer.sol\":{\"keccak256\":\"0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6\",\"dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7\"]},\"starkware/solidity/interfaces/Identity.sol\":{\"keccak256\":\"0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888\",\"dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh\"]},\"starkware/solidity/interfaces/ProxySupport.sol\":{\"keccak256\":\"0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6\",\"dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4\"]},\"starkware/solidity/libraries/AccessControl.sol\":{\"keccak256\":\"0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074\",\"dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e\"]},\"starkware/solidity/libraries/Addresses.sol\":{\"keccak256\":\"0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89\",\"dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS\"]},\"starkware/solidity/libraries/NamedStorage.sol\":{\"keccak256\":\"0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a\",\"dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi\"]},\"starkware/solidity/libraries/RolesLib.sol\":{\"keccak256\":\"0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb\",\"dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL\"]},\"third_party/open_zeppelin/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.23+commit.f704f362" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "bridge", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "ExistingBridgeAdded", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "TokenBlocked", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "TokenDeactivated", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "TokenEnrolled", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "address", "name": "bridge_", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addExistingBridge" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "blockToken" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "deactivateToken" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "payable", - "type": "function", - "name": "enrollTokenBridge" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getRegistry", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "identify", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppRoleAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isFrozen", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isGovernanceAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isOperator", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAgent", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isTokenAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isUpgradeGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerUpgradeGovernor" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeUpgradeGovernor" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { - "kind": "user", - "methods": { - "blockToken(address)": { - "notice": "Block token from being bridged. A blocked token cannot be deployed. Note: Only an unserviced token can be blocked. In order to deactivate a serviced tokens see 'deactivateToken'." - }, - "deactivateToken(address)": { - "notice": "Deactivates bridging of a specific token. A deactivated token is blocked for deposits and cannot be re-deployed. Note: Only serviced tokens can be deactivated. In order to block an unserviced tokens see 'blockToken'." - }, - "enrollTokenBridge(address)": { - "notice": "Enrolls a token bridge for a specific token." - }, - "getRegistry()": { - "notice": "Returns the address of the Starkgate Registry contract." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": ["forge-std/=lib/forge-std/src/"], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "src/solidity/StarkgateManager.sol": "StarkgateManager" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "src/solidity/IStarkgateBridge.sol": { - "keccak256": "0xaf3121a6b46e199a684bcba5a1b43d26167f67454d70bb58cec9ccb9cd831878", - "urls": [ - "bzz-raw://6e21adb919d6340cd68fa9199c6b54fb209a9ecf8de4ab2918a693313b9aa004", - "dweb:/ipfs/QmaWoVA3EXV8sSFK5k3ZqDoBYutRpATzPzenH39GZHBqGn" - ], - "license": "Apache-2.0." - }, - "src/solidity/IStarkgateManager.sol": { - "keccak256": "0x922e8c094ca384f808971ce133383a1f09a08a407ff9d42390f997c23b92e54c", - "urls": [ - "bzz-raw://9bcf0a975b59d420a33d66e9ee2148c5a87a5ed717cb8087610750d176fd39d8", - "dweb:/ipfs/Qmf8nCJwwNN1pSB53wpV6hQzZdyNZtdgBuFt4y6JYX9PuT" - ], - "license": "Apache-2.0." - }, - "src/solidity/IStarkgateRegistry.sol": { - "keccak256": "0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2", - "urls": [ - "bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172", - "dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7" - ], - "license": "Apache-2.0." - }, - "src/solidity/StarkgateConstants.sol": { - "keccak256": "0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642", - "urls": [ - "bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c", - "dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx" - ], - "license": "Apache-2.0." - }, - "src/solidity/StarkgateManager.sol": { - "keccak256": "0x547e201622f2d7dc733e74aed2d0a3a6755f021fa047e91a2adb1ae51aad1927", - "urls": [ - "bzz-raw://3b8694c133d78305a6465075f39957c4ca851774569b0414d6768a29d0bcd975", - "dweb:/ipfs/QmeS9S5fmjWzZ8EU9MnkyvuDUsy3YFbnBSam3DaLotU97X" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/components/Roles.sol": { - "keccak256": "0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf", - "urls": [ - "bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3", - "dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/BlockDirectCall.sol": { - "keccak256": "0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6", - "urls": [ - "bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3", - "dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/ContractInitializer.sol": { - "keccak256": "0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a", - "urls": [ - "bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6", - "dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/Identity.sol": { - "keccak256": "0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08", - "urls": [ - "bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888", - "dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/ProxySupport.sol": { - "keccak256": "0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a", - "urls": [ - "bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6", - "dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/AccessControl.sol": { - "keccak256": "0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32", - "urls": [ - "bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074", - "dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e" - ], - "license": "MIT" - }, - "starkware/solidity/libraries/Addresses.sol": { - "keccak256": "0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179", - "urls": [ - "bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89", - "dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/NamedStorage.sol": { - "keccak256": "0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e", - "urls": [ - "bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a", - "dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/RolesLib.sol": { - "keccak256": "0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0", - "urls": [ - "bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb", - "dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL" - ], - "license": "Apache-2.0." - }, - "third_party/open_zeppelin/utils/Strings.sol": { - "keccak256": "0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3", - "urls": [ - "bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638", - "dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 29 -} diff --git a/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs b/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs index 0f78e43..6580c94 100644 --- a/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs +++ b/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs @@ -6,6 +6,7 @@ use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; use starknet_proxy_client::clients::proxy_5_0_0::ProxySupport5_0_0; +#[derive(Clone)] pub struct StarkgateManagerContractClient { manager: StarkgateManager, proxy_support: ProxySupport5_0_0, diff --git a/crates/l2/starkgate-manager-client/src/interfaces/manager.rs b/crates/l2/starkgate-manager-client/src/interfaces/manager.rs index d4dfc0d..39a9651 100644 --- a/crates/l2/starkgate-manager-client/src/interfaces/manager.rs +++ b/crates/l2/starkgate-manager-client/src/interfaces/manager.rs @@ -12,16 +12,7 @@ type Address = H160; abigen!( StarkgateManager, - r#"[ - function addExistingBridge(address token, address bridge_) external onlyTokenAdmin - function deactivateToken(address token) external onlyTokenAdmin - function blockToken(address token) external onlyTokenAdmin - - function enrollTokenBridge(address token) external payable - - function getRegistry() external view returns (address) - function identify() external pure override returns (string memory) - ]"#, + "../../../artifacts/starkgate-contracts/StarkgateManager.json", ); #[async_trait] diff --git a/crates/l2/starkgate-manager-client/src/lib.rs b/crates/l2/starkgate-manager-client/src/lib.rs index 4390499..4894b52 100644 --- a/crates/l2/starkgate-manager-client/src/lib.rs +++ b/crates/l2/starkgate-manager-client/src/lib.rs @@ -6,7 +6,8 @@ use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; -const STARKGATE_MANAGER: &str = include_str!("artifacts/StarkgateManager.json"); +const STARKGATE_MANAGER: &str = + include_str!("../../../../artifacts/starkgate-contracts/StarkgateManager.json"); pub async fn deploy_starkgate_manager_behind_unsafe_proxy( client: Arc, diff --git a/crates/l2/starkgate-registry-client/src/artifacts/StarkgateRegistry.json b/crates/l2/starkgate-registry-client/src/artifacts/StarkgateRegistry.json deleted file mode 100644 index eb68586..0000000 --- a/crates/l2/starkgate-registry-client/src/artifacts/StarkgateRegistry.json +++ /dev/null @@ -1,1041 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "blockToken", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "enlistToken", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "bridge", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getBridge", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getWithdrawalBridges", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "bridges", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "identify", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "initialize", - "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isFrozen", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "selfRemove", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TokenEnlisted", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "bridge", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TokenSelfRemoved", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "bridge", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TokenStatusBlocked", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60c06040523480156200001157600080fd5b5030608052600160a0819052620000276200002e565b50620004f7565b336200003b81806200003e565b50565b620000486200019f565b15620000e1576001600160a01b03821660009081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000db5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ec565b620000ec82620001f3565b620000f66200033e565b1562000194576001600160a01b03811660009081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001905760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d2565b5050565b620001908162000390565b600080516020620024458339815191526000908152600080516020620024858339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200020e6000805160206200244583398151915282620003fc565b620002487ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068600080516020620024a58339815191526200049e565b62000272600080516020620024a5833981519152600080516020620024458339815191526200049e565b6200028d60008051602062002445833981519152806200049e565b620002c87f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7600080516020620024a58339815191526200049e565b620003037f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e600080516020620024a58339815191526200049e565b6200003b7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228600080516020620024458339815191526200049e565b600080516020620024658339815191526000908152600080516020620024858339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001ec565b620003ab60008051602062002465833981519152806200049e565b620003e67f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96600080516020620024658339815191526200049e565b6200003b60008051602062002465833981519152825b600082815260008051602062002485833981519152602090815260408083206001600160a01b038516845290915290205460ff166200019057600082815260008051602062002485833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000828152600080516020620024858339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a051611f286200051d6000396000610554015260006105e70152611f286000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063757bd9ab1161011a578063d08fb6cb116100ad578063ee0e68071161007c578063ee0e680714610428578063eeb728661461043b578063f44c7c8f14610450578063fa0f73ba1461047b578063fad8b32a1461048e57600080fd5b8063d08fb6cb146103dc578063d9fa7091146103ef578063deec9c5a14610402578063ed9ef16a1461041557600080fd5b8063a2bdde3d116100e9578063a2bdde3d14610390578063a3ecff8f146103a3578063cb1cccce146103b6578063cdd1f70d146103c957600080fd5b8063757bd9ab146103445780638101b64c146103575780638e5224ff1461036a5780639463629a1461037d57600080fd5b8063557133f6116101925780636c04d9d5116101615780636c04d9d5146102f85780636d70f7ae1461030b5780636fc97cbf1461031e578063726176e81461033157600080fd5b8063557133f61461029f5780635a5d1bb9146102bf57806362a14376146102d257806365650288146102e557600080fd5b806333eeb147116101ce57806333eeb1471461024e57806336568abe146102665780633682a45014610279578063439fab911461028c57600080fd5b80630b3a2d21146102005780630e770f231461021557806317896383146102285780632f9519851461023b575b600080fd5b61021361020e3660046119dc565b6104a1565b005b6102136102233660046119dc565b6104bc565b6102136102363660046119dc565b6104d4565b6102136102493660046119dc565b6104ec565b60005b60405190151581526020015b60405180910390f35b6102136102743660046119f9565b61053a565b6102136102873660046119dc565b6105cc565b61021361029a366004611a29565b6105e4565b6102b26102ad3660046119dc565b610795565b60405161025d9190611a9b565b6102516102cd3660046119dc565b610814565b6102136102e03660046119dc565b610834565b6102136102f33660046119dc565b61084c565b6102516103063660046119dc565b6109ef565b6102516103193660046119dc565b610a09565b61021361032c3660046119dc565b610a23565b61021361033f3660046119dc565b610a3b565b6102516103523660046119dc565b610ac7565b6102136103653660046119dc565b610ae1565b6102516103783660046119dc565b610b22565b61021361038b3660046119dc565b610b3c565b61025161039e3660046119dc565b610b54565b6102136103b1366004611ae8565b610b6e565b6102516103c43660046119dc565b610d8a565b6102136103d73660046119dc565b610da4565b6102516103ea3660046119dc565b610dbc565b6102136103fd3660046119dc565b610dd6565b6102136104103660046119dc565b610dee565b6102136104233660046119dc565b610e06565b6102136104363660046119dc565b610e1e565b610443610e5f565b60405161025d9190611b3a565b61046361045e3660046119dc565b610e7f565b6040516001600160a01b03909116815260200161025d565b6102136104893660046119dc565b610eac565b61021361049c3660046119dc565b610ec4565b6104b9600080516020611ed383398151915282610edc565b50565b6104b9600080516020611e0483398151915282610edc565b6104b9600080516020611e2483398151915282610edc565b80336001600160a01b0382160361051e5760405162461bcd60e51b815260040161051590611b6d565b60405180910390fd5b610536600080516020611e2483398151915283610ef8565b5050565b600080516020611d2d8339815191528214801561057557507f0000000000000000000000000000000000000000000000000000000000000000155b156105c25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610515565b6105368282610f14565b6104b9600080516020611eb383398151915282610edc565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106555760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610515565b6000610662816020611bb3565b90506000610671826020611bca565b9050808310156106b95760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610515565b60006106c782848688611bdd565b8101906106d491906119dc565b90503660006106e58582888a611bdd565b915091503660006106f88887818c611bdd565b90925090506001600160a01b0385161561072257610717858383610f8e565b505050505050505050565b61072a6110d0565b156107795780156107745760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610515565b610717565b61078382826110eb565b61078d8282611196565b6107176111c8565b606061079f6111d3565b6001600160a01b038316600090815260209182526040908190208054825181850281018501909352808352919290919083018282801561080857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107ea575b50505050509050919050565b600061082e600080516020611da4833981519152836111fb565b92915050565b6104b9600080516020611d4d83398151915282610edc565b33610855611233565b6001600160a01b03808416600090815260209290925260409091205416146108cb5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610515565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190611c07565b156109805760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610515565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a30890600090a360006109c0611233565b6001600160a01b0392831660009081526020919091526040902080546001600160a01b03191691909216179055565b600061082e600080516020611dc4833981519152836111fb565b600061082e600080516020611eb3833981519152836111fb565b6104b9600080516020611dc483398151915282610edc565b33610a44611256565b6001600160a01b031614610a895760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610515565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a290600090a260016109c0611233565b600061082e600080516020611e04833981519152836111fb565b80336001600160a01b03821603610b0a5760405162461bcd60e51b815260040161051590611b6d565b610536600080516020611d4d83398151915283610ef8565b600061082e600080516020611e24833981519152836111fb565b6104b9600080516020611d2d83398151915282610edc565b600061082e600080516020611ed3833981519152836111fb565b33610b77611256565b6001600160a01b031614610bbc5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610515565b6000610bc6611233565b6001600160a01b038085166000908152602092909252604090912054169050801580610bfb57506001600160a01b0381166001145b610c405760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610515565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c89611233565b6001600160a01b038581166000908152602092909252604090912080546001600160a01b03191692909116919091179055610d39610cc56111d3565b6001600160a01b0385166000908152602091825260409081902080548251818502810185019093528083529192909190830182828015610d2e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d10575b505050505083611279565b610d8557610d456111d3565b6001600160a01b038481166000908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b600061082e600080516020611d2d833981519152836111fb565b6104b9600080516020611da483398151915282610edc565b600061082e600080516020611d4d833981519152836111fb565b6104b9600080516020611e0483398151915282610ef8565b6104b9600080516020611da483398151915282610ef8565b6104b9600080516020611dc483398151915282610ef8565b80336001600160a01b03821603610e475760405162461bcd60e51b815260040161051590611b6d565b610536600080516020611d2d83398151915283610ef8565b6060604051806060016040528060218152602001611e4460219139905090565b6000610e89611233565b6001600160a01b0392831660009081526020919091526040902054909116919050565b6104b9600080516020611ed383398151915282610ef8565b6104b9600080516020611eb383398151915282610ef8565b610ee5826112d4565b610eee816112f6565b610d858383611300565b610f01826112d4565b610f0a816112f6565b610d858383611376565b6001600160a01b0381163314610f845760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610515565b6105368282611376565b6001600160a01b0383163b610fda5760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610515565b600080846001600160a01b031663439fab9160e01b8585604051602401611002929190611c29565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110409190611c58565b600060405180830381855af49150503d806000811461107b576040519150601f19603f3d011682016040523d82523d6000602084013e611080565b606091505b50915091508181906110a55760405162461bcd60e51b81526004016105159190611b3a565b5080518190156110c85760405162461bcd60e51b81526004016105159190611b3a565b505050505050565b6000806110db611256565b6001600160a01b03161415905090565b6020811461112f5760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610515565b600061113d828401846119dc565b90506001600160a01b0381163b610d855760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610515565b60006111a4828401846119dc565b9050610d85604051806060016040528060238152602001611e9060239139826113ea565b336104b98180611443565b60006111f6604051806060016040528060378152602001611d6d60379139611547565b905090565b6000918252600080516020611de4833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006111f66040518060600160405280602b8152602001611e65602b9139611547565b60006111f6604051806060016040528060238152602001611e906023913961157a565b6000805b83518110156112ca57826001600160a01b03168482815181106112a2576112a2611c74565b60200260200101516001600160a01b0316036112c257600191505061082e565b60010161127d565b5060009392505050565b6000908152600080516020611de4833981519152602052604090206001015490565b6104b981336115ae565b61130a82826111fb565b610536576000828152600080516020611de4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61138082826111fb565b15610536576000828152600080516020611de4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006113f58361157a565b6001600160a01b0316146114395760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610515565b6105368282611612565b61144b611645565b156114b957611468600080516020611d2d833981519152836111fb565b6114b45760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610515565b6114c2565b6114c282611666565b6114ca611754565b1561153e576114e7600080516020611d4d833981519152826111fb565b6105365760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610515565b6105368161176e565b6000808260405160200161155b9190611c58565b60408051601f1981840301815291905280516020909101209392505050565b6000808260405160200161158e9190611c58565b60408051601f198184030181529190528051602090910120549392505050565b6115b882826111fb565b610536576115d0816001600160a01b031660146117c4565b6115db8360206117c4565b6040516020016115ec929190611c8a565b60408051601f198184030181529082905262461bcd60e51b825261051591600401611b3a565b6000826040516020016116259190611c58565b604051602081830303815290604052805190602001209050818155505050565b60008061165f600080516020611d2d8339815191526112d4565b1415905090565b61167e600080516020611d2d83398151915282611300565b6116a4600080516020611da4833981519152600080516020611e24833981519152611967565b6116ca600080516020611e24833981519152600080516020611d2d833981519152611967565b6116e2600080516020611d2d83398151915280611967565b611708600080516020611eb3833981519152600080516020611e24833981519152611967565b61172e600080516020611ed3833981519152600080516020611e24833981519152611967565b6104b9600080516020611dc4833981519152600080516020611d2d833981519152611967565b60008061165f600080516020611d4d8339815191526112d4565b611786600080516020611d4d83398151915280611967565b6117ac600080516020611e04833981519152600080516020611d4d833981519152611967565b6104b9600080516020611d4d83398151915282611300565b606060006117d3836002611bb3565b6117de906002611bca565b67ffffffffffffffff8111156117f6576117f6611cff565b6040519080825280601f01601f191660200182016040528015611820576020820181803683370190505b509050600360fc1b8160008151811061183b5761183b611c74565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061186a5761186a611c74565b60200101906001600160f81b031916908160001a905350600061188e846002611bb3565b611899906001611bca565b90505b6001811115611911576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106118cd576118cd611c74565b1a60f81b8282815181106118e3576118e3611c74565b60200101906001600160f81b031916908160001a90535060049490941c9361190a81611d15565b905061189c565b5083156119605760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610515565b9392505050565b6000611972836112d4565b6000848152600080516020611de48339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104b957600080fd5b6000602082840312156119ee57600080fd5b8135611960816119c7565b60008060408385031215611a0c57600080fd5b823591506020830135611a1e816119c7565b809150509250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff80821115611a5457600080fd5b818501915085601f830112611a6857600080fd5b813581811115611a7757600080fd5b866020828501011115611a8957600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015611adc5783516001600160a01b031683529284019291840191600101611ab7565b50909695505050505050565b60008060408385031215611afb57600080fd5b8235611b06816119c7565b91506020830135611a1e816119c7565b60005b83811015611b31578181015183820152602001611b19565b50506000910152565b6020815260008251806020840152611b59816040850160208701611b16565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761082e5761082e611b9d565b8082018082111561082e5761082e611b9d565b60008085851115611bed57600080fd5b83861115611bfa57600080fd5b5050820193919092039150565b600060208284031215611c1957600080fd5b8151801515811461196057600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60008251611c6a818460208701611b16565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611cc2816017850160208801611b16565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611cf3816028840160208801611b16565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600081611d2457611d24611b9d565b50600019019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212201c915e23942801f08009e20abe4df8c33135e94c07eb138deeb652be137d340b64736f6c6343000817003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99", - "sourceMap": "423:4745:30:-:0;;;;;;;;;;;;-1:-1:-1;479:4:45;463:21;;628:4:49;299:31:44;;;;340:21;:19;:21::i;:::-;258:110;423:4745:30;;2533:142:53;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;:::-;2564:111;2533:142::o;2681:1050::-;2782:28;:26;:28::i;:::-;2778:485;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3037:144:53;;;;-1:-1:-1;;;3037:144:53;;216:2:60;3037:144:53;;;198:21:60;255:2;235:18;;;228:30;294:27;274:18;;;267:55;339:18;;3037:144:53;;;;;;;;;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3494:151:53;;;;-1:-1:-1;;;3494:151:53;;570:2:60;3494:151:53;;;552:21:60;609:2;589:18;;;582:30;648:34;628:18;;;621:62;-1:-1:-1;;;699:18:60;;;692:32;741:19;;3494:151:53;368:398:60;3494:151:53;2681:1050;;:::o;3273:452::-;3676:38;3694:19;3676:17;:38::i;2221:152::-;-1:-1:-1;;;;;;;;;;;2282:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2282:4:53;;2305:44;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;253:64;-1:-1:-1;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;861:66;-1:-1:-1;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;1473:66;-1:-1:-1;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;1683:66;-1:-1:-1;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;-1:-1:-1;;;;;;;;;;;2438:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2438:4:53;;2461:42;5911:116:50;3737:280:53;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;1273:66;-1:-1:-1;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;8830:227:50;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;8433:241::-;8508:25;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;;:24;;;;8564:36;;;;8615:52;;5996:24;;8564:36;;5996:24;;:14;;8615:52;;8508:25;8615:52;8498:176;8433:241;;:::o;368:398:60:-;423:4745:30;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063757bd9ab1161011a578063d08fb6cb116100ad578063ee0e68071161007c578063ee0e680714610428578063eeb728661461043b578063f44c7c8f14610450578063fa0f73ba1461047b578063fad8b32a1461048e57600080fd5b8063d08fb6cb146103dc578063d9fa7091146103ef578063deec9c5a14610402578063ed9ef16a1461041557600080fd5b8063a2bdde3d116100e9578063a2bdde3d14610390578063a3ecff8f146103a3578063cb1cccce146103b6578063cdd1f70d146103c957600080fd5b8063757bd9ab146103445780638101b64c146103575780638e5224ff1461036a5780639463629a1461037d57600080fd5b8063557133f6116101925780636c04d9d5116101615780636c04d9d5146102f85780636d70f7ae1461030b5780636fc97cbf1461031e578063726176e81461033157600080fd5b8063557133f61461029f5780635a5d1bb9146102bf57806362a14376146102d257806365650288146102e557600080fd5b806333eeb147116101ce57806333eeb1471461024e57806336568abe146102665780633682a45014610279578063439fab911461028c57600080fd5b80630b3a2d21146102005780630e770f231461021557806317896383146102285780632f9519851461023b575b600080fd5b61021361020e3660046119dc565b6104a1565b005b6102136102233660046119dc565b6104bc565b6102136102363660046119dc565b6104d4565b6102136102493660046119dc565b6104ec565b60005b60405190151581526020015b60405180910390f35b6102136102743660046119f9565b61053a565b6102136102873660046119dc565b6105cc565b61021361029a366004611a29565b6105e4565b6102b26102ad3660046119dc565b610795565b60405161025d9190611a9b565b6102516102cd3660046119dc565b610814565b6102136102e03660046119dc565b610834565b6102136102f33660046119dc565b61084c565b6102516103063660046119dc565b6109ef565b6102516103193660046119dc565b610a09565b61021361032c3660046119dc565b610a23565b61021361033f3660046119dc565b610a3b565b6102516103523660046119dc565b610ac7565b6102136103653660046119dc565b610ae1565b6102516103783660046119dc565b610b22565b61021361038b3660046119dc565b610b3c565b61025161039e3660046119dc565b610b54565b6102136103b1366004611ae8565b610b6e565b6102516103c43660046119dc565b610d8a565b6102136103d73660046119dc565b610da4565b6102516103ea3660046119dc565b610dbc565b6102136103fd3660046119dc565b610dd6565b6102136104103660046119dc565b610dee565b6102136104233660046119dc565b610e06565b6102136104363660046119dc565b610e1e565b610443610e5f565b60405161025d9190611b3a565b61046361045e3660046119dc565b610e7f565b6040516001600160a01b03909116815260200161025d565b6102136104893660046119dc565b610eac565b61021361049c3660046119dc565b610ec4565b6104b9600080516020611ed383398151915282610edc565b50565b6104b9600080516020611e0483398151915282610edc565b6104b9600080516020611e2483398151915282610edc565b80336001600160a01b0382160361051e5760405162461bcd60e51b815260040161051590611b6d565b60405180910390fd5b610536600080516020611e2483398151915283610ef8565b5050565b600080516020611d2d8339815191528214801561057557507f0000000000000000000000000000000000000000000000000000000000000000155b156105c25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610515565b6105368282610f14565b6104b9600080516020611eb383398151915282610edc565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106555760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610515565b6000610662816020611bb3565b90506000610671826020611bca565b9050808310156106b95760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610515565b60006106c782848688611bdd565b8101906106d491906119dc565b90503660006106e58582888a611bdd565b915091503660006106f88887818c611bdd565b90925090506001600160a01b0385161561072257610717858383610f8e565b505050505050505050565b61072a6110d0565b156107795780156107745760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610515565b610717565b61078382826110eb565b61078d8282611196565b6107176111c8565b606061079f6111d3565b6001600160a01b038316600090815260209182526040908190208054825181850281018501909352808352919290919083018282801561080857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107ea575b50505050509050919050565b600061082e600080516020611da4833981519152836111fb565b92915050565b6104b9600080516020611d4d83398151915282610edc565b33610855611233565b6001600160a01b03808416600090815260209290925260409091205416146108cb5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610515565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190611c07565b156109805760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610515565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a30890600090a360006109c0611233565b6001600160a01b0392831660009081526020919091526040902080546001600160a01b03191691909216179055565b600061082e600080516020611dc4833981519152836111fb565b600061082e600080516020611eb3833981519152836111fb565b6104b9600080516020611dc483398151915282610edc565b33610a44611256565b6001600160a01b031614610a895760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610515565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a290600090a260016109c0611233565b600061082e600080516020611e04833981519152836111fb565b80336001600160a01b03821603610b0a5760405162461bcd60e51b815260040161051590611b6d565b610536600080516020611d4d83398151915283610ef8565b600061082e600080516020611e24833981519152836111fb565b6104b9600080516020611d2d83398151915282610edc565b600061082e600080516020611ed3833981519152836111fb565b33610b77611256565b6001600160a01b031614610bbc5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610515565b6000610bc6611233565b6001600160a01b038085166000908152602092909252604090912054169050801580610bfb57506001600160a01b0381166001145b610c405760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610515565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c89611233565b6001600160a01b038581166000908152602092909252604090912080546001600160a01b03191692909116919091179055610d39610cc56111d3565b6001600160a01b0385166000908152602091825260409081902080548251818502810185019093528083529192909190830182828015610d2e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d10575b505050505083611279565b610d8557610d456111d3565b6001600160a01b038481166000908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b600061082e600080516020611d2d833981519152836111fb565b6104b9600080516020611da483398151915282610edc565b600061082e600080516020611d4d833981519152836111fb565b6104b9600080516020611e0483398151915282610ef8565b6104b9600080516020611da483398151915282610ef8565b6104b9600080516020611dc483398151915282610ef8565b80336001600160a01b03821603610e475760405162461bcd60e51b815260040161051590611b6d565b610536600080516020611d2d83398151915283610ef8565b6060604051806060016040528060218152602001611e4460219139905090565b6000610e89611233565b6001600160a01b0392831660009081526020919091526040902054909116919050565b6104b9600080516020611ed383398151915282610ef8565b6104b9600080516020611eb383398151915282610ef8565b610ee5826112d4565b610eee816112f6565b610d858383611300565b610f01826112d4565b610f0a816112f6565b610d858383611376565b6001600160a01b0381163314610f845760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610515565b6105368282611376565b6001600160a01b0383163b610fda5760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610515565b600080846001600160a01b031663439fab9160e01b8585604051602401611002929190611c29565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110409190611c58565b600060405180830381855af49150503d806000811461107b576040519150601f19603f3d011682016040523d82523d6000602084013e611080565b606091505b50915091508181906110a55760405162461bcd60e51b81526004016105159190611b3a565b5080518190156110c85760405162461bcd60e51b81526004016105159190611b3a565b505050505050565b6000806110db611256565b6001600160a01b03161415905090565b6020811461112f5760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610515565b600061113d828401846119dc565b90506001600160a01b0381163b610d855760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610515565b60006111a4828401846119dc565b9050610d85604051806060016040528060238152602001611e9060239139826113ea565b336104b98180611443565b60006111f6604051806060016040528060378152602001611d6d60379139611547565b905090565b6000918252600080516020611de4833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006111f66040518060600160405280602b8152602001611e65602b9139611547565b60006111f6604051806060016040528060238152602001611e906023913961157a565b6000805b83518110156112ca57826001600160a01b03168482815181106112a2576112a2611c74565b60200260200101516001600160a01b0316036112c257600191505061082e565b60010161127d565b5060009392505050565b6000908152600080516020611de4833981519152602052604090206001015490565b6104b981336115ae565b61130a82826111fb565b610536576000828152600080516020611de4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61138082826111fb565b15610536576000828152600080516020611de4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006113f58361157a565b6001600160a01b0316146114395760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610515565b6105368282611612565b61144b611645565b156114b957611468600080516020611d2d833981519152836111fb565b6114b45760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610515565b6114c2565b6114c282611666565b6114ca611754565b1561153e576114e7600080516020611d4d833981519152826111fb565b6105365760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610515565b6105368161176e565b6000808260405160200161155b9190611c58565b60408051601f1981840301815291905280516020909101209392505050565b6000808260405160200161158e9190611c58565b60408051601f198184030181529190528051602090910120549392505050565b6115b882826111fb565b610536576115d0816001600160a01b031660146117c4565b6115db8360206117c4565b6040516020016115ec929190611c8a565b60408051601f198184030181529082905262461bcd60e51b825261051591600401611b3a565b6000826040516020016116259190611c58565b604051602081830303815290604052805190602001209050818155505050565b60008061165f600080516020611d2d8339815191526112d4565b1415905090565b61167e600080516020611d2d83398151915282611300565b6116a4600080516020611da4833981519152600080516020611e24833981519152611967565b6116ca600080516020611e24833981519152600080516020611d2d833981519152611967565b6116e2600080516020611d2d83398151915280611967565b611708600080516020611eb3833981519152600080516020611e24833981519152611967565b61172e600080516020611ed3833981519152600080516020611e24833981519152611967565b6104b9600080516020611dc4833981519152600080516020611d2d833981519152611967565b60008061165f600080516020611d4d8339815191526112d4565b611786600080516020611d4d83398151915280611967565b6117ac600080516020611e04833981519152600080516020611d4d833981519152611967565b6104b9600080516020611d4d83398151915282611300565b606060006117d3836002611bb3565b6117de906002611bca565b67ffffffffffffffff8111156117f6576117f6611cff565b6040519080825280601f01601f191660200182016040528015611820576020820181803683370190505b509050600360fc1b8160008151811061183b5761183b611c74565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061186a5761186a611c74565b60200101906001600160f81b031916908160001a905350600061188e846002611bb3565b611899906001611bca565b90505b6001811115611911576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106118cd576118cd611c74565b1a60f81b8282815181106118e3576118e3611c74565b60200101906001600160f81b031916908160001a90535060049490941c9361190a81611d15565b905061189c565b5083156119605760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610515565b9392505050565b6000611972836112d4565b6000848152600080516020611de48339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104b957600080fd5b6000602082840312156119ee57600080fd5b8135611960816119c7565b60008060408385031215611a0c57600080fd5b823591506020830135611a1e816119c7565b809150509250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff80821115611a5457600080fd5b818501915085601f830112611a6857600080fd5b813581811115611a7757600080fd5b866020828501011115611a8957600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015611adc5783516001600160a01b031683529284019291840191600101611ab7565b50909695505050505050565b60008060408385031215611afb57600080fd5b8235611b06816119c7565b91506020830135611a1e816119c7565b60005b83811015611b31578181015183820152602001611b19565b50506000910152565b6020815260008251806020840152611b59816040850160208701611b16565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761082e5761082e611b9d565b8082018082111561082e5761082e611b9d565b60008085851115611bed57600080fd5b83861115611bfa57600080fd5b5050820193919092039150565b600060208284031215611c1957600080fd5b8151801515811461196057600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60008251611c6a818460208701611b16565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611cc2816017850160208801611b16565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611cf3816028840160208801611b16565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600081611d2457611d24611b9d565b50600019019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212201c915e23942801f08009e20abe4df8c33135e94c07eb138deeb652be137d340b64736f6c63430008170033", - "sourceMap": "423:4745:30:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:116:44;;;;;;:::i;:::-;;:::i;:::-;;3155:122;;;;;;:::i;:::-;;:::i;2651:121::-;;;;;;:::i;:::-;;:::i;3680:137::-;;;;;;:::i;:::-;;:::i;757:86:49:-;808:4;757:86;;;567:14:60;;560:22;542:41;;530:2;515:18;757:86:49;;;;;;;;4632:247:44;;;;;;:::i;:::-;;:::i;2910:111::-;;;;;;:::i;:::-;;:::i;1465:1033:49:-;;;;;;:::i;:::-;;:::i;4161:151:30:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1359:135:44:-;;;;;;:::i;:::-;;:::i;3027:122::-;;;;;;:::i;:::-;;:::i;4511:342:30:-;;;;;;:::i;:::-;;:::i;2356:143:44:-;;;;;;:::i;:::-;;:::i;1793:128::-;;;;;;:::i;:::-;;:::i;3405:126::-;;;;;;:::i;:::-;;:::i;4004:151:30:-;;;;;;:::i;:::-;;:::i;2072:139:44:-;;;;;;:::i;:::-;;:::i;4087:138::-;;;;;;:::i;:::-;;:::i;1500:::-;;;;;;:::i;:::-;;:::i;2778:126::-;;;;;;:::i;:::-;;:::i;2217:133::-;;;;;;:::i;:::-;;:::i;3373:505:30:-;;;;;;:::i;:::-;;:::i;1644:143:44:-;;;;;;:::i;:::-;;:::i;2527:118::-;;;;;;:::i;:::-;;:::i;1927:139::-;;;;;;:::i;:::-;;:::i;4231:121::-;;;;;;:::i;:::-;;:::i;3557:117::-;;;;;;:::i;:::-;;:::i;4479:125::-;;;;;;:::i;:::-;;:::i;3823:142::-;;;;;;:::i;:::-;;:::i;2071:126:30:-;;;:::i;:::-;;;;;;;:::i;3142:112::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3386:32:60;;;3368:51;;3356:2;3341:18;3142:112:30;3222:203:60;4358:115:44;;;;;;:::i;:::-;;:::i;3971:110::-;;;;;;:::i;:::-;;:::i;3283:116::-;3347:45;-1:-1:-1;;;;;;;;;;;3384:7:44;3347:23;:45::i;:::-;3283:116;:::o;3155:122::-;3222:48;-1:-1:-1;;;;;;;;;;;3262:7:44;3222:23;:48::i;2651:121::-;2717:48;-1:-1:-1;;;;;;;;;;;2757:7:44;2717:23;:48::i;3680:137::-;3742:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;;;;;;;;;3761:49:::1;-1:-1:-1::0;;;;;;;;;;;3802:7:44;3761:24:::1;:49::i;:::-;3680:137:::0;;:::o;4632:247::-;-1:-1:-1;;;;;;;;;;;4708:24:44;;:45;;;;;4737:16;4736:17;4708:45;4704:118;;;4769:42;;-1:-1:-1;;;4769:42:44;;3983:2:60;4769:42:44;;;3965:21:60;;;4002:18;;;3995:30;4061:34;4041:18;;;4034:62;4113:18;;4769:42:44;3781:356:60;4704:118:44;4831:41;4858:4;4864:7;4831:26;:41::i;2910:111::-;2972:42;-1:-1:-1;;;;;;;;;;;3006:7:44;2972:23;:42::i;1465:1033:49:-;561:4:45;544:5;-1:-1:-1;;;;;544:22:45;;536:57;;;;-1:-1:-1;;;536:57:45;;4344:2:60;536:57:45;;;4326:21:60;4383:2;4363:18;;;4356:30;-1:-1:-1;;;4402:18:60;;;4395:52;4464:18;;536:57:45;4142:346:60;536:57:45;1543:17:49::1;1563:24;1543:17:::0;1563:2:::1;:24;:::i;:::-;1543:44:::0;-1:-1:-1;1597:24:49::1;1624:14;1543:44:::0;1636:2:::1;1624:14;:::i;:::-;1597:41:::0;-1:-1:-1;1656:31:49;;::::1;;1648:63;;;::::0;-1:-1:-1;;;1648:63:49;;5130:2:60;1648:63:49::1;::::0;::::1;5112:21:60::0;5169:2;5149:18;;;5142:30;-1:-1:-1;;;5188:18:60;;;5181:49;5247:18;;1648:63:49::1;4928:343:60::0;1648:63:49::1;1721:18;1753:32;1768:16:::0;1758:9;1753:4;;:32:::1;:::i;:::-;1742:55;;;;;;;:::i;:::-;1721:76:::0;-1:-1:-1;1808:35:49::1;;1846:16;1852:9:::0;1808:35;1846:4;;:16:::1;:::i;:::-;1808:54;;;;1933:23;;1959;:4:::0;1964:16;1959:4;;:23:::1;:::i;:::-;1933:49:::0;;-1:-1:-1;1933:49:49;-1:-1:-1;;;;;;2077:26:49;::::1;::::0;2073:122:::1;;2119:45;2143:10;2155:8;;2119:23;:45::i;:::-;2178:7;;;;;;;3680:137:44::0;;:::o;2073:122:49:-:1;2209:15;:13;:15::i;:::-;2205:287;;;2248:20:::0;;2240:53:::1;;;::::0;-1:-1:-1;;;2240:53:49;;6074:2:60;2240:53:49::1;::::0;::::1;6056:21:60::0;6113:2;6093:18;;;6086:30;-1:-1:-1;;;6132:18:60;;;6125:50;6192:18;;2240:53:49::1;5872:344:60::0;2240:53:49::1;2205:287;;;2373:26;2390:8;;2373:16;:26::i;:::-;2413:33;2437:8;;2413:23;:33::i;:::-;2460:21;:19;:21::i;4161:151:30:-:0;4229:24;4272:26;:24;:26::i;:::-;-1:-1:-1;;;;;4272:33:30;;;;;;;;;;;;;;;4265:40;;;;;;;;;;;;;;;;;;;4272:33;;4265:40;;;4272:33;4265:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4265:40:30;;;;;;;;;;;;;;;;;;;;;;;4161:151;;;:::o;1359:135:44:-;1420:4;1443:44;-1:-1:-1;;;;;;;;;;;1479:7:44;1443:21;:44::i;:::-;1436:51;1359:135;-1:-1:-1;;1359:135:44:o;3027:122::-;3094:48;-1:-1:-1;;;;;;;;;;;3134:7:44;3094:23;:48::i;4511:342:30:-;4599:10;4573:15;:13;:15::i;:::-;-1:-1:-1;;;;;4573:22:30;;;;;;;;;;;;;;;;;;:36;4565:84;;;;-1:-1:-1;;;4565:84:30;;6423:2:60;4565:84:30;;;6405:21:60;6462:2;6442:18;;;6435:30;6501:34;6481:18;;;6474:62;-1:-1:-1;;;6552:18:60;;;6545:33;6595:19;;4565:84:30;6221:399:60;4565:84:30;4668:53;;-1:-1:-1;;;4668:53:30;;-1:-1:-1;;;;;3386:32:60;;4668:53:30;;;3368:51:60;4686:10:30;;4668:46;;3341:18:60;;4668:53:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4667:54;4659:90;;;;-1:-1:-1;;;4659:90:30;;7109:2:60;4659:90:30;;;7091:21:60;7148:2;7128:18;;;7121:30;7187:25;7167:18;;;7160:53;7230:18;;4659:90:30;6907:347:60;4659:90:30;4764:35;;4788:10;;-1:-1:-1;;;;;4764:35:30;;;;;;;;4842:3;4809:15;:13;:15::i;:::-;-1:-1:-1;;;;;4809:22:30;;;;;;;;;;;;;;;:37;;-1:-1:-1;;;;;;4809:37:30;;;;;;;;4511:342::o;2356:143:44:-;2421:4;2444:48;-1:-1:-1;;;;;;;;;;;2484:7:44;2444:21;:48::i;1793:128::-;1851:4;1874:40;-1:-1:-1;;;;;;;;;;;1906:7:44;1874:21;:40::i;3405:126::-;3474:50;-1:-1:-1;;;;;;;;;;;3516:7:44;3474:23;:50::i;4004:151:30:-;2020:10;2007:9;:7;:9::i;:::-;-1:-1:-1;;;;;2007:23:30;;1999:48;;;;-1:-1:-1;;;1999:48:30;;7461:2:60;1999:48:30;;;7443:21:60;7500:2;7480:18;;;7473:30;-1:-1:-1;;;7519:18:60;;;7512:42;7571:18;;1999:48:30;7259:336:60;1999:48:30;4075:25:::1;::::0;-1:-1:-1;;;;;4075:25:30;::::1;::::0;::::1;::::0;;;::::1;858:3:28;4110:15:30;:13;:15::i;2072:139:44:-:0;2135:4;2158:46;-1:-1:-1;;;;;;;;;;;2196:7:44;2158:21;:46::i;4087:138::-;4150:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;4169:49:::1;-1:-1:-1::0;;;;;;;;;;;4210:7:44;4169:24:::1;:49::i;1500:138::-:0;1562:4;1585:46;-1:-1:-1;;;;;;;;;;;1623:7:44;1585:21;:46::i;2778:126::-;2847:50;-1:-1:-1;;;;;;;;;;;2889:7:44;2847:23;:50::i;2217:133::-;2277:4;2300:43;-1:-1:-1;;;;;;;;;;;2335:7:44;2300:21;:43::i;3373:505:30:-;2020:10;2007:9;:7;:9::i;:::-;-1:-1:-1;;;;;2007:23:30;;1999:48;;;;-1:-1:-1;;;1999:48:30;;7461:2:60;1999:48:30;;;7443:21:60;7500:2;7480:18;;;7473:30;-1:-1:-1;;;7519:18:60;;;7512:42;7571:18;;1999:48:30;7259:336:60;1999:48:30;3456:21:::1;3480:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;3480:22:30;;::::1;;::::0;;;::::1;::::0;;;;;;;;;::::1;::::0;-1:-1:-1;3533:27:30;;;:61:::1;;-1:-1:-1::0;;;;;;3564:30:30;::::1;858:3:28;3564:30:30;3533:61;3512:130;;;::::0;-1:-1:-1;;;3512:130:30;;7802:2:60;3512:130:30::1;::::0;::::1;7784:21:60::0;7841:2;7821:18;;;7814:30;-1:-1:-1;;;7860:18:60;;;7853:52;7922:18;;3512:130:30::1;7600:346:60::0;3512:130:30::1;3678:6;-1:-1:-1::0;;;;;3657:28:30::1;3671:5;-1:-1:-1::0;;;;;3657:28:30::1;;;;;;;;;;;3720:6;3695:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;3695:22:30;;::::1;;::::0;;;::::1;::::0;;;;;;;;:31;;-1:-1:-1;;;;;;3695:31:30::1;::::0;;;::::1;::::0;;;::::1;::::0;;3741:58:::1;3757:26;:24;:26::i;:::-;-1:-1:-1::0;;;;;3757:33:30;::::1;;::::0;;;::::1;::::0;;;;;;;;3741:58;;;;;;::::1;::::0;;;;;;;;;;;;3757:33;;3741:58;;::::1;3757:33:::0;3741:58;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;3741:58:30::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;3792:6;3741:15;:58::i;:::-;3736:136;;3815:26;:24;:26::i;:::-;-1:-1:-1::0;;;;;3815:33:30;;::::1;;::::0;;;::::1;::::0;;;;;;:46;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;3815:46:30::1;::::0;;::::1;::::0;;;::::1;::::0;;3736:136:::1;3446:432;3373:505:::0;;:::o;1644:143:44:-;1709:4;1732:48;-1:-1:-1;;;;;;;;;;;1772:7:44;1732:21;:48::i;2527:118::-;2592:46;-1:-1:-1;;;;;;;;;;;2630:7:44;2592:23;:46::i;1927:139::-;1990:4;2013:46;-1:-1:-1;;;;;;;;;;;2051:7:44;2013:21;:46::i;4231:121::-;4296:49;-1:-1:-1;;;;;;;;;;;4337:7:44;4296:24;:49::i;3557:117::-;3620:47;-1:-1:-1;;;;;;;;;;;3659:7:44;3620:24;:47::i;4479:125::-;4546:51;-1:-1:-1;;;;;;;;;;;4589:7:44;4546:24;:51::i;3823:142::-;3888:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;3907:51:::1;-1:-1:-1::0;;;;;;;;;;;3950:7:44;3907:24:::1;:51::i;2071:126:30:-:0;2123:13;2148:42;;;;;;;;;;;;;;;;;;;2071:126;:::o;3142:112::-;3199:7;3225:15;:13;:15::i;:::-;-1:-1:-1;;;;;3225:22:30;;;;;;;;;;;;;;;;;;;;3142:112;-1:-1:-1;3142:112:30:o;4358:115:44:-;4420:46;-1:-1:-1;;;;;;;;;;;4458:7:44;4420:24;:46::i;3971:110::-;4031:43;-1:-1:-1;;;;;;;;;;;4066:7:44;4031:24;:43::i;6306:130:50:-;6374:18;6387:4;6374:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6404:25:::1;6415:4;6421:7;6404:10;:25::i;6702:132::-:0;6771:18;6784:4;6771:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6801:26:::1;6813:4;6819:7;6801:11;:26::i;7350:199::-:0;-1:-1:-1;;;;;7430:23:50;;3290:10;7430:23;7422:83;;;;-1:-1:-1;;;7422:83:50;;8153:2:60;7422:83:50;;;8135:21:60;8192:2;8172:18;;;8165:30;8231:34;8211:18;;;8204:62;-1:-1:-1;;;8282:18:60;;;8275:45;8337:19;;7422:83:50;7951:411:60;7422:83:50;7516:26;7528:4;7534:7;7516:11;:26::i;2504:540:49:-;-1:-1:-1;;;;;2632:34:49;;474:20:51;2624:67:49;;;;-1:-1:-1;;;2624:67:49;;8569:2:60;2624:67:49;;;8551:21:60;8608:2;8588:18;;;8581:30;-1:-1:-1;;;8627:18:60;;;8620:48;8685:18;;2624:67:49;8367:342:60;2624:67:49;2772:12;2786:23;2813;-1:-1:-1;;;;;2813:36:49;2886:24;;;2912:7;;2863:57;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2863:57:49;;;;;;;;;;;;;;-1:-1:-1;;;;;2863:57:49;-1:-1:-1;;;;;;2863:57:49;;;;;;;;;;2813:117;;;;2863:57;2813:117;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2771:159;;;;2948:7;2964:10;2940:36;;;;;-1:-1:-1;;;2940:36:49;;;;;;;;:::i;:::-;-1:-1:-1;2994:17:49;;:10;;:22;2986:51;;;;-1:-1:-1;;;2986:51:49;;;;;;;;:::i;:::-;;2614:430;;2504:540;;;:::o;2455:110:30:-;2512:4;;2535:9;:7;:9::i;:::-;-1:-1:-1;;;;;2535:23:30;;;2528:30;;2455:110;:::o;2862:274::-;2973:2;2958:17;;2950:47;;;;-1:-1:-1;;;2950:47:30;;9601:2:60;2950:47:30;;;9583:21:60;9640:2;9620:18;;;9613:30;-1:-1:-1;;;9659:18:60;;;9652:47;9716:18;;2950:47:30;9399:341:60;2950:47:30;3007:16;3026:27;;;;3037:4;3026:27;:::i;:::-;3007:46;-1:-1:-1;;;;;;3071:19:30;;474:20:51;3063:66:30;;;;-1:-1:-1;;;3063:66:30;;9947:2:60;3063:66:30;;;9929:21:60;;;9966:18;;;9959:30;10025:34;10005:18;;;9998:62;10077:18;;3063:66:30;9745:356:60;2249:200:30;2331:16;2350:27;;;;2361:4;2350:27;:::i;:::-;2331:46;;2387:55;2420:11;;;;;;;;;;;;;;;;;2433:8;2387:32;:55::i;2533:142:53:-;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;1737:223:30:-;1820:37;1880:73;1921:31;;;;;;;;;;;;;;;;;1880:40;:73::i;:::-;1873:80;;1737:223;:::o;4481:132:50:-;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;;;;4481:132::o;1389:166:30:-;1437:35;1491:57;1528:19;;;;;;;;;;;;;;;;;1491:36;:57::i;1102:116::-;1144:7;1170:41;1199:11;;;;;;;;;;;;;;;;;1170:28;:41::i;4859:307::-;4975:4;;4995:143;5019:9;:16;5015:1;:20;4995:143;;;5076:6;-1:-1:-1;;;;;5060:22:30;:9;5070:1;5060:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5060:22:30;;5056:72;;5109:4;5102:11;;;;;5056:72;5037:3;;4995:143;;;-1:-1:-1;5154:5:30;;4859:307;-1:-1:-1;;;4859:307:30:o;5911:116:50:-;5970:7;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;:24;;;;5911:116::o;4892:95::-;4950:30;4961:4;3290:10;4950;:30::i;8830:227::-;8905:22;8913:4;8919:7;8905;:22::i;:::-;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;9216:228::-;9291:22;9299:4;9305:7;9291;:22::i;:::-;9287:151;;;9363:5;9329:14;;;-1:-1:-1;;;;;;;;;;;9329:14:50;;;;;;;;-1:-1:-1;;;;;9329:31:50;;;;;;;;;;:39;;-1:-1:-1;;9329:39:50;;;9387:40;3290:10;;9329:14;;9387:40;;9363:5;9387:40;9216:228;;:::o;3687:189:52:-;3811:3;3778:21;3794:4;3778:15;:21::i;:::-;-1:-1:-1;;;;;3778:37:52;;3770:61;;;;-1:-1:-1;;;3770:61:52;;10440:2:60;3770:61:52;;;10422:21:60;10479:2;10459:18;;;10452:30;-1:-1:-1;;;10498:18:60;;;10491:41;10549:18;;3770:61:52;10238:335:60;3770:61:52;3841:28;3857:4;3863:5;3841:15;:28::i;2681:1050:53:-;2782:28;:26;:28::i;:::-;2778:485;;;3062:60;-1:-1:-1;;;;;;;;;;;3102:19:53;3062:21;:60::i;:::-;3037:144;;;;-1:-1:-1;;;3037:144:53;;10780:2:60;3037:144:53;;;10762:21:60;10819:2;10799:18;;;10792:30;10858:27;10838:18;;;10831:55;10903:18;;3037:144:53;10578:349:60;3037:144:53;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;3519:58;-1:-1:-1;;;;;;;;;;;3557:19:53;3519:21;:58::i;:::-;3494:151;;;;-1:-1:-1;;;3494:151:53;;11134:2:60;3494:151:53;;;11116:21:60;11173:2;11153:18;;;11146:30;11212:34;11192:18;;;11185:62;-1:-1:-1;;;11263:18:60;;;11256:32;11305:19;;3494:151:53;10932:398:60;3273:452:53;3676:38;3694:19;3676:17;:38::i;2072:304:52:-;2176:52;2244:16;2290:4;2273:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2273:22:52;;;;;;;;;2263:33;;2273:22;2263:33;;;;;2072:304;-1:-1:-1;;;2072:304:52:o;3268:212::-;3336:14;3362:12;3404:4;3387:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3387:22:52;;;;;;;;;3377:33;;3387:22;3377:33;;;;3453:11;;3268:212;-1:-1:-1;;;3268:212:52:o;5257:484:50:-;5337:22;5345:4;5351:7;5337;:22::i;:::-;5332:403;;5520:41;5548:7;-1:-1:-1;;;;;5520:41:50;5558:2;5520:19;:41::i;:::-;5632:38;5660:4;5667:2;5632:19;:38::i;:::-;5427:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5427:265:50;;;;;;;;;;-1:-1:-1;;;5375:349:50;;;;;;;:::i;3486:195:52:-;3565:12;3607:4;3590:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;3580:33;;;;;;3565:48;;3659:5;3653:4;3646:19;3632:43;3486:195;;:::o;2221:152:53:-;2282:4;;2305:44;-1:-1:-1;;;;;;;;;;;2305:26:53;:44::i;:::-;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;2438:4;;2461:42;-1:-1:-1;;;;;;;;;;;2461:26:53;:42::i;3737:280::-;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;3949:24;:61::i;1652:441:59:-;1727:13;1752:19;1784:10;1788:6;1784:1;:10;:::i;:::-;:14;;1797:1;1784:14;:::i;:::-;1774:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1774:25:59;;1752:47;;-1:-1:-1;;;1809:6:59;1816:1;1809:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1809:15:59;;;;;;;;;-1:-1:-1;;;1834:6:59;1841:1;1834:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1834:15:59;;;;;;;;-1:-1:-1;1864:9:59;1876:10;1880:6;1876:1;:10;:::i;:::-;:14;;1889:1;1876:14;:::i;:::-;1864:26;;1859:132;1896:1;1892;:5;1859:132;;;-1:-1:-1;;;1943:5:59;1951:3;1943:11;1930:25;;;;;;;:::i;:::-;;;;1918:6;1925:1;1918:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1918:37:59;;;;;;;;-1:-1:-1;1979:1:59;1969:11;;;;;1899:3;;;:::i;:::-;;;1859:132;;;-1:-1:-1;2008:10:59;;2000:55;;;;-1:-1:-1;;;2000:55:59;;12921:2:60;2000:55:59;;;12903:21:60;;;12940:18;;;12933:30;12999:34;12979:18;;;12972:62;13051:18;;2000:55:59;12719:356:60;2000:55:59;2079:6;1652:441;-1:-1:-1;;;1652:441:59:o;8433:241:50:-;8508:25;8536:18;8549:4;8536:12;:18::i;:::-;8564:14;;;;-1:-1:-1;;;;;;;;;;;8564:14:50;;;;;;:24;;:36;;;8615:52;8508:46;;-1:-1:-1;8591:9:50;;8508:46;;8564:14;;8615:52;;8564:14;8615:52;8498:176;8433:241;;:::o;14:131:60:-;-1:-1:-1;;;;;89:31:60;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:315::-;662:6;670;723:2;711:9;702:7;698:23;694:32;691:52;;;739:1;736;729:12;691:52;775:9;762:23;752:33;;835:2;824:9;820:18;807:32;848:31;873:5;848:31;:::i;:::-;898:5;888:15;;;594:315;;;;;:::o;914:591::-;984:6;992;1045:2;1033:9;1024:7;1020:23;1016:32;1013:52;;;1061:1;1058;1051:12;1013:52;1101:9;1088:23;1130:18;1171:2;1163:6;1160:14;1157:34;;;1187:1;1184;1177:12;1157:34;1225:6;1214:9;1210:22;1200:32;;1270:7;1263:4;1259:2;1255:13;1251:27;1241:55;;1292:1;1289;1282:12;1241:55;1332:2;1319:16;1358:2;1350:6;1347:14;1344:34;;;1374:1;1371;1364:12;1344:34;1419:7;1414:2;1405:6;1401:2;1397:15;1393:24;1390:37;1387:57;;;1440:1;1437;1430:12;1387:57;1471:2;1463:11;;;;;1493:6;;-1:-1:-1;914:591:60;;-1:-1:-1;;;;914:591:60:o;1510:658::-;1681:2;1733:21;;;1803:13;;1706:18;;;1825:22;;;1652:4;;1681:2;1904:15;;;;1878:2;1863:18;;;1652:4;1947:195;1961:6;1958:1;1955:13;1947:195;;;2026:13;;-1:-1:-1;;;;;2022:39:60;2010:52;;2117:15;;;;2082:12;;;;2058:1;1976:9;1947:195;;;-1:-1:-1;2159:3:60;;1510:658;-1:-1:-1;;;;;;1510:658:60:o;2173:388::-;2241:6;2249;2302:2;2290:9;2281:7;2277:23;2273:32;2270:52;;;2318:1;2315;2308:12;2270:52;2357:9;2344:23;2376:31;2401:5;2376:31;:::i;:::-;2426:5;-1:-1:-1;2483:2:60;2468:18;;2455:32;2496:33;2455:32;2496:33;:::i;2566:250::-;2651:1;2661:113;2675:6;2672:1;2669:13;2661:113;;;2751:11;;;2745:18;2732:11;;;2725:39;2697:2;2690:10;2661:113;;;-1:-1:-1;;2808:1:60;2790:16;;2783:27;2566:250::o;2821:396::-;2970:2;2959:9;2952:21;2933:4;3002:6;2996:13;3045:6;3040:2;3029:9;3025:18;3018:34;3061:79;3133:6;3128:2;3117:9;3113:18;3108:2;3100:6;3096:15;3061:79;:::i;:::-;3201:2;3180:15;-1:-1:-1;;3176:29:60;3161:45;;;;3208:2;3157:54;;2821:396;-1:-1:-1;;2821:396:60:o;3430:346::-;3632:2;3614:21;;;3671:2;3651:18;;;3644:30;-1:-1:-1;;;3705:2:60;3690:18;;3683:52;3767:2;3752:18;;3430:346::o;4493:127::-;4554:10;4549:3;4545:20;4542:1;4535:31;4585:4;4582:1;4575:15;4609:4;4606:1;4599:15;4625:168;4698:9;;;4729;;4746:15;;;4740:22;;4726:37;4716:71;;4767:18;;:::i;4798:125::-;4863:9;;;4884:10;;;4881:36;;;4897:18;;:::i;5276:331::-;5381:9;5392;5434:8;5422:10;5419:24;5416:44;;;5456:1;5453;5446:12;5416:44;5485:6;5475:8;5472:20;5469:40;;;5505:1;5502;5495:12;5469:40;-1:-1:-1;;5531:23:60;;;5576:25;;;;;-1:-1:-1;5276:331:60:o;6625:277::-;6692:6;6745:2;6733:9;6724:7;6720:23;6716:32;6713:52;;;6761:1;6758;6751:12;6713:52;6793:9;6787:16;6846:5;6839:13;6832:21;6825:5;6822:32;6812:60;;6868:1;6865;6858:12;8714:388;8871:2;8860:9;8853:21;8910:6;8905:2;8894:9;8890:18;8883:34;8967:6;8959;8954:2;8943:9;8939:18;8926:48;9023:1;8994:22;;;9018:2;8990:31;;;8983:42;;;;9086:2;9065:15;;;-1:-1:-1;;9061:29:60;9046:45;9042:54;;8714:388;-1:-1:-1;8714:388:60:o;9107:287::-;9236:3;9274:6;9268:13;9290:66;9349:6;9344:3;9337:4;9329:6;9325:17;9290:66;:::i;:::-;9372:16;;;;;9107:287;-1:-1:-1;;9107:287:60:o;10106:127::-;10167:10;10162:3;10158:20;10155:1;10148:31;10198:4;10195:1;10188:15;10222:4;10219:1;10212:15;11629:812;12040:25;12035:3;12028:38;12010:3;12095:6;12089:13;12111:75;12179:6;12174:2;12169:3;12165:12;12158:4;12150:6;12146:17;12111:75;:::i;:::-;-1:-1:-1;;;12245:2:60;12205:16;;;12237:11;;;12230:40;12295:13;;12317:76;12295:13;12379:2;12371:11;;12364:4;12352:17;;12317:76;:::i;:::-;12413:17;12432:2;12409:26;;11629:812;-1:-1:-1;;;;11629:812:60:o;12446:127::-;12507:10;12502:3;12498:20;12495:1;12488:31;12538:4;12535:1;12528:15;12562:4;12559:1;12552:15;12578:136;12617:3;12645:5;12635:39;;12654:18;;:::i;:::-;-1:-1:-1;;;12690:18:60;;12578:136::o", - "linkReferences": {}, - "immutableReferences": { - "47467": [{ "start": 1364, "length": 32 }], - "47936": [{ "start": 1511, "length": 32 }] - } - }, - "methodIdentifiers": { - "blockToken(address)": "726176e8", - "enlistToken(address,address)": "a3ecff8f", - "getBridge(address)": "f44c7c8f", - "getWithdrawalBridges(address)": "557133f6", - "identify()": "eeb72866", - "initialize(bytes)": "439fab91", - "isAppGovernor(address)": "5a5d1bb9", - "isAppRoleAdmin(address)": "8e5224ff", - "isFrozen()": "33eeb147", - "isGovernanceAdmin(address)": "cb1cccce", - "isOperator(address)": "6d70f7ae", - "isSecurityAdmin(address)": "d08fb6cb", - "isSecurityAgent(address)": "757bd9ab", - "isTokenAdmin(address)": "a2bdde3d", - "isUpgradeGovernor(address)": "6c04d9d5", - "registerAppGovernor(address)": "cdd1f70d", - "registerAppRoleAdmin(address)": "17896383", - "registerGovernanceAdmin(address)": "9463629a", - "registerOperator(address)": "3682a450", - "registerSecurityAdmin(address)": "62a14376", - "registerSecurityAgent(address)": "0e770f23", - "registerTokenAdmin(address)": "0b3a2d21", - "registerUpgradeGovernor(address)": "6fc97cbf", - "renounceRole(bytes32,address)": "36568abe", - "revokeAppGovernor(address)": "deec9c5a", - "revokeAppRoleAdmin(address)": "2f951985", - "revokeGovernanceAdmin(address)": "ee0e6807", - "revokeOperator(address)": "fad8b32a", - "revokeSecurityAdmin(address)": "8101b64c", - "revokeSecurityAgent(address)": "d9fa7091", - "revokeTokenAdmin(address)": "fa0f73ba", - "revokeUpgradeGovernor(address)": "ed9ef16a", - "selfRemove(address)": "65650288" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"TokenEnlisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"TokenSelfRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenStatusBlocked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"blockToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"enlistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getWithdrawalBridges\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"bridges\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"selfRemove\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"blockToken(address)\":{\"notice\":\"Block a specific token from being used in the StarkGate. A blocked token cannot be deployed.\"},\"enlistToken(address,address)\":{\"notice\":\"Add a mapping between a token and the bridge handling it. Ensuring unique enrollment.\"},\"getBridge(address)\":{\"notice\":\"Returns the bridge that handles the given token.\"},\"getWithdrawalBridges(address)\":{\"notice\":\"Retrieves a list of bridge addresses that have facilitated withdrawals for the specified token.\"},\"selfRemove(address)\":{\"notice\":\"Using this function a bridge removes enlisting of its token from the registry. The bridge must implement `isServicingToken(address token)` (see `IStarkgateService`).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/solidity/StarkgateRegistry.sol\":\"StarkgateRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/solidity/IStarkgateRegistry.sol\":{\"keccak256\":\"0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172\",\"dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7\"]},\"src/solidity/IStarkgateService.sol\":{\"keccak256\":\"0xd867557468c043dbf6be2a2f98226964338258d108e55481202802311e122da8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://6db7ee4ebdc4765a12589afb705aea612126b84bae58cb8453568bd12e090946\",\"dweb:/ipfs/QmXYxCtSSfYsxa9uiV1HKFX7puutZ2k2Zm3aCcgGZ5Frmx\"]},\"src/solidity/StarkgateConstants.sol\":{\"keccak256\":\"0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c\",\"dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx\"]},\"src/solidity/StarkgateRegistry.sol\":{\"keccak256\":\"0x86b6c1487f8f19371f885c0e3f955470cf9d5ee420a84e616e714d54cc74bf2e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://abe3999416806730e7ce06d4dc8be25887ffafe18b3f36c26f1b98f24afe023d\",\"dweb:/ipfs/QmbJ3TSgihZqYDtJyULevQNP83K7dQvrjcjCjbitdS6E2f\"]},\"starkware/solidity/components/Roles.sol\":{\"keccak256\":\"0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3\",\"dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv\"]},\"starkware/solidity/interfaces/BlockDirectCall.sol\":{\"keccak256\":\"0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3\",\"dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS\"]},\"starkware/solidity/interfaces/ContractInitializer.sol\":{\"keccak256\":\"0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6\",\"dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7\"]},\"starkware/solidity/interfaces/Identity.sol\":{\"keccak256\":\"0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888\",\"dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh\"]},\"starkware/solidity/interfaces/ProxySupport.sol\":{\"keccak256\":\"0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6\",\"dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4\"]},\"starkware/solidity/libraries/AccessControl.sol\":{\"keccak256\":\"0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074\",\"dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e\"]},\"starkware/solidity/libraries/Addresses.sol\":{\"keccak256\":\"0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89\",\"dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS\"]},\"starkware/solidity/libraries/NamedStorage.sol\":{\"keccak256\":\"0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a\",\"dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi\"]},\"starkware/solidity/libraries/RolesLib.sol\":{\"keccak256\":\"0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb\",\"dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL\"]},\"third_party/open_zeppelin/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.23+commit.f704f362" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "bridge", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "TokenEnlisted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "bridge", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "TokenSelfRemoved", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "TokenStatusBlocked", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "blockToken" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "address", "name": "bridge", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "enlistToken" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getBridge", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getWithdrawalBridges", - "outputs": [ - { - "internalType": "address[]", - "name": "bridges", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "identify", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppRoleAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isFrozen", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isGovernanceAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isOperator", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAgent", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isTokenAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isUpgradeGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerUpgradeGovernor" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeUpgradeGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "selfRemove" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { - "kind": "user", - "methods": { - "blockToken(address)": { - "notice": "Block a specific token from being used in the StarkGate. A blocked token cannot be deployed." - }, - "enlistToken(address,address)": { - "notice": "Add a mapping between a token and the bridge handling it. Ensuring unique enrollment." - }, - "getBridge(address)": { - "notice": "Returns the bridge that handles the given token." - }, - "getWithdrawalBridges(address)": { - "notice": "Retrieves a list of bridge addresses that have facilitated withdrawals for the specified token." - }, - "selfRemove(address)": { - "notice": "Using this function a bridge removes enlisting of its token from the registry. The bridge must implement `isServicingToken(address token)` (see `IStarkgateService`)." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": ["forge-std/=lib/forge-std/src/"], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "src/solidity/StarkgateRegistry.sol": "StarkgateRegistry" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "src/solidity/IStarkgateRegistry.sol": { - "keccak256": "0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2", - "urls": [ - "bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172", - "dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7" - ], - "license": "Apache-2.0." - }, - "src/solidity/IStarkgateService.sol": { - "keccak256": "0xd867557468c043dbf6be2a2f98226964338258d108e55481202802311e122da8", - "urls": [ - "bzz-raw://6db7ee4ebdc4765a12589afb705aea612126b84bae58cb8453568bd12e090946", - "dweb:/ipfs/QmXYxCtSSfYsxa9uiV1HKFX7puutZ2k2Zm3aCcgGZ5Frmx" - ], - "license": "Apache-2.0." - }, - "src/solidity/StarkgateConstants.sol": { - "keccak256": "0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642", - "urls": [ - "bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c", - "dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx" - ], - "license": "Apache-2.0." - }, - "src/solidity/StarkgateRegistry.sol": { - "keccak256": "0x86b6c1487f8f19371f885c0e3f955470cf9d5ee420a84e616e714d54cc74bf2e", - "urls": [ - "bzz-raw://abe3999416806730e7ce06d4dc8be25887ffafe18b3f36c26f1b98f24afe023d", - "dweb:/ipfs/QmbJ3TSgihZqYDtJyULevQNP83K7dQvrjcjCjbitdS6E2f" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/components/Roles.sol": { - "keccak256": "0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf", - "urls": [ - "bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3", - "dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/BlockDirectCall.sol": { - "keccak256": "0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6", - "urls": [ - "bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3", - "dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/ContractInitializer.sol": { - "keccak256": "0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a", - "urls": [ - "bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6", - "dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/Identity.sol": { - "keccak256": "0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08", - "urls": [ - "bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888", - "dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/ProxySupport.sol": { - "keccak256": "0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a", - "urls": [ - "bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6", - "dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/AccessControl.sol": { - "keccak256": "0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32", - "urls": [ - "bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074", - "dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e" - ], - "license": "MIT" - }, - "starkware/solidity/libraries/Addresses.sol": { - "keccak256": "0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179", - "urls": [ - "bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89", - "dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/NamedStorage.sol": { - "keccak256": "0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e", - "urls": [ - "bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a", - "dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/RolesLib.sol": { - "keccak256": "0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0", - "urls": [ - "bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb", - "dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL" - ], - "license": "Apache-2.0." - }, - "third_party/open_zeppelin/utils/Strings.sol": { - "keccak256": "0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3", - "urls": [ - "bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638", - "dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 30 -} diff --git a/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs b/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs index 604897d..81d7402 100644 --- a/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs +++ b/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs @@ -6,6 +6,7 @@ use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; use starknet_proxy_client::clients::proxy_5_0_0::ProxySupport5_0_0; +#[derive(Clone)] pub struct StarkgateRegistryContractClient { registry: StarkgateRegistry, proxy_support: ProxySupport5_0_0, diff --git a/crates/l2/starkgate-registry-client/src/interfaces/registry.rs b/crates/l2/starkgate-registry-client/src/interfaces/registry.rs index 207994f..13ffb58 100644 --- a/crates/l2/starkgate-registry-client/src/interfaces/registry.rs +++ b/crates/l2/starkgate-registry-client/src/interfaces/registry.rs @@ -12,15 +12,7 @@ type Address = H160; abigen!( StarkgateRegistry, - r#"[ - function enlistToken(address token, address bridge) external onlyManager - function blockToken(address token) external onlyManager - - function selfRemove(address token) external - - function identify() external pure override returns (string memory) - function getBridge(address token) external view returns (address) - ]"#, + "../../../artifacts/starkgate-contracts/StarkgateRegistry.json", ); #[async_trait] diff --git a/crates/l2/starkgate-registry-client/src/lib.rs b/crates/l2/starkgate-registry-client/src/lib.rs index fd8148d..ec4bcf4 100644 --- a/crates/l2/starkgate-registry-client/src/lib.rs +++ b/crates/l2/starkgate-registry-client/src/lib.rs @@ -7,7 +7,8 @@ use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; -const STARKGATE_REGISTRY: &str = include_str!("artifacts/StarkgateRegistry.json"); +const STARKGATE_REGISTRY: &str = + include_str!("../../../../artifacts/starkgate-contracts/StarkgateRegistry.json"); pub async fn deploy_starkgate_registry_behind_unsafe_proxy( client: Arc, diff --git a/crates/l2/starknet-core-contract-client/src/artifacts/Starknet.json b/crates/l2/starknet-core-contract-client/src/artifacts/Starknet.json deleted file mode 100644 index 83c7504..0000000 --- a/crates/l2/starknet-core-contract-client/src/artifacts/Starknet.json +++ /dev/null @@ -1,1723 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "cancelL1ToL2Message", - "inputs": [ - { "name": "toAddress", "type": "uint256", "internalType": "uint256" }, - { "name": "selector", "type": "uint256", "internalType": "uint256" }, - { "name": "payload", "type": "uint256[]", "internalType": "uint256[]" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "configHash", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "consumeMessageFromL2", - "inputs": [ - { "name": "fromAddress", "type": "uint256", "internalType": "uint256" }, - { "name": "payload", "type": "uint256[]", "internalType": "uint256[]" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "finalize", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getMaxL1MsgFee", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "identify", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "initialize", - "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isFinalized", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isFrozen", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isOperator", - "inputs": [ - { "name": "user", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l1ToL2MessageCancellations", - "inputs": [ - { "name": "msgHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l1ToL2MessageNonce", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l1ToL2Messages", - "inputs": [ - { "name": "msgHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l2ToL1Messages", - "inputs": [ - { "name": "msgHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageCancellationDelay", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "programHash", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerOperator", - "inputs": [ - { "name": "newOperator", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sendMessageToL2", - "inputs": [ - { "name": "toAddress", "type": "uint256", "internalType": "uint256" }, - { "name": "selector", "type": "uint256", "internalType": "uint256" }, - { "name": "payload", "type": "uint256[]", "internalType": "uint256[]" } - ], - "outputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" }, - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "setConfigHash", - "inputs": [ - { - "name": "newConfigHash", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMessageCancellationDelay", - "inputs": [ - { - "name": "delayInSeconds", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setProgramHash", - "inputs": [ - { - "name": "newProgramHash", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "starknetAcceptGovernance", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "starknetCancelNomination", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "starknetIsGovernor", - "inputs": [ - { "name": "user", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "starknetNominateNewGovernor", - "inputs": [ - { "name": "newGovernor", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "starknetRemoveGovernor", - "inputs": [ - { - "name": "governorForRemoval", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startL1ToL2MessageCancellation", - "inputs": [ - { "name": "toAddress", "type": "uint256", "internalType": "uint256" }, - { "name": "selector", "type": "uint256", "internalType": "uint256" }, - { "name": "payload", "type": "uint256[]", "internalType": "uint256[]" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "stateBlockHash", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "stateBlockNumber", - "inputs": [], - "outputs": [{ "name": "", "type": "int256", "internalType": "int256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "stateRoot", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "unregisterOperator", - "inputs": [ - { - "name": "removedOperator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateState", - "inputs": [ - { - "name": "programOutput", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "onchainDataHash", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "onchainDataSize", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateStateKzgDA", - "inputs": [ - { - "name": "programOutput", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { "name": "kzgProof", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "ConfigHashChanged", - "inputs": [ - { - "name": "changedBy", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "oldConfigHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "newConfigHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ConsumedMessageToL1", - "inputs": [ - { - "name": "fromAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ConsumedMessageToL2", - "inputs": [ - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "toAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "selector", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { "type": "event", "name": "Finalized", "inputs": [], "anonymous": false }, - { - "type": "event", - "name": "LogMessageToL1", - "inputs": [ - { - "name": "fromAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogMessageToL2", - "inputs": [ - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "toAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "selector", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "fee", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogNewGovernorAccepted", - "inputs": [ - { - "name": "acceptedGovernor", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogNominatedGovernor", - "inputs": [ - { - "name": "nominatedGovernor", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogNominationCancelled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "LogOperatorAdded", - "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogOperatorRemoved", - "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogRemovedGovernor", - "inputs": [ - { - "name": "removedGovernor", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogStateTransitionFact", - "inputs": [ - { - "name": "stateTransitionFact", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogStateUpdate", - "inputs": [ - { - "name": "globalRoot", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "blockNumber", - "type": "int256", - "indexed": false, - "internalType": "int256" - }, - { - "name": "blockHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MessageToL2Canceled", - "inputs": [ - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "toAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "selector", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MessageToL2CancellationStarted", - "inputs": [ - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "toAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "selector", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ProgramHashChanged", - "inputs": [ - { - "name": "changedBy", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "oldProgramHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "newProgramHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60a0604052348015600e575f80fd5b503060805260805161366261002b5f395f610a0901526136625ff3fe6080604052600436106101e6575f3560e01c80637a98660b1161010857806396115bc21161009d578063c99d397f1161006d578063c99d397f14610507578063e1f1176d14610526578063e37fec251461053a578063e87e73321461054e578063eeb728661461056d575f80fd5b806396115bc21461048b5780639be446bf146104aa578063a46efaf3146104c9578063b72d42a1146104e8575f80fd5b80638d4e4083116100d85780638d4e40831461043057806391a66a2614610444578063946be3ed146104635780639588eca214610477575f80fd5b80637a98660b146103ca5780638303bd8a146103e957806384f921cd146103fd5780638a9bf0901461041c575f80fd5b80633e3aa6c51161017e5780636170ff1b1161014e5780636170ff1b1461034e5780636d70f7ae1461036d578063775526411461038c57806377c7d7a9146103ab575f80fd5b80633e3aa6c5146102d9578063439fab91146103015780634bb278f31461032057806354eccba414610334575f80fd5b806335befa5d116101b957806335befa5d146102715780633682a45014610285578063382d83e3146102a65780633d07b336146102ba575f80fd5b8063018cccdf146101ea57806301a01590146102115780632c9dd5c01461024057806333eeb1471461025f575b5f80fd5b3480156101f5575f80fd5b506101fe6105b8565b6040519081526020015b60405180910390f35b34801561021c575f80fd5b5061023061022b366004612e08565b6105fc565b6040519015158152602001610208565b34801561024b575f80fd5b506101fe61025a366004612e6b565b61060c565b34801561026a575f80fd5b505f610230565b34801561027c575f80fd5b506101fe610724565b348015610290575f80fd5b506102a461029f366004612e08565b610736565b005b3480156102b1575f80fd5b506101fe6107d0565b3480156102c5575f80fd5b506102a46102d4366004612eb3565b6107e2565b6102ec6102e7366004612eca565b610876565b60408051928352602083019190915201610208565b34801561030c575f80fd5b506102a461031b366004612f57565b610a06565b34801561032b575f80fd5b506102a4610bb6565b34801561033f575f80fd5b50670de0b6b3a76400006101fe565b348015610359575f80fd5b506101fe610368366004612f96565b610c4d565b348015610378575f80fd5b50610230610387366004612e08565b610e60565b348015610397575f80fd5b506102a46103a6366004612fec565b610e8a565b3480156103b6575f80fd5b506101fe6103c5366004612eb3565b611024565b3480156103d5575f80fd5b506101fe6103e4366004612f96565b61103d565b3480156103f4575f80fd5b506101fe611116565b348015610408575f80fd5b506102a4610417366004612e08565b611138565b348015610427575f80fd5b506101fe611141565b34801561043b575f80fd5b50610230611163565b34801561044f575f80fd5b506102a461045e366004612e08565b611185565b34801561046e575f80fd5b506102a461118e565b348015610482575f80fd5b506101fe611198565b348015610496575f80fd5b506102a46104a5366004612e08565b6111a7565b3480156104b5575f80fd5b506101fe6104c4366004612eb3565b611239565b3480156104d4575f80fd5b506101fe6104e3366004612eb3565b611242565b3480156104f3575f80fd5b506102a4610502366004613039565b61124b565b348015610512575f80fd5b506102a4610521366004612eb3565b611387565b348015610531575f80fd5b506101fe6113da565b348015610545575f80fd5b506102a46113fc565b348015610559575f80fd5b506102a4610568366004612eb3565b611404565b348015610578575f80fd5b50604080518082018252601981527f537461726b576172655f537461726b6e65745f323032345f3800000000000000602082015290516102089190613099565b5f6105f76040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e4345815250611498565b905090565b5f610606826114cb565b92915050565b6040515f90819061062990869033908690889082906020016130f5565b6040516020818303038152906040528051906020012090505f61064a6114f7565b5f8381526020919091526040902054116106ab5760405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000060448201526064015b60405180910390fd5b336001600160a01b0316857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b186866040516106e7929190613143565b60405180910390a360016106f96114f7565b5f8381526020019081526020015f205f8282546107169190613172565b909155509095945050505050565b5f61072d611519565b60010154905090565b61073f336114cb565b61075b5760405162461bcd60e51b81526004016106a290613185565b61076481610e60565b6107cd576001610772611562565b6001600160a01b0383165f8181526020928352604090819020805460ff19169415159490941790935591519182527f50a18c352ee1c02ffe058e15c2eb6e58be387c81e73cc1e17035286e54c19a5791015b60405180910390a15b50565b5f6107d9611519565b60020154905090565b6107ea611163565b156108075760405162461bcd60e51b81526004016106a2906131ae565b610810336114cb565b61082c5760405162461bcd60e51b81526004016106a290613185565b337f393c6beb5756a944b2967f15f31ff671e312e945d7a84fd3bdcfd6b408b2dc796108566113da565b60408051918252602082018590520160405180910390a26107cd81611584565b5f805f34116108d15760405162461bcd60e51b815260206004820152602160248201527f4c315f4d53475f4645455f4d5553545f42455f475245415445525f5448414e5f6044820152600360fc1b60648201526084016106a2565b670de0b6b3a76400003411156109295760405162461bcd60e51b815260206004820152601760248201527f4d41585f4c315f4d53475f4645455f455843454544454400000000000000000060448201526064016106a2565b5f6109326105b8565b905061097f6040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525082600161097a91906131d1565b6115a2565b8587336001600160a01b03167fdb80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b888886346040516109c094939291906131e4565b60405180910390a45f6109d688888888866115d4565b90506109e33460016131d1565b6109eb611614565b5f838152602091909152604090205597909650945050505050565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610a775760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016106a2565b5f610a8381602061320a565b90505f610a918260206131d1565b905080831015610ad95760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016106a2565b5f610ae682848688613221565b810190610af39190612e08565b9050365f610b038582888a613221565b91509150365f610b158887818c613221565b90925090506001600160a01b03851615610b3f57610b34858383611636565b505050505050505050565b610b4761176c565b15610b96578015610b915760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016106a2565b610b34565b610ba0828261177c565b610baa828261182b565b610b34611891565b5050565b610bbf336114cb565b610bdb5760405162461bcd60e51b81526004016106a290613185565b610be3611163565b15610c005760405162461bcd60e51b81526004016106a2906131ae565b610c236040518060600160405280603181526020016135fc6031913960016115a2565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b17681905f90a1565b5f8486336001600160a01b03167f8abd2ec2e0a10c82f5b60ea00455fa96c41fd144f225fcc52b8d83d94f803ed8878787604051610c8d93929190613248565b60405180910390a45f610ca387878787876115d4565b90505f610cae611614565b5f83815260209190915260408120549150819003610d055760405162461bcd60e51b81526020600482015260146024820152731393d7d35154d4d051d157d513d7d0d05390d15360621b60448201526064016106a2565b5f610d0e61190d565b5f84815260209190915260408120549150819003610d795760405162461bcd60e51b815260206004820152602260248201527f4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f52455155455354604482015261115160f21b60648201526084016106a2565b5f610d82611116565b610d8c90836131d1565b905081811015610dde5760405162461bcd60e51b815260206004820152601c60248201527f43414e43454c5f414c4c4f5745445f54494d455f4f564552464c4f570000000060448201526064016106a2565b80421015610e3a5760405162461bcd60e51b8152602060048201526024808201527f4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f414c4c4f57454460448201526317d6515560e21b60648201526084016106a2565b5f610e43611614565b5f8681526020919091526040902055509198975050505050505050565b5f610e69611562565b6001600160a01b039092165f90815260209290925250604090205460ff1690565b610e9333610e60565b610ecf5760405162461bcd60e51b815260206004820152600d60248201526c27a7262cafa7a822a920aa27a960991b60448201526064016106a2565b5f610ed8611519565b60010154905060068411610f2a5760405162461bcd60e51b815260206004820152601960248201527814d5105492d3915517d3d55514155517d513d3d7d4d213d495603a1b60448201526064016106a2565b84846005818110610f3d57610f3d61326b565b905060200201355f14610f8b5760405162461bcd60e51b8152602060048201526016602482015275554e45585045435445445f4b5a475f44415f464c414760501b60448201526064016106a2565b5f610fab868660405180604001604052808881526020018781525061192f565b9050610fb88686836119a4565b610fc382600161327f565b610fcb611519565b600101541461101c5760405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f46494e414c5f424c4f434b5f4e554d42455200000000000060448201526064016106a2565b505050505050565b5f61102d611614565b5f92835260205250604090205490565b5f8486336001600160a01b03167f2e00dccd686fd6823ec7dc3e125582aa82881b6ff5f6b5a73856e1ea8338a3be87878760405161107d93929190613248565b60405180910390a45f61109387878787876115d4565b90505f61109e611614565b5f83815260209190915260409020549050806110f35760405162461bcd60e51b81526020600482015260146024820152731393d7d35154d4d051d157d513d7d0d05390d15360621b60448201526064016106a2565b426110fc61190d565b5f8481526020919091526040902055509695505050505050565b5f6105f76040518060600160405280602d8152602001613565602d9139611498565b6107cd81611c67565b5f6105f760405180606001604052806023815260200161354260239139611498565b5f6105f76040518060600160405280603181526020016135fc60319139611498565b6107cd81611d80565b611196611ee8565b565b5f6111a1611519565b54919050565b6111b0336114cb565b6111cc5760405162461bcd60e51b81526004016106a290613185565b6111d581610e60565b156107cd575f6111e3611562565b6001600160a01b0383165f8181526020928352604090819020805460ff19169415159490941790935591519182527fec5f6c3a91a1efb1f9a308bb33c6e9e66bf9090fad0732f127dfdbf516d0625d91016107c4565b5f61102d61190d565b5f61102d6114f7565b61125433610e60565b6112905760405162461bcd60e51b815260206004820152600d60248201526c27a7262cafa7a822a920aa27a960991b60448201526064016106a2565b5f611299611519565b6001015490506112ab600560066131d1565b84116112f55760405162461bcd60e51b815260206004820152601960248201527814d5105492d3915517d3d55514155517d513d3d7d4d213d495603a1b60448201526064016106a2565b848460058181106113085761130861326b565b905060200201356001146113575760405162461bcd60e51b8152602060048201526016602482015275554e45585045435445445f4b5a475f44415f464c414760501b60448201526064016106a2565b61137c61136785600681896132a6565b611375916005915f916132a6565b8585611f6c565b5f610fab86866123f8565b61138f611163565b156113ac5760405162461bcd60e51b81526004016106a2906131ae565b6113b5336114cb565b6113d15760405162461bcd60e51b81526004016106a290613185565b6107cd8161242a565b5f6105f760405180606001604052806021815260200161359260219139611498565b61119661244c565b61140c611163565b156114295760405162461bcd60e51b81526004016106a2906131ae565b611432336114cb565b61144e5760405162461bcd60e51b81526004016106a290613185565b337f600a61c1b32ac42fb2fe76e8fc7582a98106668fc16dcd85567cd3937363e49b611478611141565b60408051918252602082018590520160405180910390a26107cd816124cd565b5f80826040516020016114ab91906132e8565b60408051601f198184030181529190528051602090910120549392505050565b5f806114d56124ef565b6001600160a01b039093165f9081526020939093525050604090205460ff1690565b5f6105f76040518060600160405280602381526020016135b360239139612537565b5f8060405180606001604052806027815260200161351b6027913960405160200161154491906132e8565b60408051601f19818403018152919052805160209091012092915050565b5f6105f76040518060600160405280602881526020016134c360289139612537565b6107cd60405180606001604052806021815260200161359260219139825b5f826040516020016115b491906132e8565b604051602081830303815290604052805190602001209050818155505050565b6040515f906115f390339088908590899088908a9082906020016132f3565b60405160208183030381529060405280519060200120905095945050505050565b5f6105f76040518060600160405280602681526020016135d660269139612537565b6001600160a01b0383163b6116825760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016106a2565b5f80846001600160a01b031663439fab9160e01b85856040516024016116a992919061332a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516116e791906132e8565b5f60405180830381855af49150503d805f811461171f576040519150601f19603f3d011682016040523d82523d5f602084013e611724565b606091505b50915091508181906117495760405162461bcd60e51b81526004016106a29190613099565b50805181901561101c5760405162461bcd60e51b81526004016106a29190613099565b5f611775611141565b1515919050565b60c081146117c55760405162461bcd60e51b8152602060048201526016602482015275494c4c4547414c5f494e49545f444154415f53495a4560501b60448201526064016106a2565b5f6117d36020828486613221565b8101906117e09190612eb3565b9050805f036118265760405162461bcd60e51b81526020600482015260126024820152712120a22fa4a724aa24a0a624ad20aa24a7a760711b60448201526064016106a2565b505050565b5f80808061183b85870187613358565b935093509350935061184c846124cd565b61185583612569565b61187c81611861611519565b90805182556020810151600183015560400151600290910155565b61188582611584565b61101c6206978061242a565b5f61189a6124ef565b6001810154909150600160a01b900460ff16156118ef5760405162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b60448201526064016106a2565b60018101805460ff60a01b1916600160a01b1790556107cd3361258b565b5f6105f76040518060600160405280603081526020016134eb60309139612537565b5f828161193c86836123f8565b90505f8183865f015187602001518661195591906131d1565b6040805160208101959095528401929092526060830152608082015260a00160408051601f19818403018152919052805160209091012090506119998160016131d1565b979650505050505050565b6119ac6113da565b838360048181106119bf576119bf61326b565b9050602002013514611a095760405162461bcd60e51b81526020600482015260136024820152720929cac82989288be869e9c8c928ebe9082a69606b1b60448201526064016106a2565b5f611a12611141565b6040805160208101929092528101839052606001604051602081830303815290604052805190602001209050611a46612631565b6001600160a01b0316636a938567826040518263ffffffff1660e01b8152600401611a7391815260200190565b602060405180830381865afa158015611a8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ab291906133f6565b611afe5760405162461bcd60e51b815260206004820152601960248201527f4e4f5f53544154455f5452414e534954494f4e5f50524f4f460000000000000060448201526064016106a2565b6040518281527f9866f8ddfe70bb512b2f2b28b49d4017c43f7ba775f1a20c61c13eea8cdac1119060200160405180910390a1611b458484611b3e611519565b9190612653565b5f611b6885856005818110611b5c57611b5c61326b565b90506020020135612765565b9050611b886001611b7b8684818a6132a6565b611b836114f7565b612782565b611b9290826131d1565b9050611bac5f611ba48684818a6132a6565b611b83611614565b611bb690826131d1565b9050838114611c075760405162461bcd60e51b815260206004820152601860248201527f535441524b4e45545f4f55545055545f544f4f5f4c4f4e47000000000000000060448201526064016106a2565b5f611c10611519565b805460018201546002830154604080519384526020840192909252908201529091507fd342ddf7a308dec111745b00315c14b7efb2bdae570a6856e088ed0c65a3576c9060600160405180910390a1505050505050565b611c70336114cb565b611c8c5760405162461bcd60e51b81526004016106a290613185565b6001600160a01b0381163303611cdb5760405162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b60448201526064016106a2565b5f611ce46124ef565b9050611cef826114cb565b611d2a5760405162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b60448201526064016106a2565b6001600160a01b0382165f8181526020838152604091829020805460ff1916905590519182527fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a2959991015b60405180910390a15050565b611d89336114cb565b611da55760405162461bcd60e51b81526004016106a290613185565b5f611dae6124ef565b90506001600160a01b038216611df45760405162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b60448201526064016106a2565b611dfd826114cb565b15611e3d5760405162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b60448201526064016106a2565b60018101546001600160a01b031615611e985760405162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e4700000000000000000060448201526064016106a2565b6001810180546001600160a01b0319166001600160a01b0384169081179091556040519081527f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a690602001611d74565b5f611ef16124ef565b60018101549091506001600160a01b03163314611f505760405162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f5200000000000000000060448201526064016106a2565b611f593361258b565b60010180546001600160a01b0319169055565b60058314611fbc5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f4b5a475f5345474d454e545f53495a45000000000000000060448201526064016106a2565b603081146120055760405162461bcd60e51b8152602060048201526016602482015275494e56414c49445f4b5a475f50524f4f465f53495a4560501b60448201526064016106a2565b5f8049906001600160f81b03199082901a60f81b16600160f81b1461206c5760405162461bcd60e51b815260206004820152601c60248201527f554e45585045435445445f424c4f425f484153485f56455253494f4e0000000060448201526064016106a2565b60605f8087875f8181106120825761208261326b565b9050602002013590505f8888600181811061209f5761209f61326b565b9050602002013590505f898960038181106120bc576120bc61326b565b9050602002013590505f8a8a60048181106120d9576120d961326b565b9050602002013590506001600160c01b0380168411156121345760405162461bcd60e51b81526020600482015260166024820152751253959053125117d2d691d7d0d3d35352551351539560521b60448201526064016106a2565b6001600160c01b038311156121845760405162461bcd60e51b81526020600482015260166024820152751253959053125117d2d691d7d0d3d35352551351539560521b60448201526064016106a2565b6001600160801b038211156121cd5760405162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f595f56414c554560881b60448201526064016106a2565b6001600160801b038111156122165760405162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f595f56414c554560881b60448201526064016106a2565b6040805167ffffffffffffffff1985831b8116602083015286831b166038820152815180820360300181526050909101909152955061225982608083901b6131d1565b5f1b9450505050505f878760028181106122755761227561326b565b905060200201355f1b90505f80600a6001600160a01b0316868486888c8c6040516020016122a896959493929190613415565b60408051601f19818403018152908290526122c2916132e8565b5f60405180830381855afa9150503d805f81146122fa576040519150601f19603f3d011682016040523d82523d5f602084013e6122ff565b606091505b5091509150816123615760405162461bcd60e51b815260206004820152602760248201527f504f494e545f4556414c554154494f4e5f505245434f4d50494c455f43414c4c60448201526617d1905253115160ca1b60648201526084016106a2565b805160208201207fb2157d3a40131b14c4c675335465dffde802f0ce5218ad012284d7f275d1b37c146123ec5760405162461bcd60e51b815260206004820152602d60248201527f554e45585045435445445f504f494e545f4556414c554154494f4e5f5052454360448201526c13d35412531157d3d555141555609a1b60648201526084016106a2565b50505050505050505050565b5f828260405160200161240c929190613448565b60405160208183030381529060405280519060200120905092915050565b6107cd6040518060600160405280602d8152602001613565602d9139826115a2565b612455336114cb565b6124715760405162461bcd60e51b81526004016106a290613185565b5f61247a6124ef565b60018101549091506001600160a01b0316156107cd576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f5905f90a150565b6107cd60405180606001604052806023815260200161354260239139826115a2565b5f806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f0000000081525060405160200161154491906132e8565b5f808260405160200161254a91906132e8565b60408051601f1981840301815291905280516020909101209392505050565b6107cd6040518060600160405280602281526020016134a16022913982612d3d565b612594816114cb565b156125d45760405162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b60448201526064016106a2565b5f6125dd6124ef565b6001600160a01b0383165f8181526020838152604091829020805460ff1916600117905590519182529192507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29101611d74565b5f6105f76040518060600160405280602281526020016134a160229139611498565b6001836001015f828254612667919061327f565b909155508290508160028181106126805761268061326b565b905060200201358360010154146126d05760405162461bcd60e51b815260206004820152601460248201527324a72b20a624a22fa12627a1a5afa72aa6a122a960611b60448201526064016106a2565b818160038181106126e3576126e361326b565b6020029190910135600285015550365f6126fd8484612d95565b9150915061270b8282612dbe565b8554146127525760405162461bcd60e51b81526020600482015260156024820152741253959053125117d41491559253d554d7d493d3d5605a1b60448201526064016106a2565b61275c8282612de0565b90945550505050565b5f81600114612774575f612777565b60055b6106069060066131d1565b5f8084845f8181106127965761279661326b565b905060200201359050634000000081106127f25760405162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4d4553534147455f5345474d454e545f53495a450000000060448201526064016106a2565b60015f6127ff83836131d1565b90505f8861280e576004612811565b60025b90505f5b82841015612c4d575f61282883866131d1565b905088811061286d5760405162461bcd60e51b8152602060048201526011602482015270135154d4d051d157d513d3d7d4d213d495607a1b60448201526064016106a2565b5f8a8a838181106128805761288061326b565b905060200201359050634000000081106128d55760405162461bcd60e51b81526020600482015260166024820152750929cac82989288bea082b2989e8288be988a9c8ea8960531b60448201526064016106a2565b5f816128e28460016131d1565b6128ec91906131d1565b90508a81111561293e5760405162461bcd60e51b815260206004820152601960248201527f5452554e43415445445f4d4553534147455f5041594c4f41440000000000000060448201526064016106a2565b8c15612a4e575f8c8c89908492612957939291906132a6565b604051602001612968929190613448565b6040516020818303038152906040528051906020012090508c8c60018a61298f91906131d1565b81811061299e5761299e61326b565b905060200201356001600160a01b03168d8d5f8b6129bc91906131d1565b8181106129cb576129cb61326b565b905060200201357f4264ac208b5fde633ccdd42e0f12c3d6d443a4f3779bbf886925b94665b63a228f8f60038d612a0291906131d1565b612a0e928892906132a6565b604051612a1c929190613143565b60405180910390a35f81815260208c905260408120805460019290612a429084906131d1565b90915550612c43915050565b5f8c8c89908492612a61939291906132a6565b604051602001612a72929190613448565b60408051601f1981840301815291815281516020928301205f818152928e905291205490915080612ae55760405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000060448201526064016106a2565b612af0600182613172565b612afa90876131d1565b5f92835260208d90526040832083905595508d90508c612b1b60028b6131d1565b818110612b2a57612b2a61326b565b9050602002013590505f8d8d60058b612b4391906131d1565b612b4f928692906132a6565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505090508d8d60038b612b9f91906131d1565b818110612bae57612bae61326b565b905060200201358e8e60018c612bc491906131d1565b818110612bd357612bd361326b565b905060200201358f8f5f8d612be891906131d1565b818110612bf757612bf761326b565b905060200201356001600160a01b03167f9592d37825c744e33fa80c469683bbd04d336241bb600b574758efd182abe26a8486604051612c38929190613454565b60405180910390a450505b9550612815915050565b828414612c9c5760405162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4d4553534147455f5345474d454e545f53495a450000000060448201526064016106a2565b8015612d2f576040515f90339083908381818185875af1925050503d805f8114612ce1576040519150601f19603f3d011682016040523d82523d5f602084013e612ce6565b606091505b5050905080612d2d5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b60448201526064016106a2565b505b509198975050505050505050565b5f612d4783611498565b6001600160a01b031614612d8b5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016106a2565b610bb282826115a2565b365f838184612da58260026131d1565b92612db2939291906132a6565b915091505b9250929050565b5f82825f818110612dd157612dd161326b565b90506020020135905092915050565b5f82826001818110612dd157612dd161326b565b6001600160a01b03811681146107cd575f80fd5b5f60208284031215612e18575f80fd5b8135612e2381612df4565b9392505050565b5f8083601f840112612e3a575f80fd5b50813567ffffffffffffffff811115612e51575f80fd5b6020830191508360208260051b8501011115612db7575f80fd5b5f805f60408486031215612e7d575f80fd5b83359250602084013567ffffffffffffffff811115612e9a575f80fd5b612ea686828701612e2a565b9497909650939450505050565b5f60208284031215612ec3575f80fd5b5035919050565b5f805f8060608587031215612edd575f80fd5b8435935060208501359250604085013567ffffffffffffffff811115612f01575f80fd5b612f0d87828801612e2a565b95989497509550505050565b5f8083601f840112612f29575f80fd5b50813567ffffffffffffffff811115612f40575f80fd5b602083019150836020828501011115612db7575f80fd5b5f8060208385031215612f68575f80fd5b823567ffffffffffffffff811115612f7e575f80fd5b612f8a85828601612f19565b90969095509350505050565b5f805f805f60808688031215612faa575f80fd5b8535945060208601359350604086013567ffffffffffffffff811115612fce575f80fd5b612fda88828901612e2a565b96999598509660600135949350505050565b5f805f8060608587031215612fff575f80fd5b843567ffffffffffffffff811115613015575f80fd5b61302187828801612e2a565b90989097506020870135966040013595509350505050565b5f805f806040858703121561304c575f80fd5b843567ffffffffffffffff811115613062575f80fd5b61306e87828801612e2a565b909550935050602085013567ffffffffffffffff81111561308d575f80fd5b612f0d87828801612f19565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6001600160fb1b038311156130e2575f80fd5b8260051b80838637939093019392505050565b8581528460208201528360408201525f6119996060830184866130ce565b8183525f6001600160fb1b0383111561312a575f80fd5b8260051b80836020870137939093016020019392505050565b602081525f613156602083018486613113565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106065761060661315e565b6020808252600f908201526e4f4e4c595f474f5645524e414e434560881b604082015260600190565b60208082526009908201526811925390531256915160ba1b604082015260600190565b808201808211156106065761060661315e565b606081525f6131f7606083018688613113565b6020830194909452506040015292915050565b80820281158282048414176106065761060661315e565b5f808585111561322f575f80fd5b8386111561323b575f80fd5b5050820193919092039150565b604081525f61325b604083018587613113565b9050826020830152949350505050565b634e487b7160e01b5f52603260045260245ffd5b8082018281125f83128015821682158216171561329e5761329e61315e565b505092915050565b5f80858511156132b4575f80fd5b838611156132c0575f80fd5b5050600583901b0193919092039150565b5f81518060208401855e5f93019283525090919050565b5f612e2382846132d1565b8781528660208201528560408201528460608201528360808201525f61331d60a0830184866130ce565b9998505050505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f805f8084860360c081121561336c575f80fd5b85359450602086013561337e81612df4565b9350604086013592506060605f1982011215613398575f80fd5b506040516060810181811067ffffffffffffffff821117156133c857634e487b7160e01b5f52604160045260245ffd5b6040908152606087013582526080870135602083015260a09096013595810195909552509194909350909190565b5f60208284031215613406575f80fd5b81518015158114612e23575f80fd5b8681528560208201528460408201525f61343260608301866132d1565b838582375f930192835250909695505050505050565b5f6131568284866130ce565b604080825283519082018190525f9060208501906060840190835b8181101561348d57835183526020938401939092019160010161346f565b505060209390930193909352509291505056fe535441524b4e45545f312e305f494e49545f56455249464945525f41444452455353535441524b4e45545f312e305f524f4c45535f4f50455241544f52535f4d415050494e475f544147535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f4d41505050494e47535441524b4e45545f312e305f494e49545f535441524b4e45545f53544154455f535452554354535441524b4e45545f312e305f494e49545f50524f4752414d5f484153485f55494e54535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f44454c4159535441524b4e45545f312e305f535441524b4e45545f434f4e4649475f48415348535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e475f5632535441524b574152455f434f4e5452414354535f474f564552454e45445f46494e414c495a41424c455f312e305f544147a26469706673582212200f4256bd864f0f652a126e0e7e6301c59d516d81038b47d56e99f564ee7d47b164736f6c634300081a0033", - "sourceMap": "618:13607:16:-:0;;;;;;;;;;;;-1:-1:-1;490:4:4;474:21;;618:13607:16;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106101e6575f3560e01c80637a98660b1161010857806396115bc21161009d578063c99d397f1161006d578063c99d397f14610507578063e1f1176d14610526578063e37fec251461053a578063e87e73321461054e578063eeb728661461056d575f80fd5b806396115bc21461048b5780639be446bf146104aa578063a46efaf3146104c9578063b72d42a1146104e8575f80fd5b80638d4e4083116100d85780638d4e40831461043057806391a66a2614610444578063946be3ed146104635780639588eca214610477575f80fd5b80637a98660b146103ca5780638303bd8a146103e957806384f921cd146103fd5780638a9bf0901461041c575f80fd5b80633e3aa6c51161017e5780636170ff1b1161014e5780636170ff1b1461034e5780636d70f7ae1461036d578063775526411461038c57806377c7d7a9146103ab575f80fd5b80633e3aa6c5146102d9578063439fab91146103015780634bb278f31461032057806354eccba414610334575f80fd5b806335befa5d116101b957806335befa5d146102715780633682a45014610285578063382d83e3146102a65780633d07b336146102ba575f80fd5b8063018cccdf146101ea57806301a01590146102115780632c9dd5c01461024057806333eeb1471461025f575b5f80fd5b3480156101f5575f80fd5b506101fe6105b8565b6040519081526020015b60405180910390f35b34801561021c575f80fd5b5061023061022b366004612e08565b6105fc565b6040519015158152602001610208565b34801561024b575f80fd5b506101fe61025a366004612e6b565b61060c565b34801561026a575f80fd5b505f610230565b34801561027c575f80fd5b506101fe610724565b348015610290575f80fd5b506102a461029f366004612e08565b610736565b005b3480156102b1575f80fd5b506101fe6107d0565b3480156102c5575f80fd5b506102a46102d4366004612eb3565b6107e2565b6102ec6102e7366004612eca565b610876565b60408051928352602083019190915201610208565b34801561030c575f80fd5b506102a461031b366004612f57565b610a06565b34801561032b575f80fd5b506102a4610bb6565b34801561033f575f80fd5b50670de0b6b3a76400006101fe565b348015610359575f80fd5b506101fe610368366004612f96565b610c4d565b348015610378575f80fd5b50610230610387366004612e08565b610e60565b348015610397575f80fd5b506102a46103a6366004612fec565b610e8a565b3480156103b6575f80fd5b506101fe6103c5366004612eb3565b611024565b3480156103d5575f80fd5b506101fe6103e4366004612f96565b61103d565b3480156103f4575f80fd5b506101fe611116565b348015610408575f80fd5b506102a4610417366004612e08565b611138565b348015610427575f80fd5b506101fe611141565b34801561043b575f80fd5b50610230611163565b34801561044f575f80fd5b506102a461045e366004612e08565b611185565b34801561046e575f80fd5b506102a461118e565b348015610482575f80fd5b506101fe611198565b348015610496575f80fd5b506102a46104a5366004612e08565b6111a7565b3480156104b5575f80fd5b506101fe6104c4366004612eb3565b611239565b3480156104d4575f80fd5b506101fe6104e3366004612eb3565b611242565b3480156104f3575f80fd5b506102a4610502366004613039565b61124b565b348015610512575f80fd5b506102a4610521366004612eb3565b611387565b348015610531575f80fd5b506101fe6113da565b348015610545575f80fd5b506102a46113fc565b348015610559575f80fd5b506102a4610568366004612eb3565b611404565b348015610578575f80fd5b50604080518082018252601981527f537461726b576172655f537461726b6e65745f323032345f3800000000000000602082015290516102089190613099565b5f6105f76040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e4345815250611498565b905090565b5f610606826114cb565b92915050565b6040515f90819061062990869033908690889082906020016130f5565b6040516020818303038152906040528051906020012090505f61064a6114f7565b5f8381526020919091526040902054116106ab5760405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000060448201526064015b60405180910390fd5b336001600160a01b0316857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b186866040516106e7929190613143565b60405180910390a360016106f96114f7565b5f8381526020019081526020015f205f8282546107169190613172565b909155509095945050505050565b5f61072d611519565b60010154905090565b61073f336114cb565b61075b5760405162461bcd60e51b81526004016106a290613185565b61076481610e60565b6107cd576001610772611562565b6001600160a01b0383165f8181526020928352604090819020805460ff19169415159490941790935591519182527f50a18c352ee1c02ffe058e15c2eb6e58be387c81e73cc1e17035286e54c19a5791015b60405180910390a15b50565b5f6107d9611519565b60020154905090565b6107ea611163565b156108075760405162461bcd60e51b81526004016106a2906131ae565b610810336114cb565b61082c5760405162461bcd60e51b81526004016106a290613185565b337f393c6beb5756a944b2967f15f31ff671e312e945d7a84fd3bdcfd6b408b2dc796108566113da565b60408051918252602082018590520160405180910390a26107cd81611584565b5f805f34116108d15760405162461bcd60e51b815260206004820152602160248201527f4c315f4d53475f4645455f4d5553545f42455f475245415445525f5448414e5f6044820152600360fc1b60648201526084016106a2565b670de0b6b3a76400003411156109295760405162461bcd60e51b815260206004820152601760248201527f4d41585f4c315f4d53475f4645455f455843454544454400000000000000000060448201526064016106a2565b5f6109326105b8565b905061097f6040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525082600161097a91906131d1565b6115a2565b8587336001600160a01b03167fdb80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b888886346040516109c094939291906131e4565b60405180910390a45f6109d688888888866115d4565b90506109e33460016131d1565b6109eb611614565b5f838152602091909152604090205597909650945050505050565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610a775760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016106a2565b5f610a8381602061320a565b90505f610a918260206131d1565b905080831015610ad95760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016106a2565b5f610ae682848688613221565b810190610af39190612e08565b9050365f610b038582888a613221565b91509150365f610b158887818c613221565b90925090506001600160a01b03851615610b3f57610b34858383611636565b505050505050505050565b610b4761176c565b15610b96578015610b915760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016106a2565b610b34565b610ba0828261177c565b610baa828261182b565b610b34611891565b5050565b610bbf336114cb565b610bdb5760405162461bcd60e51b81526004016106a290613185565b610be3611163565b15610c005760405162461bcd60e51b81526004016106a2906131ae565b610c236040518060600160405280603181526020016135fc6031913960016115a2565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b17681905f90a1565b5f8486336001600160a01b03167f8abd2ec2e0a10c82f5b60ea00455fa96c41fd144f225fcc52b8d83d94f803ed8878787604051610c8d93929190613248565b60405180910390a45f610ca387878787876115d4565b90505f610cae611614565b5f83815260209190915260408120549150819003610d055760405162461bcd60e51b81526020600482015260146024820152731393d7d35154d4d051d157d513d7d0d05390d15360621b60448201526064016106a2565b5f610d0e61190d565b5f84815260209190915260408120549150819003610d795760405162461bcd60e51b815260206004820152602260248201527f4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f52455155455354604482015261115160f21b60648201526084016106a2565b5f610d82611116565b610d8c90836131d1565b905081811015610dde5760405162461bcd60e51b815260206004820152601c60248201527f43414e43454c5f414c4c4f5745445f54494d455f4f564552464c4f570000000060448201526064016106a2565b80421015610e3a5760405162461bcd60e51b8152602060048201526024808201527f4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f414c4c4f57454460448201526317d6515560e21b60648201526084016106a2565b5f610e43611614565b5f8681526020919091526040902055509198975050505050505050565b5f610e69611562565b6001600160a01b039092165f90815260209290925250604090205460ff1690565b610e9333610e60565b610ecf5760405162461bcd60e51b815260206004820152600d60248201526c27a7262cafa7a822a920aa27a960991b60448201526064016106a2565b5f610ed8611519565b60010154905060068411610f2a5760405162461bcd60e51b815260206004820152601960248201527814d5105492d3915517d3d55514155517d513d3d7d4d213d495603a1b60448201526064016106a2565b84846005818110610f3d57610f3d61326b565b905060200201355f14610f8b5760405162461bcd60e51b8152602060048201526016602482015275554e45585045435445445f4b5a475f44415f464c414760501b60448201526064016106a2565b5f610fab868660405180604001604052808881526020018781525061192f565b9050610fb88686836119a4565b610fc382600161327f565b610fcb611519565b600101541461101c5760405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f46494e414c5f424c4f434b5f4e554d42455200000000000060448201526064016106a2565b505050505050565b5f61102d611614565b5f92835260205250604090205490565b5f8486336001600160a01b03167f2e00dccd686fd6823ec7dc3e125582aa82881b6ff5f6b5a73856e1ea8338a3be87878760405161107d93929190613248565b60405180910390a45f61109387878787876115d4565b90505f61109e611614565b5f83815260209190915260409020549050806110f35760405162461bcd60e51b81526020600482015260146024820152731393d7d35154d4d051d157d513d7d0d05390d15360621b60448201526064016106a2565b426110fc61190d565b5f8481526020919091526040902055509695505050505050565b5f6105f76040518060600160405280602d8152602001613565602d9139611498565b6107cd81611c67565b5f6105f760405180606001604052806023815260200161354260239139611498565b5f6105f76040518060600160405280603181526020016135fc60319139611498565b6107cd81611d80565b611196611ee8565b565b5f6111a1611519565b54919050565b6111b0336114cb565b6111cc5760405162461bcd60e51b81526004016106a290613185565b6111d581610e60565b156107cd575f6111e3611562565b6001600160a01b0383165f8181526020928352604090819020805460ff19169415159490941790935591519182527fec5f6c3a91a1efb1f9a308bb33c6e9e66bf9090fad0732f127dfdbf516d0625d91016107c4565b5f61102d61190d565b5f61102d6114f7565b61125433610e60565b6112905760405162461bcd60e51b815260206004820152600d60248201526c27a7262cafa7a822a920aa27a960991b60448201526064016106a2565b5f611299611519565b6001015490506112ab600560066131d1565b84116112f55760405162461bcd60e51b815260206004820152601960248201527814d5105492d3915517d3d55514155517d513d3d7d4d213d495603a1b60448201526064016106a2565b848460058181106113085761130861326b565b905060200201356001146113575760405162461bcd60e51b8152602060048201526016602482015275554e45585045435445445f4b5a475f44415f464c414760501b60448201526064016106a2565b61137c61136785600681896132a6565b611375916005915f916132a6565b8585611f6c565b5f610fab86866123f8565b61138f611163565b156113ac5760405162461bcd60e51b81526004016106a2906131ae565b6113b5336114cb565b6113d15760405162461bcd60e51b81526004016106a290613185565b6107cd8161242a565b5f6105f760405180606001604052806021815260200161359260219139611498565b61119661244c565b61140c611163565b156114295760405162461bcd60e51b81526004016106a2906131ae565b611432336114cb565b61144e5760405162461bcd60e51b81526004016106a290613185565b337f600a61c1b32ac42fb2fe76e8fc7582a98106668fc16dcd85567cd3937363e49b611478611141565b60408051918252602082018590520160405180910390a26107cd816124cd565b5f80826040516020016114ab91906132e8565b60408051601f198184030181529190528051602090910120549392505050565b5f806114d56124ef565b6001600160a01b039093165f9081526020939093525050604090205460ff1690565b5f6105f76040518060600160405280602381526020016135b360239139612537565b5f8060405180606001604052806027815260200161351b6027913960405160200161154491906132e8565b60408051601f19818403018152919052805160209091012092915050565b5f6105f76040518060600160405280602881526020016134c360289139612537565b6107cd60405180606001604052806021815260200161359260219139825b5f826040516020016115b491906132e8565b604051602081830303815290604052805190602001209050818155505050565b6040515f906115f390339088908590899088908a9082906020016132f3565b60405160208183030381529060405280519060200120905095945050505050565b5f6105f76040518060600160405280602681526020016135d660269139612537565b6001600160a01b0383163b6116825760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016106a2565b5f80846001600160a01b031663439fab9160e01b85856040516024016116a992919061332a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516116e791906132e8565b5f60405180830381855af49150503d805f811461171f576040519150601f19603f3d011682016040523d82523d5f602084013e611724565b606091505b50915091508181906117495760405162461bcd60e51b81526004016106a29190613099565b50805181901561101c5760405162461bcd60e51b81526004016106a29190613099565b5f611775611141565b1515919050565b60c081146117c55760405162461bcd60e51b8152602060048201526016602482015275494c4c4547414c5f494e49545f444154415f53495a4560501b60448201526064016106a2565b5f6117d36020828486613221565b8101906117e09190612eb3565b9050805f036118265760405162461bcd60e51b81526020600482015260126024820152712120a22fa4a724aa24a0a624ad20aa24a7a760711b60448201526064016106a2565b505050565b5f80808061183b85870187613358565b935093509350935061184c846124cd565b61185583612569565b61187c81611861611519565b90805182556020810151600183015560400151600290910155565b61188582611584565b61101c6206978061242a565b5f61189a6124ef565b6001810154909150600160a01b900460ff16156118ef5760405162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b60448201526064016106a2565b60018101805460ff60a01b1916600160a01b1790556107cd3361258b565b5f6105f76040518060600160405280603081526020016134eb60309139612537565b5f828161193c86836123f8565b90505f8183865f015187602001518661195591906131d1565b6040805160208101959095528401929092526060830152608082015260a00160408051601f19818403018152919052805160209091012090506119998160016131d1565b979650505050505050565b6119ac6113da565b838360048181106119bf576119bf61326b565b9050602002013514611a095760405162461bcd60e51b81526020600482015260136024820152720929cac82989288be869e9c8c928ebe9082a69606b1b60448201526064016106a2565b5f611a12611141565b6040805160208101929092528101839052606001604051602081830303815290604052805190602001209050611a46612631565b6001600160a01b0316636a938567826040518263ffffffff1660e01b8152600401611a7391815260200190565b602060405180830381865afa158015611a8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ab291906133f6565b611afe5760405162461bcd60e51b815260206004820152601960248201527f4e4f5f53544154455f5452414e534954494f4e5f50524f4f460000000000000060448201526064016106a2565b6040518281527f9866f8ddfe70bb512b2f2b28b49d4017c43f7ba775f1a20c61c13eea8cdac1119060200160405180910390a1611b458484611b3e611519565b9190612653565b5f611b6885856005818110611b5c57611b5c61326b565b90506020020135612765565b9050611b886001611b7b8684818a6132a6565b611b836114f7565b612782565b611b9290826131d1565b9050611bac5f611ba48684818a6132a6565b611b83611614565b611bb690826131d1565b9050838114611c075760405162461bcd60e51b815260206004820152601860248201527f535441524b4e45545f4f55545055545f544f4f5f4c4f4e47000000000000000060448201526064016106a2565b5f611c10611519565b805460018201546002830154604080519384526020840192909252908201529091507fd342ddf7a308dec111745b00315c14b7efb2bdae570a6856e088ed0c65a3576c9060600160405180910390a1505050505050565b611c70336114cb565b611c8c5760405162461bcd60e51b81526004016106a290613185565b6001600160a01b0381163303611cdb5760405162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b60448201526064016106a2565b5f611ce46124ef565b9050611cef826114cb565b611d2a5760405162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b60448201526064016106a2565b6001600160a01b0382165f8181526020838152604091829020805460ff1916905590519182527fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a2959991015b60405180910390a15050565b611d89336114cb565b611da55760405162461bcd60e51b81526004016106a290613185565b5f611dae6124ef565b90506001600160a01b038216611df45760405162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b60448201526064016106a2565b611dfd826114cb565b15611e3d5760405162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b60448201526064016106a2565b60018101546001600160a01b031615611e985760405162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e4700000000000000000060448201526064016106a2565b6001810180546001600160a01b0319166001600160a01b0384169081179091556040519081527f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a690602001611d74565b5f611ef16124ef565b60018101549091506001600160a01b03163314611f505760405162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f5200000000000000000060448201526064016106a2565b611f593361258b565b60010180546001600160a01b0319169055565b60058314611fbc5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f4b5a475f5345474d454e545f53495a45000000000000000060448201526064016106a2565b603081146120055760405162461bcd60e51b8152602060048201526016602482015275494e56414c49445f4b5a475f50524f4f465f53495a4560501b60448201526064016106a2565b5f8049906001600160f81b03199082901a60f81b16600160f81b1461206c5760405162461bcd60e51b815260206004820152601c60248201527f554e45585045435445445f424c4f425f484153485f56455253494f4e0000000060448201526064016106a2565b60605f8087875f8181106120825761208261326b565b9050602002013590505f8888600181811061209f5761209f61326b565b9050602002013590505f898960038181106120bc576120bc61326b565b9050602002013590505f8a8a60048181106120d9576120d961326b565b9050602002013590506001600160c01b0380168411156121345760405162461bcd60e51b81526020600482015260166024820152751253959053125117d2d691d7d0d3d35352551351539560521b60448201526064016106a2565b6001600160c01b038311156121845760405162461bcd60e51b81526020600482015260166024820152751253959053125117d2d691d7d0d3d35352551351539560521b60448201526064016106a2565b6001600160801b038211156121cd5760405162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f595f56414c554560881b60448201526064016106a2565b6001600160801b038111156122165760405162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f595f56414c554560881b60448201526064016106a2565b6040805167ffffffffffffffff1985831b8116602083015286831b166038820152815180820360300181526050909101909152955061225982608083901b6131d1565b5f1b9450505050505f878760028181106122755761227561326b565b905060200201355f1b90505f80600a6001600160a01b0316868486888c8c6040516020016122a896959493929190613415565b60408051601f19818403018152908290526122c2916132e8565b5f60405180830381855afa9150503d805f81146122fa576040519150601f19603f3d011682016040523d82523d5f602084013e6122ff565b606091505b5091509150816123615760405162461bcd60e51b815260206004820152602760248201527f504f494e545f4556414c554154494f4e5f505245434f4d50494c455f43414c4c60448201526617d1905253115160ca1b60648201526084016106a2565b805160208201207fb2157d3a40131b14c4c675335465dffde802f0ce5218ad012284d7f275d1b37c146123ec5760405162461bcd60e51b815260206004820152602d60248201527f554e45585045435445445f504f494e545f4556414c554154494f4e5f5052454360448201526c13d35412531157d3d555141555609a1b60648201526084016106a2565b50505050505050505050565b5f828260405160200161240c929190613448565b60405160208183030381529060405280519060200120905092915050565b6107cd6040518060600160405280602d8152602001613565602d9139826115a2565b612455336114cb565b6124715760405162461bcd60e51b81526004016106a290613185565b5f61247a6124ef565b60018101549091506001600160a01b0316156107cd576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f5905f90a150565b6107cd60405180606001604052806023815260200161354260239139826115a2565b5f806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f0000000081525060405160200161154491906132e8565b5f808260405160200161254a91906132e8565b60408051601f1981840301815291905280516020909101209392505050565b6107cd6040518060600160405280602281526020016134a16022913982612d3d565b612594816114cb565b156125d45760405162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b60448201526064016106a2565b5f6125dd6124ef565b6001600160a01b0383165f8181526020838152604091829020805460ff1916600117905590519182529192507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29101611d74565b5f6105f76040518060600160405280602281526020016134a160229139611498565b6001836001015f828254612667919061327f565b909155508290508160028181106126805761268061326b565b905060200201358360010154146126d05760405162461bcd60e51b815260206004820152601460248201527324a72b20a624a22fa12627a1a5afa72aa6a122a960611b60448201526064016106a2565b818160038181106126e3576126e361326b565b6020029190910135600285015550365f6126fd8484612d95565b9150915061270b8282612dbe565b8554146127525760405162461bcd60e51b81526020600482015260156024820152741253959053125117d41491559253d554d7d493d3d5605a1b60448201526064016106a2565b61275c8282612de0565b90945550505050565b5f81600114612774575f612777565b60055b6106069060066131d1565b5f8084845f8181106127965761279661326b565b905060200201359050634000000081106127f25760405162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4d4553534147455f5345474d454e545f53495a450000000060448201526064016106a2565b60015f6127ff83836131d1565b90505f8861280e576004612811565b60025b90505f5b82841015612c4d575f61282883866131d1565b905088811061286d5760405162461bcd60e51b8152602060048201526011602482015270135154d4d051d157d513d3d7d4d213d495607a1b60448201526064016106a2565b5f8a8a838181106128805761288061326b565b905060200201359050634000000081106128d55760405162461bcd60e51b81526020600482015260166024820152750929cac82989288bea082b2989e8288be988a9c8ea8960531b60448201526064016106a2565b5f816128e28460016131d1565b6128ec91906131d1565b90508a81111561293e5760405162461bcd60e51b815260206004820152601960248201527f5452554e43415445445f4d4553534147455f5041594c4f41440000000000000060448201526064016106a2565b8c15612a4e575f8c8c89908492612957939291906132a6565b604051602001612968929190613448565b6040516020818303038152906040528051906020012090508c8c60018a61298f91906131d1565b81811061299e5761299e61326b565b905060200201356001600160a01b03168d8d5f8b6129bc91906131d1565b8181106129cb576129cb61326b565b905060200201357f4264ac208b5fde633ccdd42e0f12c3d6d443a4f3779bbf886925b94665b63a228f8f60038d612a0291906131d1565b612a0e928892906132a6565b604051612a1c929190613143565b60405180910390a35f81815260208c905260408120805460019290612a429084906131d1565b90915550612c43915050565b5f8c8c89908492612a61939291906132a6565b604051602001612a72929190613448565b60408051601f1981840301815291815281516020928301205f818152928e905291205490915080612ae55760405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000060448201526064016106a2565b612af0600182613172565b612afa90876131d1565b5f92835260208d90526040832083905595508d90508c612b1b60028b6131d1565b818110612b2a57612b2a61326b565b9050602002013590505f8d8d60058b612b4391906131d1565b612b4f928692906132a6565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505090508d8d60038b612b9f91906131d1565b818110612bae57612bae61326b565b905060200201358e8e60018c612bc491906131d1565b818110612bd357612bd361326b565b905060200201358f8f5f8d612be891906131d1565b818110612bf757612bf761326b565b905060200201356001600160a01b03167f9592d37825c744e33fa80c469683bbd04d336241bb600b574758efd182abe26a8486604051612c38929190613454565b60405180910390a450505b9550612815915050565b828414612c9c5760405162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4d4553534147455f5345474d454e545f53495a450000000060448201526064016106a2565b8015612d2f576040515f90339083908381818185875af1925050503d805f8114612ce1576040519150601f19603f3d011682016040523d82523d5f602084013e612ce6565b606091505b5050905080612d2d5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b60448201526064016106a2565b505b509198975050505050505050565b5f612d4783611498565b6001600160a01b031614612d8b5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016106a2565b610bb282826115a2565b365f838184612da58260026131d1565b92612db2939291906132a6565b915091505b9250929050565b5f82825f818110612dd157612dd161326b565b90506020020135905092915050565b5f82826001818110612dd157612dd161326b565b6001600160a01b03811681146107cd575f80fd5b5f60208284031215612e18575f80fd5b8135612e2381612df4565b9392505050565b5f8083601f840112612e3a575f80fd5b50813567ffffffffffffffff811115612e51575f80fd5b6020830191508360208260051b8501011115612db7575f80fd5b5f805f60408486031215612e7d575f80fd5b83359250602084013567ffffffffffffffff811115612e9a575f80fd5b612ea686828701612e2a565b9497909650939450505050565b5f60208284031215612ec3575f80fd5b5035919050565b5f805f8060608587031215612edd575f80fd5b8435935060208501359250604085013567ffffffffffffffff811115612f01575f80fd5b612f0d87828801612e2a565b95989497509550505050565b5f8083601f840112612f29575f80fd5b50813567ffffffffffffffff811115612f40575f80fd5b602083019150836020828501011115612db7575f80fd5b5f8060208385031215612f68575f80fd5b823567ffffffffffffffff811115612f7e575f80fd5b612f8a85828601612f19565b90969095509350505050565b5f805f805f60808688031215612faa575f80fd5b8535945060208601359350604086013567ffffffffffffffff811115612fce575f80fd5b612fda88828901612e2a565b96999598509660600135949350505050565b5f805f8060608587031215612fff575f80fd5b843567ffffffffffffffff811115613015575f80fd5b61302187828801612e2a565b90989097506020870135966040013595509350505050565b5f805f806040858703121561304c575f80fd5b843567ffffffffffffffff811115613062575f80fd5b61306e87828801612e2a565b909550935050602085013567ffffffffffffffff81111561308d575f80fd5b612f0d87828801612f19565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6001600160fb1b038311156130e2575f80fd5b8260051b80838637939093019392505050565b8581528460208201528360408201525f6119996060830184866130ce565b8183525f6001600160fb1b0383111561312a575f80fd5b8260051b80836020870137939093016020019392505050565b602081525f613156602083018486613113565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106065761060661315e565b6020808252600f908201526e4f4e4c595f474f5645524e414e434560881b604082015260600190565b60208082526009908201526811925390531256915160ba1b604082015260600190565b808201808211156106065761060661315e565b606081525f6131f7606083018688613113565b6020830194909452506040015292915050565b80820281158282048414176106065761060661315e565b5f808585111561322f575f80fd5b8386111561323b575f80fd5b5050820193919092039150565b604081525f61325b604083018587613113565b9050826020830152949350505050565b634e487b7160e01b5f52603260045260245ffd5b8082018281125f83128015821682158216171561329e5761329e61315e565b505092915050565b5f80858511156132b4575f80fd5b838611156132c0575f80fd5b5050600583901b0193919092039150565b5f81518060208401855e5f93019283525090919050565b5f612e2382846132d1565b8781528660208201528560408201528460608201528360808201525f61331d60a0830184866130ce565b9998505050505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f805f8084860360c081121561336c575f80fd5b85359450602086013561337e81612df4565b9350604086013592506060605f1982011215613398575f80fd5b506040516060810181811067ffffffffffffffff821117156133c857634e487b7160e01b5f52604160045260245ffd5b6040908152606087013582526080870135602083015260a09096013595810195909552509194909350909190565b5f60208284031215613406575f80fd5b81518015158114612e23575f80fd5b8681528560208201528460408201525f61343260608301866132d1565b838582375f930192835250909695505050505050565b5f6131568284866130ce565b604080825283519082018190525f9060208501906060840190835b8181101561348d57835183526020938401939092019160010161346f565b505060209390930193909352509291505056fe535441524b4e45545f312e305f494e49545f56455249464945525f41444452455353535441524b4e45545f312e305f524f4c45535f4f50455241544f52535f4d415050494e475f544147535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f4d41505050494e47535441524b4e45545f312e305f494e49545f535441524b4e45545f53544154455f535452554354535441524b4e45545f312e305f494e49545f50524f4752414d5f484153485f55494e54535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f44454c4159535441524b4e45545f312e305f535441524b4e45545f434f4e4649475f48415348535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e475f5632535441524b574152455f434f4e5452414354535f474f564552454e45445f46494e414c495a41424c455f312e305f544147a26469706673582212200f4256bd864f0f652a126e0e7e6301c59d516d81038b47d56e99f564ee7d47b164736f6c634300081a0033", - "sourceMap": "618:13607:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1933:133:18;;;;;;;;;;;;;:::i;:::-;;;160:25:22;;;148:2;133:18;1933:133:18;;;;;;;;660:112:17;;;;;;;;;;-1:-1:-1;660:112:17;;;;;:::i;:::-;;:::i;:::-;;;749:14:22;;742:22;724:41;;712:2;697:18;660:112:17;584:187:22;4570:506:18;;;;;;;;;;-1:-1:-1;4570:506:18;;;;;:::i;:::-;;:::i;779:86:10:-;;;;;;;;;;-1:-1:-1;830:4:10;779:86;;10362:102:16;;;;;;;;;;;;;:::i;541:233:3:-;;;;;;;;;;-1:-1:-1;541:233:3;;;;;:::i;:::-;;:::i;:::-;;10523:99:16;;;;;;;;;;;;;:::i;2738:212::-;;;;;;;;;;-1:-1:-1;2738:212:16;;;;;:::i;:::-;;:::i;3605:844:18:-;;;;;;:::i;:::-;;:::i;:::-;;;;3147:25:22;;;3203:2;3188:18;;3181:34;;;;3120:18;3605:844:18;2973:248:22;1487:1028:10;;;;;;;;;;-1:-1:-1;1487:1028:10;;;;;:::i;:::-;;:::i;673:144:1:-;;;;;;;;;;;;;:::i;1070:103:18:-;;;;;;;;;;-1:-1:-1;1056:7:18;1070:103;;5672:1148;;;;;;;;;;-1:-1:-1;5672:1148:18;;;;;:::i;:::-;;:::i;1039:114:3:-;;;;;;;;;;-1:-1:-1;1039:114:3;;;;;:::i;:::-;;:::i;11004:1399:16:-;;;;;;;;;;-1:-1:-1;11004:1399:16;;;;;:::i;:::-;;:::i;1320:131:18:-;;;;;;;;;;-1:-1:-1;1320:131:18;;;;;:::i;:::-;;:::i;5082:584::-;;;;;;;;;;-1:-1:-1;5082:584:18;;;;;:::i;:::-;;:::i;2072:152::-;;;;;;;;;;;;;:::i;901:121:17:-;;;;;;;;;;-1:-1:-1;901:121:17;;;;;:::i;:::-;;:::i;3189:120:16:-;;;;;;;;;;;;;:::i;461:112:1:-;;;;;;;;;;;;;:::i;778:117:17:-;;;;;;;;;;-1:-1:-1;778:117:17;;;;;:::i;:::-;;:::i;1028:81::-;;;;;;;;;;;;;:::i;10206:95:16:-;;;;;;;;;;;;;:::i;780:253:3:-;;;;;;;;;;-1:-1:-1;780:253:3;;;;;:::i;:::-;;:::i;2596:146:18:-;;;;;;;;;;-1:-1:-1;2596:146:18;;;;;:::i;:::-;;:::i;1457:122::-;;;;;;;;;;-1:-1:-1;1457:122:18;;;;;:::i;:::-;;:::i;12832:1391:16:-;;;;;;;;;;-1:-1:-1;12832:1391:16;;;;;:::i;:::-;;:::i;2956:169::-;;;;;;;;;;-1:-1:-1;2956:169:16;;;;;:::i;:::-;;:::i;3905:118::-;;;;;;;;;;;;;:::i;1115:81:17:-;;;;;;;;;;;;;:::i;2513:219:16:-;;;;;;;;;;-1:-1:-1;2513:219:16;;;;;:::i;:::-;;:::i;10029:118::-;;;;;;;;;;-1:-1:-1;10106:34:16;;;;;;;;;;;;;;;;10029:118;;;;10106:34;10029:118;:::i;1933:133:18:-;1984:7;2010:49;2036:22;;;;;;;;;;;;;;;;;2010:25;:49::i;:::-;2003:56;;1933:133;:::o;660:112:17:-;725:4;748:17;760:4;748:11;:17::i;:::-;741:24;660:112;-1:-1:-1;;660:112:17:o;4570:506:18:-;4764:84;;4700:7;;;;4764:84;;4781:11;;4810:10;;4824:7;;;;;;4764:84;;;:::i;:::-;;;;;;;;;;;;;4741:117;;;;;;4723:135;;4905:1;4877:16;:14;:16::i;:::-;:25;;;;;;;;;;;;;:29;4869:68;;;;-1:-1:-1;;;4869:68:18;;7746:2:22;4869:68:18;;;7728:21:22;7785:2;7765:18;;;7758:30;7824:28;7804:18;;;7797:56;7870:18;;4869:68:18;;;;;;;;;4985:10;-1:-1:-1;;;;;4952:53:18;4972:11;4952:53;4997:7;;4952:53;;;;;;;:::i;:::-;;;;;;;;5044:1;5015:16;:14;:16::i;:::-;:25;5032:7;5015:25;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;5062:7:18;;4570:506;-1:-1:-1;;;;;4570:506:18:o;10362:102:16:-;10413:6;10438:7;:5;:7::i;:::-;:19;;;10431:26;;10362:102;:::o;541:233:3:-;293:23:8;305:10;293:11;:23::i;:::-;285:51;;;;-1:-1:-1;;;285:51:8;;;;;;;:::i;:::-;636:23:3::1;647:11;636:10;:23::i;:::-;631:137;;705:4;675:14;:12;:14::i;:::-;-1:-1:-1::0;;;;;675:27:3;::::1;;::::0;;;::::1;::::0;;;;;;;;:34;;-1:-1:-1;;675:34:3::1;::::0;::::1;;::::0;;;::::1;::::0;;;728:29;;9271:51:22;;;728:29:3::1;::::0;9244:18:22;728:29:3::1;;;;;;;;631:137;541:233:::0;:::o;10523:99:16:-;10572:7;10598;:5;:7::i;:::-;:17;;;10591:24;;10523:99;:::o;2738:212::-;622:13:1;:11;:13::i;:::-;621:14;613:36;;;;-1:-1:-1;;;613:36:1;;;;;;;:::i;:::-;293:23:8::1;305:10;293:11;:23::i;:::-;285:51;;;;-1:-1:-1::0;;;285:51:8::1;;;;;;;:::i;:::-;2868:10:16::2;2850:58;2880:12;:10;:12::i;:::-;2850:58;::::0;;3147:25:22;;;3203:2;3188:18;;3181:34;;;3120:18;2850:58:16::2;;;;;;;2918:25;2929:13;2918:10;:25::i;3605:844:18:-:0;3760:7;3769;3808:1;3796:9;:13;3788:59;;;;-1:-1:-1;;;3788:59:18;;10125:2:22;3788:59:18;;;10107:21:22;10164:2;10144:18;;;10137:30;10203:34;10183:18;;;10176:62;-1:-1:-1;;;10254:18:22;;;10247:31;10295:19;;3788:59:18;9923:397:22;3788:59:18;1056:7;3865:9;:29;;3857:65;;;;-1:-1:-1;;;3857:65:18;;10527:2:22;3857:65:18;;;10509:21:22;10566:2;10546:18;;;10539:30;10605:25;10585:18;;;10578:53;10648:18;;3857:65:18;10325:347:22;3857:65:18;3932:13;3948:20;:18;:20::i;:::-;3932:36;;3978:60;4004:22;;;;;;;;;;;;;;;;;4028:5;4036:1;4028:9;;;;:::i;:::-;3978:25;:60::i;:::-;4091:8;4080:9;4068:10;-1:-1:-1;;;;;4053:74:18;;4101:7;;4110:5;4117:9;4053:74;;;;;;;;;:::i;:::-;;;;;;;;4137:15;4155:53;4172:9;4183:8;4193:7;;4202:5;4155:16;:53::i;:::-;4137:71;-1:-1:-1;4396:13:18;:9;4408:1;4396:13;:::i;:::-;4368:16;:14;:16::i;:::-;:25;;;;;;;;;;;;:41;:25;4436:5;;-1:-1:-1;3605:844:18;-1:-1:-1;;;;;3605:844:18:o;1487:1028:10:-;572:4:4;555:5;-1:-1:-1;;;;;555:22:4;;547:57;;;;-1:-1:-1;;;547:57:4;;11448:2:22;547:57:4;;;11430:21:22;11487:2;11467:18;;;11460:30;-1:-1:-1;;;11506:18:22;;;11499:52;11568:18;;547:57:4;11246:346:22;547:57:4;1565:17:10::1;1585:24;1565:17:::0;1585:2:::1;:24;:::i;:::-;1565:44:::0;-1:-1:-1;1619:24:10::1;1646:14;1565:44:::0;1658:2:::1;1646:14;:::i;:::-;1619:41:::0;-1:-1:-1;1678:31:10;;::::1;;1670:63;;;::::0;-1:-1:-1;;;1670:63:10;;11972:2:22;1670:63:10::1;::::0;::::1;11954:21:22::0;12011:2;11991:18;;;11984:30;-1:-1:-1;;;12030:18:22;;;12023:49;12089:18;;1670:63:10::1;11770:343:22::0;1670:63:10::1;1743:18;1775:32;1790:16:::0;1780:9;1775:4;;:32:::1;:::i;:::-;1764:55;;;;;;;:::i;:::-;1743:76:::0;-1:-1:-1;1830:35:10::1;;1868:16;1874:9:::0;1830:35;1868:4;;:16:::1;:::i;:::-;1830:54;;;;1955:23;;1981;:4:::0;1986:16;1981:4;;:23:::1;:::i;:::-;1955:49:::0;;-1:-1:-1;1955:49:10;-1:-1:-1;;;;;;2099:26:10;::::1;::::0;2095:122:::1;;2141:45;2165:10;2177:8;;2141:23;:45::i;:::-;2200:7;;;;;;;1487:1028:::0;;:::o;2095:122::-:1;2231:15;:13;:15::i;:::-;2227:282;;;2270:20:::0;;2262:53:::1;;;::::0;-1:-1:-1;;;2262:53:10;;12916:2:22;2262:53:10::1;::::0;::::1;12898:21:22::0;12955:2;12935:18;;;12928:30;-1:-1:-1;;;12974:18:22;;;12967:50;13034:18;;2262:53:10::1;12714:344:22::0;2262:53:10::1;2227:282;;;2395:26;2412:8;;2395:16;:26::i;:::-;2435:33;2459:8;;2435:23;:33::i;:::-;2482:16;:14;:16::i;614:1:4:-;1487:1028:10::0;;:::o;673:144:1:-;293:23:8;305:10;293:11;:23::i;:::-;285:51;;;;-1:-1:-1;;;285:51:8;;;;;;;:::i;:::-;622:13:1::1;:11;:13::i;:::-;621:14;613:36;;;;-1:-1:-1::0;;;613:36:1::1;;;;;;;:::i;:::-;740:44:::2;766:11;;;;;;;;;;;;;;;;;779:4;740:25;:44::i;:::-;799:11;::::0;::::2;::::0;;;::::2;673:144::o:0;5672:1148:18:-;5846:7;5913:8;5902:9;5890:10;-1:-1:-1;;;;;5870:68:18;;5923:7;;5932:5;5870:68;;;;;;;;:::i;:::-;;;;;;;;6156:15;6174:53;6191:9;6202:8;6212:7;;6221:5;6174:16;:53::i;:::-;6156:71;;6237:21;6261:16;:14;:16::i;:::-;:25;;;;;;;;;;;;;;-1:-1:-1;6304:18:18;;;6296:51;;;;-1:-1:-1;;;6296:51:18;;13633:2:22;6296:51:18;;;13615:21:22;13672:2;13652:18;;;13645:30;-1:-1:-1;;;13691:18:22;;;13684:50;13751:18;;6296:51:18;13431:344:22;6296:51:18;6358:19;6380:28;:26;:28::i;:::-;:37;;;;;;;;;;;;;;-1:-1:-1;6435:16:18;;;6427:63;;;;-1:-1:-1;;;6427:63:18;;13982:2:22;6427:63:18;;;13964:21:22;14021:2;14001:18;;;13994:30;14060:34;14040:18;;;14033:62;-1:-1:-1;;;14111:18:22;;;14104:32;14153:19;;6427:63:18;13780:398:22;6427:63:18;6501:25;6543:26;:24;:26::i;:::-;6529:40;;:11;:40;:::i;:::-;6501:68;;6608:11;6587:17;:32;;6579:73;;;;-1:-1:-1;;;6579:73:18;;14385:2:22;6579:73:18;;;14367:21:22;14424:2;14404:18;;;14397:30;14463;14443:18;;;14436:58;14511:18;;6579:73:18;14183:352:22;6579:73:18;6689:17;6670:15;:36;;6662:85;;;;-1:-1:-1;;;6662:85:18;;14742:2:22;6662:85:18;;;14724:21:22;14781:2;14761:18;;;14754:30;14820:34;14800:18;;;14793:62;-1:-1:-1;;;14871:18:22;;;14864:34;14915:19;;6662:85:18;14540:400:22;6662:85:18;6786:1;6758:16;:14;:16::i;:::-;:25;;;;;;;;;;;;:29;-1:-1:-1;6758:25:18;;5672:1148;-1:-1:-1;;;;;;;;5672:1148:18:o;1039:114:3:-;1103:4;1126:14;:12;:14::i;:::-;-1:-1:-1;;;;;1126:20:3;;;;;;;;;;;;-1:-1:-1;1126:20:3;;;;;;;1039:114::o;11004:1399:16:-;342:22:9;353:10;342;:22::i;:::-;334:48;;;;-1:-1:-1;;;334:48:9;;15147:2:22;334:48:9;;;15129:21:22;15186:2;15166:18;;;15159:30;-1:-1:-1;;;15205:18:22;;;15198:43;15258:18;;334:48:9;14945:337:22;334:48:9;11343:25:16::1;11371:7;:5;:7::i;:::-;:19;;::::0;;-1:-1:-1;974:1:15::1;11458:49:16::0;::::1;11437:121;;;::::0;-1:-1:-1;;;11437:121:16;;15489:2:22;11437:121:16::1;::::0;::::1;15471:21:22::0;15528:2;15508:18;;;15501:30;-1:-1:-1;;;15547:18:22;;;15540:55;15612:18;;11437:121:16::1;15287:349:22::0;11437:121:16::1;11623:13;;927:1:15;11623:47:16;;;;;;;:::i;:::-;;;;;;;11674:1;11623:52;11602:121;;;::::0;-1:-1:-1;;;11602:121:16;;15975:2:22;11602:121:16::1;::::0;::::1;15957:21:22::0;16014:2;15994:18;;;15987:30;-1:-1:-1;;;16033:18:22;;;16026:52;16095:18;;11602:121:16::1;15773:346:22::0;11602:121:16::1;11734:27;11764:267;11847:13;;11878:139;;;;;;;;11947:15;11878:139;;;;11984:15;11878:139;;::::0;11764:65:::1;:267::i;:::-;11734:297;;12041:55;12061:13;;12076:19;12041;:55::i;:::-;12322:22;:18:::0;12343:1:::1;12322:22;:::i;:::-;12299:7;:5;:7::i;:::-;:19;;;:45;12278:118;;;::::0;-1:-1:-1;;;12278:118:16;;16547:2:22;12278:118:16::1;::::0;::::1;16529:21:22::0;16586:2;16566:18;;;16559:30;16625:28;16605:18;;;16598:56;16671:18;;12278:118:16::1;16345:350:22::0;12278:118:16::1;11161:1242;;11004:1399:::0;;;;:::o;1320:131:18:-;1393:7;1419:16;:14;:16::i;:::-;:25;;;;;;-1:-1:-1;1419:25:18;;;;;1320:131::o;5082:584::-;5267:7;5345:8;5334:9;5322:10;-1:-1:-1;;;;;5291:79:18;;5355:7;;5364:5;5291:79;;;;;;;;:::i;:::-;;;;;;;;5380:15;5398:53;5415:9;5426:8;5436:7;;5445:5;5398:16;:53::i;:::-;5380:71;;5461:21;5485:16;:14;:16::i;:::-;:25;;;;;;;;;;;;;;-1:-1:-1;5528:17:18;5520:50;;;;-1:-1:-1;;;5520:50:18;;13633:2:22;5520:50:18;;;13615:21:22;13672:2;13652:18;;;13645:30;-1:-1:-1;;;13691:18:22;;;13684:50;13751:18;;5520:50:18;13431:344:22;5520:50:18;5620:15;5580:28;:26;:28::i;:::-;:37;;;;;;;;;;;;:55;-1:-1:-1;5580:37:18;5082:584;-1:-1:-1;;;;;;5082:584:18:o;2072:152::-;2129:7;2155:62;2181:35;;;;;;;;;;;;;;;;;2155:25;:62::i;901:121:17:-;980:35;996:18;980:15;:35::i;3189:120:16:-;3233:7;3259:43;3285:16;;;;;;;;;;;;;;;;;3259:25;:43::i;461:112:1:-;505:4;528:38;554:11;;;;;;;;;;;;;;;;;528:25;:38::i;778:117:17:-;855:33;876:11;855:20;:33::i;1028:81::-;1083:19;:17;:19::i;:::-;1028:81::o;10206:95:16:-;10250:7;10276;:5;:7::i;:::-;:18;;10206:95;-1:-1:-1;10206:95:16:o;780:253:3:-;293:23:8;305:10;293:11;:23::i;:::-;285:51;;;;-1:-1:-1;;;285:51:8;;;;;;;:::i;:::-;880:27:3::1;891:15;880:10;:27::i;:::-;876:151;;;957:5;923:14;:12;:14::i;:::-;-1:-1:-1::0;;;;;923:31:3;::::1;;::::0;;;::::1;::::0;;;;;;;;:39;;-1:-1:-1;;923:39:3::1;::::0;::::1;;::::0;;;::::1;::::0;;;981:35;;9271:51:22;;;981:35:3::1;::::0;9244:18:22;981:35:3::1;9125:203:22::0;2596:146:18;2672:7;2698:28;:26;:28::i;1457:122::-;1521:7;1547:16;:14;:16::i;12832:1391:16:-;342:22:9;353:10;342;:22::i;:::-;334:48;;;;-1:-1:-1;;;334:48:9;;15147:2:22;334:48:9;;;15129:21:22;15186:2;15166:18;;;15159:30;-1:-1:-1;;;15205:18:22;;;15198:43;15258:18;;334:48:9;14945:337:22;334:48:9;13143:25:16::1;13171:7;:5;:7::i;:::-;:19;;::::0;;-1:-1:-1;13297:60:16::1;1026:1:15;974;13297:60:16;:::i;:::-;13258:99:::0;::::1;13237:171;;;::::0;-1:-1:-1;;;13237:171:16;;15489:2:22;13237:171:16::1;::::0;::::1;15471:21:22::0;15528:2;15508:18;;;15501:30;-1:-1:-1;;;15547:18:22;;;15540:55;15612:18;;13237:171:16::1;15287:349:22::0;13237:171:16::1;13473:13;;927:1:15;13473:47:16;;;;;;;:::i;:::-;;;;;;;13524:1;13473:52;13452:121;;;::::0;-1:-1:-1;;;13452:121:16;;15975:2:22;13452:121:16::1;::::0;::::1;15957:21:22::0;16014:2;15994:18;;;15987:30;-1:-1:-1;;;16033:18:22;;;16026:52;16095:18;;13452:121:16::1;15773:346:22::0;13452:121:16::1;13583:153;13611:42;:13:::0;974:1:15::1;13611:13:16::0;;:42:::1;:::i;:::-;:93;::::0;1026:1:15::1;::::0;13611:93:16::1;::::0;::::1;:::i;:::-;13718:8;;13583:14;:153::i;:::-;13747:27;13777:74;13837:13;;13777:59;:74::i;2956:169::-:0;622:13:1;:11;:13::i;:::-;621:14;613:36;;;;-1:-1:-1;;;613:36:1;;;;;;;:::i;:::-;293:23:8::1;305:10;293:11;:23::i;:::-;285:51;;;;-1:-1:-1::0;;;285:51:8::1;;;;;;;:::i;:::-;3078:40:16::2;3103:14;3078:24;:40::i;3905:118::-:0;3948:7;3974:42;4000:15;;;;;;;;;;;;;;;;;3974:25;:42::i;1115:81:17:-;1170:19;:17;:19::i;2513:219:16:-;622:13:1;:11;:13::i;:::-;621:14;613:36;;;;-1:-1:-1;;;613:36:1;;;;;;;:::i;:::-;293:23:8::1;305:10;293:11;:23::i;:::-;285:51;;;;-1:-1:-1::0;;;285:51:8::1;;;;;;;:::i;:::-;2646:10:16::2;2627:61;2658:13;:11;:13::i;:::-;2627:61;::::0;;3147:25:22;;;3203:2;3188:18;;3181:34;;;3120:18;2627:61:16::2;;;;;;;2698:27;2710:14;2698:11;:27::i;1768:209:12:-:0;1833:14;1859:12;1901:4;1884:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1884:22:12;;;;;;;;;1874:33;;1884:22;1874:33;;;;1950:11;;1768:209;-1:-1:-1;;;1768:209:12:o;1989:189:0:-;2056:4;2072:32;2107:19;:17;:19::i;:::-;-1:-1:-1;;;;;2143:28:0;;;:22;:28;;;;;;;;-1:-1:-1;;2143:28:0;;;;;;;1989:189::o;1759:168:18:-;1808:35;1862:58;1899:20;;;;;;;;;;;;;;;;;1862:36;:58::i;4212:260:16:-;4276:39;4331:16;4377;;;;;;;;;;;;;;;;;4360:34;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4360:34:16;;;;;;;;;4350:45;;4360:34;4350:45;;;;;4212:260;-1:-1:-1;;4212:260:16:o;310:170:19:-;366:32;417:56;451:21;;;;;;;;;;;;;;;;;417:33;:56::i;3732:110:16:-;3786:49;3812:15;;;;;;;;;;;;;;;;;3829:5;1983:192:12;2059:12;2101:4;2084:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;2074:33;;;;;;2059:48;;2153:5;2147:4;2140:19;2126:43;1983:192;;:::o;3053:490:18:-;3285:237;;3220:7;;3285:237;;3339:10;;3373:9;;3404:5;;3431:8;;3461:7;;;;;;3285:237;;;:::i;:::-;;;;;;;;;;;;;3258:278;;;;;;3239:297;;3053:490;;;;;;;:::o;1585:168::-;1634:35;1688:58;1725:20;;;;;;;;;;;;;;;;;1688:36;:58::i;2521:540:10:-;-1:-1:-1;;;;;2649:34:10;;476:20:11;2641:67:10;;;;-1:-1:-1;;;2641:67:10;;18268:2:22;2641:67:10;;;18250:21:22;18307:2;18287:18;;;18280:30;-1:-1:-1;;;18326:18:22;;;18319:48;18384:18;;2641:67:10;18066:342:22;2641:67:10;2789:12;2803:23;2830;-1:-1:-1;;;;;2830:36:10;2903:24;;;2929:7;;2880:57;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2880:57:10;;;;;;;;;;;;;;-1:-1:-1;;;;;2880:57:10;-1:-1:-1;;;;;;2880:57:10;;;;;;;;;;2830:117;;;;2880:57;2830:117;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2788:159;;;;2965:7;2981:10;2957:36;;;;;-1:-1:-1;;;2957:36:10;;;;;;;;:::i;:::-;-1:-1:-1;3011:17:10;;:10;;:22;3003:51;;;;-1:-1:-1;;;3003:51:10;;;;;;;;:::i;4478:105:16:-;4535:4;4558:13;:11;:13::i;:::-;:18;;;4478:105;-1:-1:-1;4478:105:16:o;4690:266::-;4793:6;4778:21;;4770:56;;;;-1:-1:-1;;;4770:56:16;;19203:2:22;4770:56:16;;;19185:21:22;19242:2;19222:18;;;19215:30;-1:-1:-1;;;19261:18:22;;;19254:52;19323:18;;4770:56:16;19001:346:22;4770:56:16;4836:20;4870:9;4876:2;4836:20;4870:4;;:9;:::i;:::-;4859:32;;;;;;;:::i;:::-;4836:55;;4909:12;4925:1;4909:17;4901:48;;;;-1:-1:-1;;;4901:48:16;;19554:2:22;4901:48:16;;;19536:21:22;19593:2;19573:18;;;19566:30;-1:-1:-1;;;19612:18:22;;;19605:48;19670:18;;4901:48:16;19352:342:22;4901:48:16;4760:196;4690:266;;:::o;5076:505::-;5172:20;;;;5322:66;;;;5333:4;5322:66;:::i;:::-;5158:230;;;;;;;;5399:25;5411:12;5399:11;:25::i;:::-;5434:29;5453:9;5434:18;:29::i;:::-;5473:26;5486:12;5473:7;:5;:7::i;:::-;:12;323:20:20;;304:39;;373:21;;;;353:17;;;:41;422:19;;;404:15;;;;:37;226:222;5473:26:16;5509:23;5520:11;5509:10;:23::i;:::-;5542:32;5567:6;5542:24;:32::i;1666:317:0:-;1711:32;1746:19;:17;:19::i;:::-;1784:15;;;;;;-1:-1:-1;;;;1784:15:0;;;;1783:16;1775:48;;;;-1:-1:-1;;;1775:48:0;;21136:2:22;1775:48:0;;;21118:21:22;21175:2;21155:18;;;21148:30;-1:-1:-1;;;21194:18:22;;;21187:49;21253:18;;1775:48:0;20934:343:22;1775:48:0;1851:4;1833:15;;:22;;-1:-1:-1;;;;1833:22:0;-1:-1:-1;;;1833:22:0;;;1947:29;1965:10;1947:17;:29::i;2748:221:18:-;2833:35;2891:71;2928:33;;;;;;;;;;;;;;;;;2891:36;:71::i;610:1444:2:-;762:7;1486:13;762:7;1546:34;1486:13;;1546:19;:34::i;:::-;1516:64;;1644:18;1722:19;1759:18;1795:8;:24;;;1858:8;:24;;;1837:18;:45;;;;:::i;:::-;1688:208;;;;;;21495:19:22;;;;21530:12;;21523:28;;;;21567:12;;;21560:28;21604:12;;;21597:28;21641:13;;1688:208:2;;;-1:-1:-1;;1688:208:2;;;;;;;;;1665:241;;1688:208;1665:241;;;;;-1:-1:-1;2023:23:2;1665:241;2045:1;2023:23;:::i;:::-;2015:32;610:1444;-1:-1:-1;;;;;;;610:1444:2:o;8084:1871:16:-;8323:12;:10;:12::i;:::-;8271:13;;874:1:15;8271:48:16;;;;;;;:::i;:::-;;;;;;;:64;8250:130;;;;-1:-1:-1;;;8250:130:16;;21867:2:22;8250:130:16;;;21849:21:22;21906:2;21886:18;;;21879:30;-1:-1:-1;;;21925:18:22;;;21918:49;21984:18;;8250:130:16;21665:343:22;8250:130:16;8391:17;8445:13;:11;:13::i;:::-;8434:46;;;;;;3147:25:22;;;;3188:18;;3181:34;;;3120:18;;8434:46:16;;;;;;;;;;;;8411:79;;;;;;8391:99;;8535:10;:8;:10::i;:::-;-1:-1:-1;;;;;8521:33:16;;8555:9;8521:44;;;;;;;;;;;;;160:25:22;;148:2;133:18;;14:177;8521:44:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8500:116;;;;-1:-1:-1;;;8500:116:16;;22750:2:22;8500:116:16;;;22732:21:22;22789:2;22769:18;;;22762:30;22828:27;22808:18;;;22801:55;22873:18;;8500:116:16;22548:349:22;8500:116:16;8631:43;;160:25:22;;;8631:43:16;;148:2:22;133:18;8631:43:16;;;;;;;8718:29;8733:13;;8718:7;:5;:7::i;:::-;:14;:29;:14;:29::i;:::-;8980:20;9003:106;9052:13;;927:1:15;9052:47:16;;;;;;;:::i;:::-;;;;;;;9003:35;:106::i;:::-;8980:129;-1:-1:-1;9135:155:16;9204:4;9222:28;:13;8980:129;9222:13;;:28;:::i;:::-;9264:16;:14;:16::i;:::-;9135:30;:155::i;:::-;9119:171;;;;:::i;:::-;;-1:-1:-1;9355:156:16;9424:5;9443:28;:13;9119:171;9443:13;;:28;:::i;:::-;9485:16;:14;:16::i;9355:156::-;9339:172;;;;:::i;:::-;;-1:-1:-1;9542:36:16;;;9521:107;;;;-1:-1:-1;;;9521:107:16;;23104:2:22;9521:107:16;;;23086:21:22;23143:2;23123:18;;;23116:30;23182:26;23162:18;;;23155:54;23226:18;;9521:107:16;22902:348:22;9521:107:16;9772:34;9809:7;:5;:7::i;:::-;9859:17;;9890:18;;;;9922:16;;;;9831:117;;;23455:25:22;;;23511:2;23496:18;;23489:34;;;;23539:18;;;23532:34;9772:44:16;;-1:-1:-1;9831:117:16;;23443:2:22;23428:18;9831:117:16;;;;;;;8207:1748;;;8084:1871;;;:::o;4089:402:0:-;293:23:8;305:10;293:11;:23::i;:::-;285:51;;;;-1:-1:-1;;;285:51:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;4184:32:0;::::1;:10;:32:::0;4176:65:::1;;;::::0;-1:-1:-1;;;4176:65:0;;23779:2:22;4176:65:0::1;::::0;::::1;23761:21:22::0;23818:2;23798:18;;;23791:30;-1:-1:-1;;;23837:18:22;;;23830:50;23897:18;;4176:65:0::1;23577:344:22::0;4176:65:0::1;4251:32;4286:19;:17;:19::i;:::-;4251:54;;4323:31;4335:18;4323:11;:31::i;:::-;4315:56;;;::::0;-1:-1:-1;;;4315:56:0;;24128:2:22;4315:56:0::1;::::0;::::1;24110:21:22::0;24167:2;24147:18;;;24140:30;-1:-1:-1;;;24186:18:22;;;24179:42;24238:18;;4315:56:0::1;23926:336:22::0;4315:56:0::1;-1:-1:-1::0;;;;;4381:42:0;::::1;4426:5;4381:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;4381:50:0::1;::::0;;4446:38;;9271:51:22;;;4446:38:0::1;::::0;9244:18:22;4446:38:0::1;;;;;;;;4166:325;4089:402:::0;:::o;2538:447::-;293:23:8;305:10;293:11;:23::i;:::-;285:51;;;;-1:-1:-1;;;285:51:8;;;;;;;:::i;:::-;2623:32:0::1;2658:19;:17;:19::i;:::-;2623:54:::0;-1:-1:-1;;;;;;2695:27:0;::::1;2687:51;;;::::0;-1:-1:-1;;;2687:51:0;;24469:2:22;2687:51:0::1;::::0;::::1;24451:21:22::0;24508:2;24488:18;;;24481:30;-1:-1:-1;;;24527:18:22;;;24520:41;24578:18;;2687:51:0::1;24267:335:22::0;2687:51:0::1;2757:24;2769:11;2757;:24::i;:::-;2756:25;2748:54;;;::::0;-1:-1:-1;;;2748:54:0;;24809:2:22;2748:54:0::1;::::0;::::1;24791:21:22::0;24848:2;24828:18;;;24821:30;-1:-1:-1;;;24867:18:22;;;24860:46;24923:18;;2748:54:0::1;24607:340:22::0;2748:54:0::1;2820:21;::::0;::::1;::::0;-1:-1:-1;;;;;2820:21:0::1;:37:::0;2812:73:::1;;;::::0;-1:-1:-1;;;2812:73:0;;25154:2:22;2812:73:0::1;::::0;::::1;25136:21:22::0;25193:2;25173:18;;;25166:30;25232:25;25212:18;;;25205:53;25275:18;;2812:73:0::1;24952:347:22::0;2812:73:0::1;2895:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;;2895:35:0::1;-1:-1:-1::0;;;;;2895:35:0;::::1;::::0;;::::1;::::0;;;2945:33:::1;::::0;9271:51:22;;;2945:33:0::1;::::0;9259:2:22;9244:18;2945:33:0::1;9125:203:22::0;3650:382:0;3779:32;3814:19;:17;:19::i;:::-;3865:21;;;;;;-1:-1:-1;;;;;;3865:21:0;3851:10;:35;3843:71;;;;-1:-1:-1;;;3843:71:0;;25506:2:22;3843:71:0;;;25488:21:22;25545:2;25525:18;;;25518:30;25584:25;25564:18;;;25557:53;25627:18;;3843:71:0;25304:347:22;3843:71:0;3950:29;3968:10;3950:17;:29::i;:::-;3989:21;;:36;;-1:-1:-1;;;;;;3989:36:0;;;3650:382::o;5774:1950:16:-;1026:1:15;5916:52:16;;5895:123;;;;-1:-1:-1;;;5895:123:16;;25858:2:22;5895:123:16;;;25840:21:22;25897:2;25877:18;;;25870:30;25936:26;25916:18;;;25909:54;25980:18;;5895:123:16;25656:348:22;5895:123:16;2432:2;6049:37;;6028:106;;;;-1:-1:-1;;;6028:106:16;;26211:2:22;6028:106:16;;;26193:21:22;26250:2;26230:18;;;26223:30;-1:-1:-1;;;26269:18:22;;;26262:52;26331:18;;6028:106:16;26009:346:22;6028:106:16;6145:16;6164:59;;;-1:-1:-1;;;;;;6254:11:16;;;;;;:41;-1:-1:-1;;;6254:41:16;6233:116;;;;-1:-1:-1;;;6233:116:16;;26562:2:22;6233:116:16;;;26544:21:22;26601:2;26581:18;;;26574:30;26640;26620:18;;;26613:58;26688:18;;6233:116:16;26360:352:22;6233:116:16;6360:26;6396:9;6429:24;6456:10;;6467:1;6456:13;;;;;;;:::i;:::-;;;;;;;6429:40;;6483:25;6511:10;;6522:1;6511:13;;;;;;;:::i;:::-;;;;;;;6483:41;;6538:12;6553:10;;6564:1;6553:13;;;;;;;:::i;:::-;;;;;;;6538:28;;6580:13;6596:10;;6607:1;6596:13;;;;;;;:::i;:::-;;;;;;;6580:29;;-1:-1:-1;;;;;6649:37:16;;:16;:37;;6624:118;;;;-1:-1:-1;;;6624:118:16;;26919:2:22;6624:118:16;;;26901:21:22;26958:2;26938:18;;;26931:30;-1:-1:-1;;;26977:18:22;;;26970:52;27039:18;;6624:118:16;26717:346:22;6624:118:16;-1:-1:-1;;;;;6781:38:16;;;6756:119;;;;-1:-1:-1;;;6756:119:16;;26919:2:22;6756:119:16;;;26901:21:22;26958:2;26938:18;;;26931:30;-1:-1:-1;;;26977:18:22;;;26970:52;27039:18;;6756:119:16;26717:346:22;6756:119:16;-1:-1:-1;;;;;6897:25:16;;;6889:53;;;;-1:-1:-1;;;6889:53:16;;27270:2:22;6889:53:16;;;27252:21:22;27309:2;27289:18;;;27282:30;-1:-1:-1;;;27328:18:22;;;27321:45;27383:18;;6889:53:16;27068:339:22;6889:53:16;-1:-1:-1;;;;;6964:26:16;;;6956:54;;;;-1:-1:-1;;;6956:54:16;;27270:2:22;6956:54:16;;;27252:21:22;27309:2;27289:18;;;27282:30;-1:-1:-1;;;27328:18:22;;;27321:45;27383:18;;6956:54:16;27068:339:22;6956:54:16;7041:117;;;-1:-1:-1;;27585:15:22;;;27581:45;;7041:117:16;;;27569:58:22;27661:15;;;27657:45;27643:12;;;27636:67;7041:117:16;;;;;;;;;27719:12:22;;;;7041:117:16;;;;-1:-1:-1;7184:21:16;7201:4;7194:3;7185:12;;;7184:21;:::i;:::-;7176:30;;7172:34;;6415:802;;;;7226:9;7246:10;;7257:1;7246:13;;;;;;;:::i;:::-;;;;;;;7238:22;;7226:34;;7285:7;7306:30;2095:4;-1:-1:-1;;;;;7349:46:16;7430:8;7440:1;7443;7446:13;7461:8;;7413:57;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7413:57:16;;;;;;;;;;7349:135;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7271:213;;;;7503:2;7495:54;;;;-1:-1:-1;;;7495:54:16;;28508:2:22;7495:54:16;;;28490:21:22;28547:2;28527:18;;;28520:30;28586:34;28566:18;;;28559:62;-1:-1:-1;;;28637:18:22;;;28630:37;28684:19;;7495:54:16;28306:403:22;7495:54:16;7580:28;;;;;;2313:66;7580;7559:158;;;;-1:-1:-1;;;7559:158:16;;28916:2:22;7559:158:16;;;28898:21:22;28955:2;28935:18;;;28928:30;28994:34;28974:18;;;28967:62;-1:-1:-1;;;29045:18:22;;;29038:43;29098:19;;7559:158:16;28714:409:22;7559:158:16;5885:1839;;;;;;5774:1950;;;;:::o;2110:161:2:-;2196:7;2249:13;;2232:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2222:42;;;;;;2215:49;;2110:161;;;;:::o;2230:162:18:-;2307:78;2333:35;;;;;;;;;;;;;;;;;2370:14;2307:25;:78::i;2252:280:0:-;293:23:8;305:10;293:11;:23::i;:::-;285:51;;;;-1:-1:-1;;;285:51:8;;;;;;;:::i;:::-;2315:32:0::1;2350:19;:17;:19::i;:::-;2383:21;::::0;::::1;::::0;2315:54;;-1:-1:-1;;;;;;2383:21:0::1;:37:::0;2379:147:::1;;2436:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;2436:36:0::1;::::0;;2491:24:::1;::::0;::::1;::::0;2468:3:::1;::::0;2491:24:::1;2305:227;2252:280::o:0;3374:112:16:-;3429:50;3455:16;;;;;;;;;;;;;;;;;3473:5;3429:25;:50::i;346:308:17:-;439:32;487:16;546:28;;;;;;;;;;;;;;;;;529:46;;;;;;;;:::i;257:298:12:-;357:50;423:16;469:4;452:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;452:22:12;;;;;;;;;442:33;;452:22;442:33;;;;;257:298;-1:-1:-1;;;257:298:12:o;4029:130:16:-;4091:61;4124:20;;;;;;;;;;;;;;;;;4146:5;4091:32;:61::i;3310:334:0:-;3385:24;3397:11;3385;:24::i;:::-;3384:25;3376:54;;;;-1:-1:-1;;;3376:54:0;;24809:2:22;3376:54:0;;;24791:21:22;24848:2;24828:18;;;24821:30;-1:-1:-1;;;24867:18:22;;;24860:46;24923:18;;3376:54:0;24607:340:22;3376:54:0;3440:32;3475:19;:17;:19::i;:::-;-1:-1:-1;;;;;3504:35:0;;:22;:35;;;;;;;;;;;;:42;;-1:-1:-1;;3504:42:0;3542:4;3504:42;;;3602:35;;9271:51:22;;;3504:35:0;;-1:-1:-1;3602:35:0;;9244:18:22;3602:35:0;9125:203:22;3542:126:16;3585:7;3611:50;3640:20;;;;;;;;;;;;;;;;;3611:28;:50::i;597:803:20:-;807:1;786:5;:17;;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;869:14:20;;-1:-1:-1;869:14:20;767:1:15;869:50:20;;;;;;;:::i;:::-;;;;;;;847:5;:17;;;839:80;818:147;;;;-1:-1:-1;;;818:147:20;;29595:2:22;818:147:20;;;29577:21:22;29634:2;29614:18;;;29607:30;-1:-1:-1;;;29653:18:22;;;29646:50;29713:18;;818:147:20;29393:344:22;818:147:20;994:14;;820:1:15;994:48:20;;;;;;;:::i;:::-;;;;;;;;976:15;;;:66;-1:-1:-1;1053:41:20;;1097:46;1128:14;;1097:30;:46::i;:::-;1053:90;;;;1194:62;1233:22;;1194:38;:62::i;:::-;1174:16;;:82;1153:150;;;;-1:-1:-1;;;1153:150:20;;29944:2:22;1153:150:20;;;29926:21:22;29983:2;29963:18;;;29956:30;-1:-1:-1;;;30002:18:22;;;29995:51;30063:18;;1153:150:20;29742:345:22;1153:150:20;1332:61;1370:22;;1332:37;:61::i;:::-;1313:80;;;-1:-1:-1;;;;597:803:20:o;1689:160:15:-;1762:7;1803:10;1817:1;1803:15;:38;;1840:1;1803:38;;;1026:1;1803:38;1788:54;;974:1;1788:54;:::i;2481:3483::-;2654:7;2673:26;2702:18;;2721:1;2702:21;;;;;;;:::i;:::-;;;;;;;2673:50;;2762:5;2741:18;:26;2733:67;;;;-1:-1:-1;;;2733:67:15;;30294:2:22;2733:67:15;;;30276:21:22;30333:2;30313:18;;;30306:30;30372;30352:18;;;30345:58;30420:18;;2733:67:15;30092:352:22;2733:67:15;2828:1;2811:14;2867:27;2876:18;2828:1;2867:27;:::i;:::-;2839:55;;2905:25;2947:8;:80;;1545:1;2947:80;;;1205:1;2947:80;2905:132;;3048:20;3082:2557;3098:17;3089:6;:26;3082:2557;;;3131:27;3161:26;3170:17;3161:6;:26;:::i;:::-;3131:56;-1:-1:-1;3209:47:15;;;3201:77;;;;-1:-1:-1;;;3201:77:15;;30651:2:22;3201:77:15;;;30633:21:22;30690:2;30670:18;;;30663:30;-1:-1:-1;;;30709:18:22;;;30702:47;30766:18;;3201:77:15;30449:341:22;3201:77:15;3293:21;3317:18;;3336:19;3317:39;;;;;;;:::i;:::-;;;;;;;3293:63;;3394:5;3378:13;:21;3370:56;;;;-1:-1:-1;;;3370:56:15;;30997:2:22;3370:56:15;;;30979:21:22;31036:2;31016:18;;;31009:30;-1:-1:-1;;;31055:18:22;;;31048:52;31117:18;;3370:56:15;30795:346:22;3370:56:15;3441:17;3487:13;3461:23;:19;3483:1;3461:23;:::i;:::-;:39;;;;:::i;:::-;3441:59;-1:-1:-1;3522:38:15;;;;3514:76;;;;-1:-1:-1;;;3514:76:15;;31348:2:22;3514:76:15;;;31330:21:22;31387:2;31367:18;;;31360:30;31426:27;31406:18;;;31399:55;31471:18;;3514:76:15;31146:349:22;3514:76:15;3609:8;3605:1991;;;3637:19;3707:18;;3726:6;3707:36;3733:9;3707:36;;;;;;;:::i;:::-;3690:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3659:103;;;;;;3637:125;;4003:18;;1145:1;4022:6;:40;;;;:::i;:::-;4003:60;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3786:428:15;3876:18;;1087:1;3895:6;:42;;;;:::i;:::-;3876:62;;;;;;;:::i;:::-;;;;;;;3786:428;4131:18;;1257:1;4150:6;:34;;;;:::i;:::-;4131:64;;4185:9;;4131:64;;:::i;:::-;3786:428;;;;;;;:::i;:::-;;;;;;;;4232:21;;;;;;;;;;;:26;;4257:1;;4232:21;:26;;4257:1;;4232:26;:::i;:::-;;;;-1:-1:-1;3605:1991:15;;-1:-1:-1;;3605:1991:15;;4319:19;4393:18;;4412:6;4393:36;4419:9;4393:36;;;;;;;:::i;:::-;4376:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4376:54:15;;;;;;;;;4341:111;;4376:54;4341:111;;;;4475:21;4499;;;;;;;;;;4341:111;;-1:-1:-1;4550:17:15;4542:56;;;;-1:-1:-1;;;4542:56:15;;7746:2:22;4542:56:15;;;7728:21:22;7785:2;7765:18;;;7758:30;7824:28;7804:18;;;7797:56;7870:18;;4542:56:15;7544:350:22;4542:56:15;4636:17;4652:1;4636:13;:17;:::i;:::-;4620:33;;;;:::i;:::-;4699:1;4675:21;;;;;;;;;;:25;;;4620:33;-1:-1:-1;4753:18:15;;-1:-1:-1;4753:18:15;4772:35;1429:1;4772:6;:35;:::i;:::-;4753:55;;;;;;;:::i;:::-;;;;;;;4737:71;;4826:29;4891:18;;1597:1;4910:6;:34;;;;:::i;:::-;4891:64;;4945:9;;4891:64;;:::i;:::-;4826:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5381:18;;1485:1;5400:6;:38;;;;:::i;:::-;5381:58;;;;;;;:::i;:::-;;;;;;;5266:18;;1376:1;5285:6;:40;;;;:::i;:::-;5266:60;;;;;;;:::i;:::-;;;;;;;5132:18;;1318:1;5151:6;:42;;;;:::i;:::-;5132:62;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4996:585:15;;5493:12;5558:5;4996:585;;;;;;;:::i;:::-;;;;;;;;4279:1317;;3605:1991;5619:9;-1:-1:-1;3082:2557:15;;-1:-1:-1;;3082:2557:15;;5666:17;5656:6;:27;5648:68;;;;-1:-1:-1;;;5648:68:15;;30294:2:22;5648:68:15;;;30276:21:22;30333:2;30313:18;;;30306:30;30372;30352:18;;;30345:58;30420:18;;5648:68:15;30092:352:22;5648:68:15;5731:16;;5727:207;;5830:40;;5812:12;;5830:10;;5853:12;;5812;5830:40;5812:12;5830:40;5853:12;5830:10;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5811:59;;;5892:7;5884:39;;;;-1:-1:-1;;;5884:39:15;;32878:2:22;5884:39:15;;;32860:21:22;32917:2;32897:18;;;32890:30;-1:-1:-1;;;32936:18:22;;;32929:49;32995:18;;5884:39:15;32676:343:22;5884:39:15;5749:185;5727:207;-1:-1:-1;5951:6:15;;2481:3483;-1:-1:-1;;;;;;;;2481:3483:15:o;2775:189:12:-;2899:3;2866:21;2882:4;2866:15;:21::i;:::-;-1:-1:-1;;;;;2866:37:12;;2858:61;;;;-1:-1:-1;;;2858:61:12;;33226:2:22;2858:61:12;;;33208:21:22;33265:2;33245:18;;;33238:30;-1:-1:-1;;;33284:18:22;;;33277:41;33335:18;;2858:61:12;33024:335:22;2858:61:12;2929:28;2945:4;2951:5;2929:15;:28::i;1958:210:15:-;2062:18;;2103:11;2062:18;2103:11;2136:24;2062:18;2159:1;2136:24;:::i;:::-;2103:58;;;;;;;:::i;:::-;2096:65;;;;1958:210;;;;;;:::o;212:177::-;325:7;355:24;;380:1;355:27;;;;;;;:::i;:::-;;;;;;;348:34;;212:177;;;;:::o;454:176::-;566:7;596:24;;621:1;596:27;;;;;;;:::i;196:131:22:-;-1:-1:-1;;;;;271:31:22;;261:42;;251:70;;317:1;314;307:12;332:247;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;:::-;568:5;332:247;-1:-1:-1;;;332:247:22:o;776:367::-;839:8;849:6;903:3;896:4;888:6;884:17;880:27;870:55;;921:1;918;911:12;870:55;-1:-1:-1;944:20:22;;987:18;976:30;;973:50;;;1019:1;1016;1009:12;973:50;1056:4;1048:6;1044:17;1032:29;;1116:3;1109:4;1099:6;1096:1;1092:14;1084:6;1080:27;1076:38;1073:47;1070:67;;;1133:1;1130;1123:12;1148:551;1243:6;1251;1259;1312:2;1300:9;1291:7;1287:23;1283:32;1280:52;;;1328:1;1325;1318:12;1280:52;1373:23;;;-1:-1:-1;1471:2:22;1456:18;;1443:32;1498:18;1487:30;;1484:50;;;1530:1;1527;1520:12;1484:50;1569:70;1631:7;1622:6;1611:9;1607:22;1569:70;:::i;:::-;1148:551;;1658:8;;-1:-1:-1;1543:96:22;;-1:-1:-1;;;;1148:551:22:o;2066:226::-;2125:6;2178:2;2166:9;2157:7;2153:23;2149:32;2146:52;;;2194:1;2191;2184:12;2146:52;-1:-1:-1;2239:23:22;;2066:226;-1:-1:-1;2066:226:22:o;2297:671::-;2401:6;2409;2417;2425;2478:2;2466:9;2457:7;2453:23;2449:32;2446:52;;;2494:1;2491;2484:12;2446:52;2539:23;;;-1:-1:-1;2659:2:22;2644:18;;2631:32;;-1:-1:-1;2740:2:22;2725:18;;2712:32;2767:18;2756:30;;2753:50;;;2799:1;2796;2789:12;2753:50;2838:70;2900:7;2891:6;2880:9;2876:22;2838:70;:::i;:::-;2297:671;;;;-1:-1:-1;2927:8:22;-1:-1:-1;;;;2297:671:22:o;3226:347::-;3277:8;3287:6;3341:3;3334:4;3326:6;3322:17;3318:27;3308:55;;3359:1;3356;3349:12;3308:55;-1:-1:-1;3382:20:22;;3425:18;3414:30;;3411:50;;;3457:1;3454;3447:12;3411:50;3494:4;3486:6;3482:17;3470:29;;3546:3;3539:4;3530:6;3522;3518:19;3514:30;3511:39;3508:59;;;3563:1;3560;3553:12;3578:409;3648:6;3656;3709:2;3697:9;3688:7;3684:23;3680:32;3677:52;;;3725:1;3722;3715:12;3677:52;3765:9;3752:23;3798:18;3790:6;3787:30;3784:50;;;3830:1;3827;3820:12;3784:50;3869:58;3919:7;3910:6;3899:9;3895:22;3869:58;:::i;:::-;3946:8;;3843:84;;-1:-1:-1;3578:409:22;-1:-1:-1;;;;3578:409:22:o;3992:792::-;4105:6;4113;4121;4129;4137;4190:3;4178:9;4169:7;4165:23;4161:33;4158:53;;;4207:1;4204;4197:12;4158:53;4252:23;;;-1:-1:-1;4372:2:22;4357:18;;4344:32;;-1:-1:-1;4453:2:22;4438:18;;4425:32;4480:18;4469:30;;4466:50;;;4512:1;4509;4502:12;4466:50;4551:70;4613:7;4604:6;4593:9;4589:22;4551:70;:::i;:::-;3992:792;;;;-1:-1:-1;4640:8:22;4748:2;4733:18;4720:32;;3992:792;-1:-1:-1;;;;3992:792:22:o;4789:671::-;4893:6;4901;4909;4917;4970:2;4958:9;4949:7;4945:23;4941:32;4938:52;;;4986:1;4983;4976:12;4938:52;5026:9;5013:23;5059:18;5051:6;5048:30;5045:50;;;5091:1;5088;5081:12;5045:50;5130:70;5192:7;5183:6;5172:9;5168:22;5130:70;:::i;:::-;5219:8;;5104:96;;-1:-1:-1;5323:2:22;5308:18;;5295:32;;5424:2;5409:18;5396:32;;-1:-1:-1;4789:671:22;-1:-1:-1;;;;4789:671:22:o;5650:740::-;5756:6;5764;5772;5780;5833:2;5821:9;5812:7;5808:23;5804:32;5801:52;;;5849:1;5846;5839:12;5801:52;5889:9;5876:23;5922:18;5914:6;5911:30;5908:50;;;5954:1;5951;5944:12;5908:50;5993:70;6055:7;6046:6;6035:9;6031:22;5993:70;:::i;:::-;6082:8;;-1:-1:-1;5967:96:22;-1:-1:-1;;6170:2:22;6155:18;;6142:32;6199:18;6186:32;;6183:52;;;6231:1;6228;6221:12;6183:52;6270:60;6322:7;6311:8;6300:9;6296:24;6270:60;:::i;6395:418::-;6544:2;6533:9;6526:21;6507:4;6576:6;6570:13;6619:6;6614:2;6603:9;6599:18;6592:34;6678:6;6673:2;6665:6;6661:15;6656:2;6645:9;6641:18;6635:50;6734:1;6729:2;6720:6;6709:9;6705:22;6701:31;6694:42;6804:2;6797;6793:7;6788:2;6780:6;6776:15;6772:29;6761:9;6757:45;6753:54;6745:62;;;6395:418;;;;:::o;6818:261::-;6888:3;-1:-1:-1;;;;;6909:31:22;;6906:51;;;6953:1;6950;6943:12;6906:51;6989:6;6986:1;6982:14;7030:8;7023:5;7018:3;7005:34;7055:18;;;;;6818:261;-1:-1:-1;;;6818:261:22:o;7084:455::-;7369:6;7364:3;7357:19;7406:6;7401:2;7396:3;7392:12;7385:28;7443:6;7438:2;7433:3;7429:12;7422:28;7339:3;7466:67;7529:2;7524:3;7520:12;7512:6;7504;7466:67;:::i;7899:315::-;7991:19;;;7973:3;-1:-1:-1;;;;;8022:31:22;;8019:51;;;8066:1;8063;8056:12;8019:51;8102:6;8099:1;8095:14;8154:8;8147:5;8140:4;8135:3;8131:14;8118:45;8183:18;;;;8203:4;8179:29;;7899:315;-1:-1:-1;;;7899:315:22:o;8219:292::-;8408:2;8397:9;8390:21;8371:4;8428:77;8501:2;8490:9;8486:18;8478:6;8470;8428:77;:::i;:::-;8420:85;8219:292;-1:-1:-1;;;;8219:292:22:o;8516:127::-;8577:10;8572:3;8568:20;8565:1;8558:31;8608:4;8605:1;8598:15;8632:4;8629:1;8622:15;8648:128;8715:9;;;8736:11;;;8733:37;;;8750:18;;:::i;8781:339::-;8983:2;8965:21;;;9022:2;9002:18;;;8995:30;-1:-1:-1;;;9056:2:22;9041:18;;9034:45;9111:2;9096:18;;8781:339::o;9333:332::-;9535:2;9517:21;;;9574:1;9554:18;;;9547:29;-1:-1:-1;;;9607:2:22;9592:18;;9585:39;9656:2;9641:18;;9333:332::o;10677:125::-;10742:9;;;10763:10;;;10760:36;;;10776:18;;:::i;10807:434::-;11052:2;11041:9;11034:21;11015:4;11072:77;11145:2;11134:9;11130:18;11122:6;11114;11072:77;:::i;:::-;11180:2;11165:18;;11158:34;;;;-1:-1:-1;11223:2:22;11208:18;11201:34;11064:85;10807:434;-1:-1:-1;;10807:434:22:o;11597:168::-;11670:9;;;11701;;11718:15;;;11712:22;;11698:37;11688:71;;11739:18;;:::i;12118:331::-;12223:9;12234;12276:8;12264:10;12261:24;12258:44;;;12298:1;12295;12288:12;12258:44;12327:6;12317:8;12314:20;12311:40;;;12347:1;12344;12337:12;12311:40;-1:-1:-1;;12373:23:22;;;12418:25;;;;;-1:-1:-1;12118:331:22:o;13063:363::-;13280:2;13269:9;13262:21;13243:4;13300:77;13373:2;13362:9;13358:18;13350:6;13342;13300:77;:::i;:::-;13292:85;;13413:6;13408:2;13397:9;13393:18;13386:34;13063:363;;;;;;:::o;15641:127::-;15702:10;15697:3;15693:20;15690:1;15683:31;15733:4;15730:1;15723:15;15757:4;15754:1;15747:15;16124:216;16188:9;;;16216:11;;;16163:3;16246:9;;16274:10;;16270:19;;16299:10;;16291:19;;16267:44;16264:70;;;16314:18;;:::i;:::-;16264:70;;16124:216;;;;:::o;16700:355::-;16821:9;16832;16874:8;16862:10;16859:24;16856:44;;;16896:1;16893;16886:12;16856:44;16925:6;16915:8;16912:20;16909:40;;;16945:1;16942;16935:12;16909:40;-1:-1:-1;;16987:1:22;16983:18;;;16971:31;;17024:25;;;;;-1:-1:-1;16700:355:22:o;17060:212::-;17102:3;17140:5;17134:12;17184:6;17177:4;17170:5;17166:16;17161:3;17155:36;17246:1;17210:16;;17235:13;;;-1:-1:-1;17210:16:22;;17060:212;-1:-1:-1;17060:212:22:o;17277:192::-;17408:3;17433:30;17459:3;17451:6;17433:30;:::i;17474:587::-;17815:6;17810:3;17803:19;17852:6;17847:2;17842:3;17838:12;17831:28;17889:6;17884:2;17879:3;17875:12;17868:28;17926:6;17921:2;17916:3;17912:12;17905:28;17964:6;17958:3;17953;17949:13;17942:29;17785:3;17987:68;18050:3;18045;18041:13;18033:6;18025;17987:68;:::i;:::-;17980:75;17474:587;-1:-1:-1;;;;;;;;;17474:587:22:o;18413:388::-;18570:2;18559:9;18552:21;18609:6;18604:2;18593:9;18589:18;18582:34;18666:6;18658;18653:2;18642:9;18638:18;18625:48;18722:1;18693:22;;;18717:2;18689:31;;;18682:42;;;;18785:2;18764:15;;;-1:-1:-1;;18760:29:22;18745:45;18741:54;;18413:388;-1:-1:-1;18413:388:22:o;19699:1230::-;19816:6;19824;19832;19840;19884:9;19875:7;19871:23;19914:3;19910:2;19906:12;19903:32;;;19931:1;19928;19921:12;19903:32;19976:23;;;-1:-1:-1;20075:2:22;20060:18;;20047:32;20088:33;20047:32;20088:33;:::i;:::-;20140:7;-1:-1:-1;20220:2:22;20205:18;;20192:32;;-1:-1:-1;20284:2:22;-1:-1:-1;;20266:16:22;;20262:25;20259:45;;;20300:1;20297;20290:12;20259:45;;20333:2;20327:9;20375:2;20367:6;20363:15;20444:6;20432:10;20429:22;20408:18;20396:10;20393:34;20390:62;20387:185;;;20494:10;20489:3;20485:20;20482:1;20475:31;20529:4;20526:1;20519:15;20557:4;20554:1;20547:15;20387:185;20588:2;20581:22;;;20676:2;20661:18;;20648:32;20689:23;;20773:3;20758:19;;20745:33;20740:2;20728:15;;20721:58;20852:3;20837:19;;;20824:33;20873:15;;;20866:32;;;;-1:-1:-1;19699:1230:22;;;;-1:-1:-1;19699:1230:22;;20696:6;19699:1230::o;22266:277::-;22333:6;22386:2;22374:9;22365:7;22361:23;22357:32;22354:52;;;22402:1;22399;22392:12;22354:52;22434:9;22428:16;22487:5;22480:13;22473:21;22466:5;22463:32;22453:60;;22509:1;22506;22499:12;27742:559;28041:6;28036:3;28029:19;28078:6;28073:2;28068:3;28064:12;28057:28;28115:6;28110:2;28105:3;28101:12;28094:28;28011:3;28141:39;28176:2;28171:3;28167:12;28159:6;28141:39;:::i;:::-;28214:6;28206;28202:2;28189:32;28275:1;28240:15;;28264:13;;;-1:-1:-1;28240:15:22;;27742:559;-1:-1:-1;;;;;;27742:559:22:o;29128:260::-;29299:3;29324:58;29378:3;29370:6;29362;29324:58;:::i;31771:690::-;31989:2;32001:21;;;32071:13;;31974:18;;;32093:22;;;31941:4;;32184;32172:17;;;32146:2;32131:18;;;31941:4;32217:173;32231:6;32228:1;32225:13;32217:173;;;32292:13;;32280:26;;32335:4;32363:17;;;;32326:14;;;;32253:1;32246:9;32217:173;;;-1:-1:-1;;32441:4:22;32426:20;;;;32419:36;;;;-1:-1:-1;32407:3:22;31771:690;-1:-1:-1;;31771:690:22:o", - "linkReferences": {}, - "immutableReferences": { "482": [{ "start": 2569, "length": 32 }] } - }, - "methodIdentifiers": { - "cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": "6170ff1b", - "configHash()": "e1f1176d", - "consumeMessageFromL2(uint256,uint256[])": "2c9dd5c0", - "finalize()": "4bb278f3", - "getMaxL1MsgFee()": "54eccba4", - "identify()": "eeb72866", - "initialize(bytes)": "439fab91", - "isFinalized()": "8d4e4083", - "isFrozen()": "33eeb147", - "isOperator(address)": "6d70f7ae", - "l1ToL2MessageCancellations(bytes32)": "9be446bf", - "l1ToL2MessageNonce()": "018cccdf", - "l1ToL2Messages(bytes32)": "77c7d7a9", - "l2ToL1Messages(bytes32)": "a46efaf3", - "messageCancellationDelay()": "8303bd8a", - "programHash()": "8a9bf090", - "registerOperator(address)": "3682a450", - "sendMessageToL2(uint256,uint256,uint256[])": "3e3aa6c5", - "setConfigHash(uint256)": "3d07b336", - "setMessageCancellationDelay(uint256)": "c99d397f", - "setProgramHash(uint256)": "e87e7332", - "starknetAcceptGovernance()": "946be3ed", - "starknetCancelNomination()": "e37fec25", - "starknetIsGovernor(address)": "01a01590", - "starknetNominateNewGovernor(address)": "91a66a26", - "starknetRemoveGovernor(address)": "84f921cd", - "startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": "7a98660b", - "stateBlockHash()": "382d83e3", - "stateBlockNumber()": "35befa5d", - "stateRoot()": "9588eca2", - "unregisterOperator(address)": "96115bc2", - "updateState(uint256[],uint256,uint256)": "77552641", - "updateStateKzgDA(uint256[],bytes)": "b72d42a1" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"changedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldConfigHash\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newConfigHash\",\"type\":\"uint256\"}],\"name\":\"ConfigHashChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"ConsumedMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ConsumedMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Finalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"LogMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"LogMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"acceptedGovernor\",\"type\":\"address\"}],\"name\":\"LogNewGovernorAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nominatedGovernor\",\"type\":\"address\"}],\"name\":\"LogNominatedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogNominationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"LogOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"LogOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"removedGovernor\",\"type\":\"address\"}],\"name\":\"LogRemovedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateTransitionFact\",\"type\":\"bytes32\"}],\"name\":\"LogStateTransitionFact\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"globalRoot\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"blockNumber\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockHash\",\"type\":\"uint256\"}],\"name\":\"LogStateUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2Canceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2CancellationStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"changedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldProgramHash\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newProgramHash\",\"type\":\"uint256\"}],\"name\":\"ProgramHashChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"cancelL1ToL2Message\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"configHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"consumeMessageFromL2\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxL1MsgFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"l1ToL2MessageCancellations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ToL2MessageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"l1ToL2Messages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"l2ToL1Messages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageCancellationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOperator\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"sendMessageToL2\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newConfigHash\",\"type\":\"uint256\"}],\"name\":\"setConfigHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"delayInSeconds\",\"type\":\"uint256\"}],\"name\":\"setMessageCancellationDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProgramHash\",\"type\":\"uint256\"}],\"name\":\"setProgramHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"starknetAcceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"starknetCancelNomination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"starknetIsGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"starknetNominateNewGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governorForRemoval\",\"type\":\"address\"}],\"name\":\"starknetRemoveGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"startL1ToL2MessageCancellation\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateBlockHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateBlockNumber\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedOperator\",\"type\":\"address\"}],\"name\":\"unregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"programOutput\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"onchainDataHash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"onchainDataSize\",\"type\":\"uint256\"}],\"name\":\"updateState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"programOutput\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"kzgProof\",\"type\":\"bytes\"}],\"name\":\"updateStateKzgDA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)\":{\"notice\":\"Cancels an L1 to L2 message, this function should be called at least messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation(). A message may only be cancelled by its sender. If the message is missing, the call will revert. Note that the message fee is not refunded.\"},\"consumeMessageFromL2(uint256,uint256[])\":{\"notice\":\"Consumes a message that was sent from an L2 contract. Returns the hash of the message.\"},\"getMaxL1MsgFee()\":{\"notice\":\"Returns the max fee (in Wei) that StarkNet will accept per single message.\"},\"identify()\":{\"notice\":\"Returns a string that identifies the contract.\"},\"l1ToL2MessageCancellations(bytes32)\":{\"notice\":\"Returns the timestamp at the time cancelL1ToL2Message was called with a message matching 'msgHash'. The function returns 0 if cancelL1ToL2Message was never called.\"},\"l1ToL2Messages(bytes32)\":{\"notice\":\"Returns the msg_fee + 1 for the message with the given 'msgHash', or 0 if no message with such a hash is pending.\"},\"sendMessageToL2(uint256,uint256,uint256[])\":{\"notice\":\"Sends a message to an L2 contract.\"},\"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)\":{\"notice\":\"Starts the cancellation of an L1 to L2 message. A message can be canceled messageCancellationDelay() seconds after this function is called. Note: This function may only be called for a message that is currently pending and the caller must be the sender of the that message.\"},\"stateBlockHash()\":{\"notice\":\"Returns the current block hash.\"},\"stateBlockNumber()\":{\"notice\":\"Returns the current block number.\"},\"stateRoot()\":{\"notice\":\"Returns the current state root.\"},\"updateState(uint256[],uint256,uint256)\":{\"notice\":\"Updates the state of the Starknet, based on a proof of the Starknet OS that the state transition is valid. Data availability is provided on-chain. Arguments: programOutput - The main part of the StarkNet OS program output. data_availability_fact - An encoding of the on-chain data associated with the 'programOutput'.\"},\"updateStateKzgDA(uint256[],bytes)\":{\"notice\":\"Updates the state of the StarkNet, based on a proof of the StarkNet OS that the state transition is valid. Data availability is committed with KZG and provided in a blob. Arguments: programOutput - The main part of the StarkNet OS program output. kzgProof - a KZG proof which is validated together with the StarkNet OS data commitment given in 'programOutput'.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/starkware/starknet/solidity/Starknet.sol\":\"Starknet\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/starkware/solidity/components/Governance.sol\":{\"keccak256\":\"0xd8ce5b78b0f608372eaede7e806cd372bbbb4d8058482630938b8769ed1dcfa9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://68134ffd4774a219adf69b5e0abfb7945fad0f8208dc800032cbe3d43ae031c4\",\"dweb:/ipfs/QmSyTYPwnUxHU4X7kSEwUxrJb5PSZXNnqVejM8uHqAiNnK\"]},\"src/starkware/solidity/components/GovernedFinalizable.sol\":{\"keccak256\":\"0xbc083f012a60c5b3dbf365e590feffaea30f735c35b994d0d25e5e90eb47b4d4\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4d59f9b001523b451bf16ee1f5ee85d8a8ea7f3d7e350d5700ee383f4c006d5b\",\"dweb:/ipfs/QmUNKLZytKdEC2wR8FC2zGEG7CSEe4SqfW49wqdvQgUKVr\"]},\"src/starkware/solidity/components/OnchainDataFactTreeEncoder.sol\":{\"keccak256\":\"0x6e6dd9d7aae07d148748352a9d372b6975c8e820f85a8e657f118499be356cc4\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://0b2929dd8a1c4d129aeeadd90e3f9cb561ad780602a18c852a098c54844be46a\",\"dweb:/ipfs/QmP685XQtBquNGUQJE9YULNq1q1YCvbmSXBnyUBryniyhe\"]},\"src/starkware/solidity/components/Operator.sol\":{\"keccak256\":\"0xd4f88ee9d6eccbe0baa41a1655834d7595ad413430ae3bfac6d616428aa756b3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://d2918ccce129b6f97d57cb8e6e737e6d8b58c9280129d79a1caed28bf14fe68b\",\"dweb:/ipfs/QmdKL1hNpWor2mbUP1kSpyK1CBQj28C9A1JJVjNFa65q32\"]},\"src/starkware/solidity/interfaces/BlockDirectCall.sol\":{\"keccak256\":\"0xe4c3e7c3eb61ce2a08ac44c2eeb075f444ba04a9cad1a7dbbe274d35cfe7446e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b28f298f9a4f34c0a4b982ee2c765bc1e046f6c8e14b669f2e92774f3da3bb06\",\"dweb:/ipfs/QmZzTeri41CNMkyyCMnN5ukPWKuGYLwJUWVngeU5kaMTP8\"]},\"src/starkware/solidity/interfaces/ContractInitializer.sol\":{\"keccak256\":\"0xe529ee6ef9e241293c1715c9ad07c18e6cc64af77ce58b175e6fccbb71bdf055\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://6c47b19dc2f889dba2e5669af54fec4e572f1c37ac717e363f958075196ccf7d\",\"dweb:/ipfs/QmNUTTgJ2xxgW9sDZyKYdELyhuq14jZHcRvLkmgG5VhrcQ\"]},\"src/starkware/solidity/interfaces/IFactRegistry.sol\":{\"keccak256\":\"0xf2e372c92c03a1c9731f6b4ea98617b51f32aaf9d7a05bc4ef4d8d1fdbafa483\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://d5666f286de5f3d6aa977a00a6af0c639b4f339b76582cb06fb71063bad305c7\",\"dweb:/ipfs/QmSyWnaWujzyB1CdYUJQitzyngynFxu9WUg2YHQYpMd1tb\"]},\"src/starkware/solidity/interfaces/Identity.sol\":{\"keccak256\":\"0x398560c32e6c55099eb4eee73d9ee113d537b881c91da4be36c871132d3bb402\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b9c23e7d4cafbd758acec8a5492f0e420cdcaeb466001a9032524c5e6f48513c\",\"dweb:/ipfs/QmRioSAVWk3Rvf8y58vJCNQQBYrfggezTEGBTzTBPVwrFx\"]},\"src/starkware/solidity/interfaces/MGovernance.sol\":{\"keccak256\":\"0x0475bd1ccdc101bc6d7b0f2c6d345b31cc57abd66b37afe5fd14f8613135e947\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://eda6039830ee3b942c1a01f0992eb2fda5b57976e8a80e4c7cf5d102849edafe\",\"dweb:/ipfs/QmVV4mnDKdYC6WBRzDDn8nmsL2xXvkSPnMs1vaoBLy43o2\"]},\"src/starkware/solidity/interfaces/MOperator.sol\":{\"keccak256\":\"0xef0036c25fcd2e42753754ebf2ba8990d7784db9784fb0c29b0d9f3b9b55c34d\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4dac642e84cfeb89dde9d7c9e0ebed946baaaab793db688dfe2e1d3186d2a250\",\"dweb:/ipfs/QmbGvrWVc9irdxrC18Buo4GfHnsBUh6RTc4aDsTWKN6ny9\"]},\"src/starkware/solidity/interfaces/ProxySupport.sol\":{\"keccak256\":\"0xa83f619e91d6e1065ae09b02bd273f9a18c73913b4b52b1f911fa0bc11fbf1e9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://befd6e43029ade5166b05123b2bbee7b9f9a7b0db17d7bdd0fe08cb9e95ba147\",\"dweb:/ipfs/QmWdRfcsq4y83CGMWNaZwhorkCLAzzQG7CRuiMZYncwiBG\"]},\"src/starkware/solidity/libraries/Addresses.sol\":{\"keccak256\":\"0x73f6e01e16d6348795f0ecc444cb322d81fa524e6c2c3d2afa3f6250a7edbfd2\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://d2609a8fc5ddd73677c5202a492ae598f2983f6f9c125f1359bb9e47f7c85364\",\"dweb:/ipfs/Qmc5Dipi7jGiD2M9qhn9x1ForZ3qgyuSPs5ZXzpH7AuoDP\"]},\"src/starkware/solidity/libraries/NamedStorage8.sol\":{\"keccak256\":\"0x3d5d9b3c483726109353c132c18e03b34a8330c406bdcad2f31876b1b9bf308c\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://c773db3f2ad013a71615e0617433698a607e69153c56f5a88606c08af8d90dbc\",\"dweb:/ipfs/Qmab73eWEzigEK9FJUNwxaMsDGHTSoHceesUTEWwiGrhHi\"]},\"src/starkware/starknet/solidity/IStarknetMessaging.sol\":{\"keccak256\":\"0x331fc95b8386910d830390f5d54f367f6a6fbd9278ee4712250ae800fb5e7344\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://14963165abd43ed96ee6fbcd78ded2e1954fe5210a48650b78f593877716628d\",\"dweb:/ipfs/QmUX9Zd5PYd8s58XpEo1gXquz6KUumycwE4oTXemLrHyef\"]},\"src/starkware/starknet/solidity/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0xf1cbfb68e7304dbc1482449b82c9d35c45d3518fe3203ac9fdf5d04e3f0cb949\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://bdae8a64ef862257c32d65d277aad2ff942a5fc2efef6276c6b1e914023ae64c\",\"dweb:/ipfs/QmYAnXnb4cUUUvftu71goQyX28J59KtzrvNxuh1mCbDRUB\"]},\"src/starkware/starknet/solidity/Output.sol\":{\"keccak256\":\"0xb893746bb51a05033e84d3bc64cc07189a3382a1f1163d2a5736c87443ddaa90\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://0837f4ae243107675bcd6fc8e72999966efedafcb5b089076cce0250c86f5966\",\"dweb:/ipfs/QmYkKbqzwzACuYrhMfyeSJZTwKGZtDjdG4B1xrwyaBKQeG\"]},\"src/starkware/starknet/solidity/Starknet.sol\":{\"keccak256\":\"0x990bd30cdd3e6941ad1cbe8a744f80801d4ae50d66ad14cbce6937a75a4aba81\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3cff95e720ebeaa201632ac7e025c5252a0195bc88fd0814e6396685c3a91ee9\",\"dweb:/ipfs/QmZyVyNek1UCWNZSmtiihxdNFgyEuR3bG6gcEJ6apDXubq\"]},\"src/starkware/starknet/solidity/StarknetGovernance.sol\":{\"keccak256\":\"0x0110e1879b50cb3e423a5ad23a3bad2e9eb06e105ab33c482cc4495145f59407\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://fdad5303164943f21e9ffa718d2ba709875220852cf78780a4b6da0a18a2c951\",\"dweb:/ipfs/QmPRmr647c2adY7nchKLZfB2y88g1h9AiH9Y3FRWYGyKU7\"]},\"src/starkware/starknet/solidity/StarknetMessaging.sol\":{\"keccak256\":\"0x478301a9531d0999eb3309c2350485e86f2e9d9464f275cbd52d72e0cd4304e5\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://8729df2a81d49f90e179367410997b06a160464ef5ac2fe90eafe1c8038e0729\",\"dweb:/ipfs/QmTFW581hTWecoqs6MzkU1D1eSpvhP7DT9KKk4jVoWqxhf\"]},\"src/starkware/starknet/solidity/StarknetOperator.sol\":{\"keccak256\":\"0xa9372c6eb69046a19139a400c80b2e58983cba74e61c88dd58f381e59a930352\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://79806244f882945598aaed3605d3eb3dbcc17ad2365cbc37b6093e2a1b16e551\",\"dweb:/ipfs/QmfPf8DWQtCvg3sy5H8vWnarnEJEBuSEpJf6ihy1RcSt5n\"]},\"src/starkware/starknet/solidity/StarknetState.sol\":{\"keccak256\":\"0x18614c66d964016ae35a9d7918a421c46a7a70cd537ad9e670f58f415c892bbb\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9e2546de37e3c0c9179a6c6e83b1cc31cd2c0cb23e69b8cbf1b7e44037b54fa0\",\"dweb:/ipfs/QmZJKm59BUn9r9umoC5AXsw5kogednAefvqM3q7K31brJ5\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.26+commit.8a97fa7a" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "changedBy", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "oldConfigHash", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "newConfigHash", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ConfigHashChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fromAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "ConsumedMessageToL1", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ConsumedMessageToL2", - "anonymous": false - }, - { - "inputs": [], - "type": "event", - "name": "Finalized", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fromAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "LogMessageToL1", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "LogMessageToL2", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "acceptedGovernor", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogNewGovernorAccepted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "nominatedGovernor", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogNominatedGovernor", - "anonymous": false - }, - { - "inputs": [], - "type": "event", - "name": "LogNominationCancelled", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogOperatorAdded", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogOperatorRemoved", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "removedGovernor", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogRemovedGovernor", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "stateTransitionFact", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "LogStateTransitionFact", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "globalRoot", - "type": "uint256", - "indexed": false - }, - { - "internalType": "int256", - "name": "blockNumber", - "type": "int256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "blockHash", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "LogStateUpdate", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "MessageToL2Canceled", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "MessageToL2CancellationStarted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "changedBy", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "oldProgramHash", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "newProgramHash", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ProgramHashChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "cancelL1ToL2Message", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "configHash", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fromAddress", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "consumeMessageFromL2", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "finalize" - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "getMaxL1MsgFee", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "identify", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isFinalized", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isFrozen", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "user", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isOperator", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "l1ToL2MessageCancellations", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "l1ToL2MessageNonce", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "l1ToL2Messages", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "l2ToL1Messages", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "messageCancellationDelay", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "programHash", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOperator", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerOperator" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "sendMessageToL2", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newConfigHash", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfigHash" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "delayInSeconds", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setMessageCancellationDelay" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newProgramHash", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setProgramHash" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "starknetAcceptGovernance" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "starknetCancelNomination" - }, - { - "inputs": [ - { "internalType": "address", "name": "user", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "starknetIsGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "starknetNominateNewGovernor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "starknetRemoveGovernor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "startL1ToL2MessageCancellation", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "stateBlockHash", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "stateBlockNumber", - "outputs": [ - { "internalType": "int256", "name": "", "type": "int256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "stateRoot", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "removedOperator", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "unregisterOperator" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "programOutput", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "onchainDataHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "onchainDataSize", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "updateState" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "programOutput", - "type": "uint256[]" - }, - { "internalType": "bytes", "name": "kzgProof", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "updateStateKzgDA" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { - "kind": "user", - "methods": { - "cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": { - "notice": "Cancels an L1 to L2 message, this function should be called at least messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation(). A message may only be cancelled by its sender. If the message is missing, the call will revert. Note that the message fee is not refunded." - }, - "consumeMessageFromL2(uint256,uint256[])": { - "notice": "Consumes a message that was sent from an L2 contract. Returns the hash of the message." - }, - "getMaxL1MsgFee()": { - "notice": "Returns the max fee (in Wei) that StarkNet will accept per single message." - }, - "identify()": { - "notice": "Returns a string that identifies the contract." - }, - "l1ToL2MessageCancellations(bytes32)": { - "notice": "Returns the timestamp at the time cancelL1ToL2Message was called with a message matching 'msgHash'. The function returns 0 if cancelL1ToL2Message was never called." - }, - "l1ToL2Messages(bytes32)": { - "notice": "Returns the msg_fee + 1 for the message with the given 'msgHash', or 0 if no message with such a hash is pending." - }, - "sendMessageToL2(uint256,uint256,uint256[])": { - "notice": "Sends a message to an L2 contract." - }, - "startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": { - "notice": "Starts the cancellation of an L1 to L2 message. A message can be canceled messageCancellationDelay() seconds after this function is called. Note: This function may only be called for a message that is currently pending and the caller must be the sender of the that message." - }, - "stateBlockHash()": { "notice": "Returns the current block hash." }, - "stateBlockNumber()": { - "notice": "Returns the current block number." - }, - "stateRoot()": { "notice": "Returns the current state root." }, - "updateState(uint256[],uint256,uint256)": { - "notice": "Updates the state of the Starknet, based on a proof of the Starknet OS that the state transition is valid. Data availability is provided on-chain. Arguments: programOutput - The main part of the StarkNet OS program output. data_availability_fact - An encoding of the on-chain data associated with the 'programOutput'." - }, - "updateStateKzgDA(uint256[],bytes)": { - "notice": "Updates the state of the StarkNet, based on a proof of the StarkNet OS that the state transition is valid. Data availability is committed with KZG and provided in a blob. Arguments: programOutput - The main part of the StarkNet OS program output. kzgProof - a KZG proof which is validated together with the StarkNet OS data commitment given in 'programOutput'." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "src/starkware/starknet/solidity/Starknet.sol": "Starknet" - }, - "evmVersion": "cancun", - "libraries": {} - }, - "sources": { - "src/starkware/solidity/components/Governance.sol": { - "keccak256": "0xd8ce5b78b0f608372eaede7e806cd372bbbb4d8058482630938b8769ed1dcfa9", - "urls": [ - "bzz-raw://68134ffd4774a219adf69b5e0abfb7945fad0f8208dc800032cbe3d43ae031c4", - "dweb:/ipfs/QmSyTYPwnUxHU4X7kSEwUxrJb5PSZXNnqVejM8uHqAiNnK" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/components/GovernedFinalizable.sol": { - "keccak256": "0xbc083f012a60c5b3dbf365e590feffaea30f735c35b994d0d25e5e90eb47b4d4", - "urls": [ - "bzz-raw://4d59f9b001523b451bf16ee1f5ee85d8a8ea7f3d7e350d5700ee383f4c006d5b", - "dweb:/ipfs/QmUNKLZytKdEC2wR8FC2zGEG7CSEe4SqfW49wqdvQgUKVr" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/components/OnchainDataFactTreeEncoder.sol": { - "keccak256": "0x6e6dd9d7aae07d148748352a9d372b6975c8e820f85a8e657f118499be356cc4", - "urls": [ - "bzz-raw://0b2929dd8a1c4d129aeeadd90e3f9cb561ad780602a18c852a098c54844be46a", - "dweb:/ipfs/QmP685XQtBquNGUQJE9YULNq1q1YCvbmSXBnyUBryniyhe" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/components/Operator.sol": { - "keccak256": "0xd4f88ee9d6eccbe0baa41a1655834d7595ad413430ae3bfac6d616428aa756b3", - "urls": [ - "bzz-raw://d2918ccce129b6f97d57cb8e6e737e6d8b58c9280129d79a1caed28bf14fe68b", - "dweb:/ipfs/QmdKL1hNpWor2mbUP1kSpyK1CBQj28C9A1JJVjNFa65q32" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/interfaces/BlockDirectCall.sol": { - "keccak256": "0xe4c3e7c3eb61ce2a08ac44c2eeb075f444ba04a9cad1a7dbbe274d35cfe7446e", - "urls": [ - "bzz-raw://b28f298f9a4f34c0a4b982ee2c765bc1e046f6c8e14b669f2e92774f3da3bb06", - "dweb:/ipfs/QmZzTeri41CNMkyyCMnN5ukPWKuGYLwJUWVngeU5kaMTP8" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/interfaces/ContractInitializer.sol": { - "keccak256": "0xe529ee6ef9e241293c1715c9ad07c18e6cc64af77ce58b175e6fccbb71bdf055", - "urls": [ - "bzz-raw://6c47b19dc2f889dba2e5669af54fec4e572f1c37ac717e363f958075196ccf7d", - "dweb:/ipfs/QmNUTTgJ2xxgW9sDZyKYdELyhuq14jZHcRvLkmgG5VhrcQ" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/interfaces/IFactRegistry.sol": { - "keccak256": "0xf2e372c92c03a1c9731f6b4ea98617b51f32aaf9d7a05bc4ef4d8d1fdbafa483", - "urls": [ - "bzz-raw://d5666f286de5f3d6aa977a00a6af0c639b4f339b76582cb06fb71063bad305c7", - "dweb:/ipfs/QmSyWnaWujzyB1CdYUJQitzyngynFxu9WUg2YHQYpMd1tb" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/interfaces/Identity.sol": { - "keccak256": "0x398560c32e6c55099eb4eee73d9ee113d537b881c91da4be36c871132d3bb402", - "urls": [ - "bzz-raw://b9c23e7d4cafbd758acec8a5492f0e420cdcaeb466001a9032524c5e6f48513c", - "dweb:/ipfs/QmRioSAVWk3Rvf8y58vJCNQQBYrfggezTEGBTzTBPVwrFx" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/interfaces/MGovernance.sol": { - "keccak256": "0x0475bd1ccdc101bc6d7b0f2c6d345b31cc57abd66b37afe5fd14f8613135e947", - "urls": [ - "bzz-raw://eda6039830ee3b942c1a01f0992eb2fda5b57976e8a80e4c7cf5d102849edafe", - "dweb:/ipfs/QmVV4mnDKdYC6WBRzDDn8nmsL2xXvkSPnMs1vaoBLy43o2" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/interfaces/MOperator.sol": { - "keccak256": "0xef0036c25fcd2e42753754ebf2ba8990d7784db9784fb0c29b0d9f3b9b55c34d", - "urls": [ - "bzz-raw://4dac642e84cfeb89dde9d7c9e0ebed946baaaab793db688dfe2e1d3186d2a250", - "dweb:/ipfs/QmbGvrWVc9irdxrC18Buo4GfHnsBUh6RTc4aDsTWKN6ny9" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/interfaces/ProxySupport.sol": { - "keccak256": "0xa83f619e91d6e1065ae09b02bd273f9a18c73913b4b52b1f911fa0bc11fbf1e9", - "urls": [ - "bzz-raw://befd6e43029ade5166b05123b2bbee7b9f9a7b0db17d7bdd0fe08cb9e95ba147", - "dweb:/ipfs/QmWdRfcsq4y83CGMWNaZwhorkCLAzzQG7CRuiMZYncwiBG" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/libraries/Addresses.sol": { - "keccak256": "0x73f6e01e16d6348795f0ecc444cb322d81fa524e6c2c3d2afa3f6250a7edbfd2", - "urls": [ - "bzz-raw://d2609a8fc5ddd73677c5202a492ae598f2983f6f9c125f1359bb9e47f7c85364", - "dweb:/ipfs/Qmc5Dipi7jGiD2M9qhn9x1ForZ3qgyuSPs5ZXzpH7AuoDP" - ], - "license": "Apache-2.0." - }, - "src/starkware/solidity/libraries/NamedStorage8.sol": { - "keccak256": "0x3d5d9b3c483726109353c132c18e03b34a8330c406bdcad2f31876b1b9bf308c", - "urls": [ - "bzz-raw://c773db3f2ad013a71615e0617433698a607e69153c56f5a88606c08af8d90dbc", - "dweb:/ipfs/Qmab73eWEzigEK9FJUNwxaMsDGHTSoHceesUTEWwiGrhHi" - ], - "license": "Apache-2.0." - }, - "src/starkware/starknet/solidity/IStarknetMessaging.sol": { - "keccak256": "0x331fc95b8386910d830390f5d54f367f6a6fbd9278ee4712250ae800fb5e7344", - "urls": [ - "bzz-raw://14963165abd43ed96ee6fbcd78ded2e1954fe5210a48650b78f593877716628d", - "dweb:/ipfs/QmUX9Zd5PYd8s58XpEo1gXquz6KUumycwE4oTXemLrHyef" - ], - "license": "Apache-2.0." - }, - "src/starkware/starknet/solidity/IStarknetMessagingEvents.sol": { - "keccak256": "0xf1cbfb68e7304dbc1482449b82c9d35c45d3518fe3203ac9fdf5d04e3f0cb949", - "urls": [ - "bzz-raw://bdae8a64ef862257c32d65d277aad2ff942a5fc2efef6276c6b1e914023ae64c", - "dweb:/ipfs/QmYAnXnb4cUUUvftu71goQyX28J59KtzrvNxuh1mCbDRUB" - ], - "license": "Apache-2.0." - }, - "src/starkware/starknet/solidity/Output.sol": { - "keccak256": "0xb893746bb51a05033e84d3bc64cc07189a3382a1f1163d2a5736c87443ddaa90", - "urls": [ - "bzz-raw://0837f4ae243107675bcd6fc8e72999966efedafcb5b089076cce0250c86f5966", - "dweb:/ipfs/QmYkKbqzwzACuYrhMfyeSJZTwKGZtDjdG4B1xrwyaBKQeG" - ], - "license": "Apache-2.0." - }, - "src/starkware/starknet/solidity/Starknet.sol": { - "keccak256": "0x990bd30cdd3e6941ad1cbe8a744f80801d4ae50d66ad14cbce6937a75a4aba81", - "urls": [ - "bzz-raw://3cff95e720ebeaa201632ac7e025c5252a0195bc88fd0814e6396685c3a91ee9", - "dweb:/ipfs/QmZyVyNek1UCWNZSmtiihxdNFgyEuR3bG6gcEJ6apDXubq" - ], - "license": "Apache-2.0." - }, - "src/starkware/starknet/solidity/StarknetGovernance.sol": { - "keccak256": "0x0110e1879b50cb3e423a5ad23a3bad2e9eb06e105ab33c482cc4495145f59407", - "urls": [ - "bzz-raw://fdad5303164943f21e9ffa718d2ba709875220852cf78780a4b6da0a18a2c951", - "dweb:/ipfs/QmPRmr647c2adY7nchKLZfB2y88g1h9AiH9Y3FRWYGyKU7" - ], - "license": "Apache-2.0." - }, - "src/starkware/starknet/solidity/StarknetMessaging.sol": { - "keccak256": "0x478301a9531d0999eb3309c2350485e86f2e9d9464f275cbd52d72e0cd4304e5", - "urls": [ - "bzz-raw://8729df2a81d49f90e179367410997b06a160464ef5ac2fe90eafe1c8038e0729", - "dweb:/ipfs/QmTFW581hTWecoqs6MzkU1D1eSpvhP7DT9KKk4jVoWqxhf" - ], - "license": "Apache-2.0." - }, - "src/starkware/starknet/solidity/StarknetOperator.sol": { - "keccak256": "0xa9372c6eb69046a19139a400c80b2e58983cba74e61c88dd58f381e59a930352", - "urls": [ - "bzz-raw://79806244f882945598aaed3605d3eb3dbcc17ad2365cbc37b6093e2a1b16e551", - "dweb:/ipfs/QmfPf8DWQtCvg3sy5H8vWnarnEJEBuSEpJf6ihy1RcSt5n" - ], - "license": "Apache-2.0." - }, - "src/starkware/starknet/solidity/StarknetState.sol": { - "keccak256": "0x18614c66d964016ae35a9d7918a421c46a7a70cd537ad9e670f58f415c892bbb", - "urls": [ - "bzz-raw://9e2546de37e3c0c9179a6c6e83b1cc31cd2c0cb23e69b8cbf1b7e44037b54fa0", - "dweb:/ipfs/QmZJKm59BUn9r9umoC5AXsw5kogednAefvqM3q7K31brJ5" - ], - "license": "Apache-2.0." - } - }, - "version": 1 - }, - "id": 16 -} diff --git a/crates/l2/starknet-core-contract-client/src/artifacts/StarknetSovereign.json b/crates/l2/starknet-core-contract-client/src/artifacts/StarknetSovereign.json deleted file mode 100644 index b65e293..0000000 --- a/crates/l2/starknet-core-contract-client/src/artifacts/StarknetSovereign.json +++ /dev/null @@ -1,7844 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "cancelL1ToL2Message", - "inputs": [ - { "name": "toAddress", "type": "uint256", "internalType": "uint256" }, - { "name": "selector", "type": "uint256", "internalType": "uint256" }, - { "name": "payload", "type": "uint256[]", "internalType": "uint256[]" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "configHash", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "consumeMessageFromL2", - "inputs": [ - { "name": "fromAddress", "type": "uint256", "internalType": "uint256" }, - { "name": "payload", "type": "uint256[]", "internalType": "uint256[]" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "finalize", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getMaxL1MsgFee", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "identify", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "initialize", - "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isFinalized", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isFrozen", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isOperator", - "inputs": [ - { "name": "user", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l1ToL2MessageCancellations", - "inputs": [ - { "name": "msgHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l1ToL2MessageNonce", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l1ToL2Messages", - "inputs": [ - { "name": "msgHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l2ToL1Messages", - "inputs": [ - { "name": "msgHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageCancellationDelay", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "programHash", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerOperator", - "inputs": [ - { "name": "newOperator", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sendMessageToL2", - "inputs": [ - { "name": "toAddress", "type": "uint256", "internalType": "uint256" }, - { "name": "selector", "type": "uint256", "internalType": "uint256" }, - { "name": "payload", "type": "uint256[]", "internalType": "uint256[]" } - ], - "outputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" }, - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "setConfigHash", - "inputs": [ - { - "name": "newConfigHash", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMessageCancellationDelay", - "inputs": [ - { - "name": "delayInSeconds", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setProgramHash", - "inputs": [ - { - "name": "newProgramHash", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "starknetAcceptGovernance", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "starknetCancelNomination", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "starknetIsGovernor", - "inputs": [ - { "name": "user", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "starknetNominateNewGovernor", - "inputs": [ - { "name": "newGovernor", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "starknetRemoveGovernor", - "inputs": [ - { - "name": "governorForRemoval", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startL1ToL2MessageCancellation", - "inputs": [ - { "name": "toAddress", "type": "uint256", "internalType": "uint256" }, - { "name": "selector", "type": "uint256", "internalType": "uint256" }, - { "name": "payload", "type": "uint256[]", "internalType": "uint256[]" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "stateBlockHash", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "stateBlockNumber", - "inputs": [], - "outputs": [{ "name": "", "type": "int256", "internalType": "int256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "stateRoot", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "unregisterOperator", - "inputs": [ - { - "name": "removedOperator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateState", - "inputs": [ - { - "name": "programOutput", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "ConfigHashChanged", - "inputs": [ - { - "name": "changedBy", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "oldConfigHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "newConfigHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ConsumedMessageToL1", - "inputs": [ - { - "name": "fromAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ConsumedMessageToL2", - "inputs": [ - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "toAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "selector", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { "type": "event", "name": "Finalized", "inputs": [], "anonymous": false }, - { - "type": "event", - "name": "LogMessageToL1", - "inputs": [ - { - "name": "fromAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogMessageToL2", - "inputs": [ - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "toAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "selector", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "fee", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogNewGovernorAccepted", - "inputs": [ - { - "name": "acceptedGovernor", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogNominatedGovernor", - "inputs": [ - { - "name": "nominatedGovernor", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogNominationCancelled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "LogOperatorAdded", - "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogOperatorRemoved", - "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogRemovedGovernor", - "inputs": [ - { - "name": "removedGovernor", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogStateTransitionFact", - "inputs": [ - { - "name": "stateTransitionFact", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogStateUpdate", - "inputs": [ - { - "name": "globalRoot", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "blockNumber", - "type": "int256", - "indexed": false, - "internalType": "int256" - }, - { - "name": "blockHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MessageToL2Canceled", - "inputs": [ - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "toAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "selector", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MessageToL2CancellationStarted", - "inputs": [ - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "toAddress", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "selector", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "payload", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ProgramHashChanged", - "inputs": [ - { - "name": "changedBy", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "oldProgramHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "newProgramHash", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60a060405234801561001057600080fd5b5030606081901b608052612cee610031600039806109365250612cee6000f3fe6080604052600436106101e35760003560e01c80638303bd8a1161010257806396115bc211610095578063e1f1176d11610064578063e1f1176d14610515578063e37fec251461052a578063e87e73321461053f578063eeb728661461055f576101e3565b806396115bc2146104955780639be446bf146104b5578063a46efaf3146104d5578063c99d397f146104f5576101e3565b80638d4e4083116100d15780638d4e40831461043657806391a66a261461044b578063946be3ed1461046b5780639588eca214610480576101e3565b80638303bd8a146103cc57806384f921cd146103e1578063853e2461146104015780638a9bf09014610421576101e3565b80633e3aa6c51161017a5780636170ff1b116101495780636170ff1b1461034c5780636d70f7ae1461036c57806377c7d7a91461038c5780637a98660b146103ac576101e3565b80633e3aa6c5146102e1578063439fab91146103025780634bb278f31461032257806354eccba414610337576101e3565b806335befa5d116101b657806335befa5d146102755780633682a4501461028a578063382d83e3146102ac5780633d07b336146102c1576101e3565b8063018cccdf146101e857806301a01590146102135780632c9dd5c01461024057806333eeb14714610260575b600080fd5b3480156101f457600080fd5b506101fd610581565b60405161020a919061235d565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004611f37565b6105c6565b60405161020a9190612352565b34801561024c57600080fd5b506101fd61025b3660046120ae565b6105d7565b34801561026c57600080fd5b506102336106ba565b34801561028157600080fd5b506101fd6106bf565b34801561029657600080fd5b506102aa6102a5366004611f37565b6106d2565b005b3480156102b857600080fd5b506101fd610773565b3480156102cd57600080fd5b506102aa6102dc366004611f9a565b610786565b6102f46102ef3660046120f8565b61081a565b60405161020a929190612366565b34801561030e57600080fd5b506102aa61031d366004611fb2565b610934565b34801561032e57600080fd5b506102aa610a7c565b34801561034357600080fd5b506101fd610b14565b34801561035857600080fd5b506101fd610367366004612149565b610b20565b34801561037857600080fd5b50610233610387366004611f37565b610c62565b34801561039857600080fd5b506101fd6103a7366004611f9a565b610c8f565b3480156103b857600080fd5b506101fd6103c7366004612149565b610caa565b3480156103d857600080fd5b506101fd610d61565b3480156103ed57600080fd5b506102aa6103fc366004611f37565b610d84565b34801561040d57600080fd5b506102aa61041c366004611f5a565b610d8d565b34801561042d57600080fd5b506101fd610ef3565b34801561044257600080fd5b50610233610f16565b34801561045757600080fd5b506102aa610466366004611f37565b610f39565b34801561047757600080fd5b506102aa610f42565b34801561048c57600080fd5b506101fd610f4c565b3480156104a157600080fd5b506102aa6104b0366004611f37565b610f5c565b3480156104c157600080fd5b506101fd6104d0366004611f9a565b610ff2565b3480156104e157600080fd5b506101fd6104f0366004611f9a565b610ffc565b34801561050157600080fd5b506102aa610510366004611f9a565b611006565b34801561052157600080fd5b506101fd611059565b34801561053657600080fd5b506102aa61107c565b34801561054b57600080fd5b506102aa61055a366004611f9a565b611084565b34801561056b57600080fd5b50610574611118565b60405161020a91906123a3565b60006105c16040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525061114f565b905090565b60006105d182611183565b92915050565b60405160009081906105f59086903390869088908290602001612235565b60405160208183030381529060405280519060200120905060006106176111b2565b600083815260209190915260409020541161064d5760405162461bcd60e51b8152600401610644906128ee565b60405180910390fd5b336001600160a01b0316857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b186866040516106899291906122ab565b60405180910390a3600161069b6111b2565b6000838152602091909152604090208054919091039055949350505050565b600090565b60006106c96111d5565b60010154905090565b6106db33611183565b6106f75760405162461bcd60e51b81526004016106449061283c565b61070081610c62565b61077057600161070e61121f565b6001600160a01b0383166000908152602091909152604090819020805460ff191692151592909217909155517f50a18c352ee1c02ffe058e15c2eb6e58be387c81e73cc1e17035286e54c19a5790610767908390612297565b60405180910390a15b50565b600061077d6111d5565b60020154905090565b61078e610f16565b156107ab5760405162461bcd60e51b815260040161064490612819565b6107b433611183565b6107d05760405162461bcd60e51b81526004016106449061283c565b337f393c6beb5756a944b2967f15f31ff671e312e945d7a84fd3bdcfd6b408b2dc796107fa611059565b83604051610809929190612366565b60405180910390a261077081611242565b6000806000341161083d5760405162461bcd60e51b815260040161064490612a3d565b610845610b14565b3411156108645760405162461bcd60e51b8152600401610644906125b0565b600061086e610581565b90506108b26040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525082600101611260565b8587336001600160a01b03167fdb80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b888886346040516108f394939291906122e3565b60405180910390a4600061090a8888888886611293565b9050346001016109186112d4565b6000838152602091909152604090205597909650945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630141561097d5760405162461bcd60e51b81526004016106449061267c565b60006109876106ba565b602090810291508101808310156109b05760405162461bcd60e51b81526004016106449061288a565b60006109be82848688612abf565b8101906109cb9190611f37565b90503660006109dc8582888a612abf565b915091506109ea8282610a78565b3660006109f98887818c612abf565b90925090506001600160a01b03851615610a2457610a188583836112f7565b50505050505050610a78565b610a2c61141c565b15610a54578015610a4f5760405162461bcd60e51b81526004016106449061261e565b610a70565b610a5e828261142d565b610a68828261148d565b610a706114e7565b505050505050505b5050565b610a8533611183565b610aa15760405162461bcd60e51b81526004016106449061283c565b610aa9610f16565b15610ac65760405162461bcd60e51b815260040161064490612819565b610ae9604051806060016040528060318152602001612c88603191396001611260565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a1565b670de0b6b3a764000090565b60008486336001600160a01b03167f8abd2ec2e0a10c82f5b60ea00455fa96c41fd144f225fcc52b8d83d94f803ed8878787604051610b61939291906122bf565b60405180910390a46000610b788787878787611293565b90506000610b846112d4565b60008381526020919091526040902054905080610bb35760405162461bcd60e51b81526004016106449061277d565b6000610bbd61153e565b60008481526020919091526040902054905080610bec5760405162461bcd60e51b8152600401610644906129fb565b6000610bf6610d61565b8201905081811015610c1a5760405162461bcd60e51b815260040161064490612510565b80421015610c3a5760405162461bcd60e51b815260040161064490612547565b6000610c446112d4565b60008681526020919091526040902055509198975050505050505050565b6000610c6c61121f565b6001600160a01b0392909216600090815260209290925250604090205460ff1690565b6000610c996112d4565b600092835260205250604090205490565b60008486336001600160a01b03167f2e00dccd686fd6823ec7dc3e125582aa82881b6ff5f6b5a73856e1ea8338a3be878787604051610ceb939291906122bf565b60405180910390a46000610d028787878787611293565b90506000610d0e6112d4565b60008381526020919091526040902054905080610d3d5760405162461bcd60e51b81526004016106449061277d565b42610d4661153e565b60008481526020919091526040902055509695505050505050565b60006105c16040518060600160405280602d8152602001612bf1602d913961114f565b61077081611561565b610d9633610c62565b610db25760405162461bcd60e51b815260040161064490612952565b6000610dbc6111d5565b600101549050610dcc838361163c565b82826004818110610dd957fe5b90506020020135610de8611059565b14610e055760405162461bcd60e51b8152600401610644906124b6565b610e198383610e126111d5565b919061165c565b6005610e396001610e2c85848189612a94565b610e346111b2565b611706565b01610e536000610e4b85848189612a94565b610e346112d4565b01828114610e735760405162461bcd60e51b815260040161064490612746565b6000610e7d6111d5565b90507fd342ddf7a308dec111745b00315c14b7efb2bdae570a6856e088ed0c65a3576c816000015482600101548360020154604051610ebe93929190612a7e565b60405180910390a182600101816001015414610eec5760405162461bcd60e51b8152600401610644906125e7565b5050505050565b60006105c1604051806060016040528060238152602001612bce6023913961114f565b60006105c1604051806060016040528060318152602001612c886031913961114f565b61077081611afb565b610f4a611bf0565b565b6000610f566111d5565b54905090565b610f6533611183565b610f815760405162461bcd60e51b81526004016106449061283c565b610f8a81610c62565b15610770576000610f9961121f565b6001600160a01b0383166000908152602091909152604090819020805460ff191692151592909217909155517fec5f6c3a91a1efb1f9a308bb33c6e9e66bf9090fad0732f127dfdbf516d0625d90610767908390612297565b6000610c9961153e565b6000610c996111b2565b61100e610f16565b1561102b5760405162461bcd60e51b815260040161064490612819565b61103433611183565b6110505760405162461bcd60e51b81526004016106449061283c565b61077081611c45565b60006105c1604051806060016040528060218152602001612c1e6021913961114f565b610f4a611c67565b61108c610f16565b156110a95760405162461bcd60e51b815260040161064490612819565b6110b233611183565b6110ce5760405162461bcd60e51b81526004016106449061283c565b337f600a61c1b32ac42fb2fe76e8fc7582a98106668fc16dcd85567cd3937363e49b6110f8610ef3565b83604051611107929190612366565b60405180910390a261077081611cea565b60408051808201909152601981527f537461726b576172655f537461726b6e65745f323032335f3600000000000000602082015290565b600080826040516020016111639190612216565b60408051601f198184030181529190528051602090910120549392505050565b60008061118e611d0c565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60006105c1604051806060016040528060238152602001612c3f60239139611d55565b600080604051806060016040528060278152602001612ba7602791396040516020016112019190612216565b60408051601f19818403018152919052805160209091012092915050565b60006105c1604051806060016040528060288152602001612b4f60289139611d55565b610770604051806060016040528060218152602001612c1e60219139825b6000826040516020016112739190612216565b604051602081830303815290604052805190602001209050818155505050565b6040516000906112b390339088908590899088908a90829060200161225f565b60405160208183030381529060405280519060200120905095945050505050565b60006105c1604051806060016040528060268152602001612c6260269139611d55565b611309836001600160a01b0316611d88565b6113255760405162461bcd60e51b8152600401610644906123d6565b60006060846001600160a01b031663439fab9160e01b858560405160240161134e929190612374565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161138c9190612216565b600060405180830381855af49150503d80600081146113c7576040519150601f19603f3d011682016040523d82523d6000602084013e6113cc565b606091505b50915091508181906113f15760405162461bcd60e51b815260040161064491906123a3565b5080518190156114145760405162461bcd60e51b815260040161064491906123a3565b505050505050565b6000611426610ef3565b1515905090565b60c0811461144d5760405162461bcd60e51b81526004016106449061242d565b600061145c6020828486612abf565b8101906114699190611f9a565b9050806114885760405162461bcd60e51b8152600401610644906126e3565b505050565b600080600061149a611ed4565b6114a68587018761201f565b93509350935093506114b784611cea565b6114c083611d8e565b6114d2816114cc6111d5565b90611db0565b6114db82611242565b61141462069780611c45565b60006114f1611d0c565b6001810154909150600160a01b900460ff16156115205760405162461bcd60e51b8152600401610644906124e3565b60018101805460ff60a01b1916600160a01b17905561077033611dca565b60006105c1604051806060016040528060308152602001612b7760309139611d55565b61156a33611183565b6115865760405162461bcd60e51b81526004016106449061283c565b336001600160a01b03821614156115af5760405162461bcd60e51b8152600401610644906129a7565b60006115b9611d0c565b90506115c482611183565b6115e05760405162461bcd60e51b8152600401610644906129d5565b6001600160a01b03821660009081526020829052604090819020805460ff19169055517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a2959990611630908490612297565b60405180910390a15050565b60058111610a785760405162461bcd60e51b8152600401610644906127ab565b6001838101805490910190558181600281811061167557fe5b9050602002013583600101541461169e5760405162461bcd60e51b815260040161064490612979565b818160038181106116ab57fe5b60200291909101356002850155503660006116c68484611e50565b915091506116d48282611e6c565b8554146116f35760405162461bcd60e51b815260040161064490612487565b6116fd8282611e8a565b90945550505050565b6000808484600081811061171657fe5b905060200201359050634000000081106117425760405162461bcd60e51b81526004016106449061270f565b6001818101600088611755576004611758565b60025b905060005b82841015611a4a578382018881106117875760405162461bcd60e51b815260040161064490612402565b60008a8a8381811061179557fe5b905060200201359050634000000081106117c15760405162461bcd60e51b81526004016106449061264c565b8181016001018a8111156117e75760405162461bcd60e51b8152600401610644906127e2565b8c156118c55760008c8c8990849261180193929190612a94565b604051602001611812929190612201565b6040516020818303038152906040528051906020012090508c8c60018a0181811061183957fe5b905060200201356001600160a01b03168d8d60008b0181811061185857fe5b905060200201357f4264ac208b5fde633ccdd42e0f12c3d6d443a4f3779bbf886925b94665b63a228f8f60038d0190879261189593929190612a94565b6040516118a39291906122ab565b60405180910390a3600090815260208b90526040902080546001019055611a40565b60008c8c899084926118d993929190612a94565b6040516020016118ea929190612201565b60408051601f1981840301815291815281516020928301206000818152928e90529120549091508061192e5760405162461bcd60e51b8152600401610644906128ee565b600091825260208c9052604082208290559490940160001901938c8c60028a0181811061195757fe5b90506020020135905060608d8d60058b0190859261197793929190612a94565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505090508d8d60038b018181106119c857fe5b905060200201358e8e60018c018181106119de57fe5b905060200201358f8f60008d018181106119f457fe5b905060200201356001600160a01b03167f9592d37825c744e33fa80c469683bbd04d336241bb600b574758efd182abe26a8486604051611a3592919061230a565b60405180910390a450505b955061175d915050565b828414611a695760405162461bcd60e51b81526004016106449061270f565b8015611aed576000336001600160a01b031682604051611a8890612232565b60006040518083038185875af1925050503d8060008114611ac5576040519150601f19603f3d011682016040523d82523d6000602084013e611aca565b606091505b5050905080611aeb5760405162461bcd60e51b815260040161064490612925565b505b509198975050505050505050565b611b0433611183565b611b205760405162461bcd60e51b81526004016106449061283c565b6000611b2a611d0c565b90506001600160a01b038216611b525760405162461bcd60e51b815260040161064490612865565b611b5b82611183565b15611b785760405162461bcd60e51b81526004016106449061245d565b60018101546001600160a01b031615611ba35760405162461bcd60e51b8152600401610644906128b7565b6001810180546001600160a01b0319166001600160a01b0384161790556040517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a690611630908490612297565b6000611bfa611d0c565b60018101549091506001600160a01b03163314611c295760405162461bcd60e51b8152600401610644906126ac565b611c3233611dca565b60010180546001600160a01b0319169055565b6107706040518060600160405280602d8152602001612bf1602d913982611260565b611c7033611183565b611c8c5760405162461bcd60e51b81526004016106449061283c565b6000611c96611d0c565b60018101549091506001600160a01b031615610770576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b610770604051806060016040528060238152602001612bce6023913982611260565b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020016112019190612216565b60008082604051602001611d699190612216565b60408051601f1981840301815291905280516020909101209392505050565b3b151590565b610770604051806060016040528060228152602001612b2d6022913982611e99565b805182556020810151600183015560400151600290910155565b611dd381611183565b15611df05760405162461bcd60e51b81526004016106449061245d565b6000611dfa611d0c565b6001600160a01b03831660009081526020829052604090819020805460ff19166001179055519091507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d290611630908490612297565b366000611e606002828587612a94565b915091505b9250929050565b600082826000818110611e7b57fe5b90506020020135905092915050565b600082826001818110611e7b57fe5b6000611ea48361114f565b6001600160a01b031614611eca5760405162461bcd60e51b81526004016106449061258b565b610a788282611260565b60405180606001604052806000815260200160008152602001600081525090565b60008083601f840112611f06578182fd5b50813567ffffffffffffffff811115611f1d578182fd5b6020830191508360208083028501011115611e6557600080fd5b600060208284031215611f48578081fd5b8135611f5381612b17565b9392505050565b60008060208385031215611f6c578081fd5b823567ffffffffffffffff811115611f82578182fd5b611f8e85828601611ef5565b90969095509350505050565b600060208284031215611fab578081fd5b5035919050565b60008060208385031215611fc4578182fd5b823567ffffffffffffffff80821115611fdb578384fd5b818501915085601f830112611fee578384fd5b813581811115611ffc578485fd5b86602082850101111561200d578485fd5b60209290920196919550909350505050565b60008060008084860360c0811215612035578283fd5b85359450602086013561204781612b17565b9350604086013592506060605f1982011215612061578182fd5b506040516060810181811067ffffffffffffffff82111715612081578283fd5b8060405250606086013581526080860135602082015260a086013560408201528091505092959194509250565b6000806000604084860312156120c2578283fd5b83359250602084013567ffffffffffffffff8111156120df578283fd5b6120eb86828701611ef5565b9497909650939450505050565b6000806000806060858703121561210d578384fd5b8435935060208501359250604085013567ffffffffffffffff811115612131578283fd5b61213d87828801611ef5565b95989497509550505050565b600080600080600060808688031215612160578081fd5b8535945060208601359350604086013567ffffffffffffffff811115612184578182fd5b61219088828901611ef5565b96999598509660600135949350505050565b81835260006001600160fb1b038311156121ba578081fd5b6020830280836020870137939093016020019283525090919050565b60006001600160fb1b038311156121eb578081fd5b6020830280838637939093019283525090919050565b600061220e8284866121d6565b949350505050565b60008251612228818460208701612ae7565b9190910192915050565b90565b60008682528560208301528460408301526122546060830184866121d6565b979650505050505050565b600088825287602083015286604083015285606083015284608083015261228a60a0830184866121d6565b9998505050505050505050565b6001600160a01b0391909116815260200190565b60006020825261220e6020830184866121a2565b6000604082526122d36040830185876121a2565b9050826020830152949350505050565b6000606082526122f76060830186886121a2565b6020830194909452506040015292915050565b604080825283519082018190526000906020906060840190828701845b8281101561234357815184529284019290840190600101612327565b50505092019290925292915050565b901515815260200190565b90815260200190565b918252602082015260400190565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b60006020825282518060208401526123c2816040850160208701612ae7565b601f01601f19169190910160400192915050565b602080825260129082015271115250d7d393d517d057d0d3d395149050d560721b604082015260600190565b602080825260119082015270135154d4d051d157d513d3d7d4d213d495607a1b604082015260600190565b602080825260169082015275494c4c4547414c5f494e49545f444154415f53495a4560501b604082015260600190565b60208082526010908201526f20a62922a0a22cafa3a7ab22a92727a960811b604082015260600190565b6020808252601590820152741253959053125117d41491559253d554d7d493d3d5605a1b604082015260600190565b6020808252601390820152720929cac82989288be869e9c8c928ebe9082a69606b1b604082015260600190565b6020808252601390820152721053149150511657d253925512505312569151606a1b604082015260600190565b6020808252601c908201527f43414e43454c5f414c4c4f5745445f54494d455f4f564552464c4f5700000000604082015260600190565b60208082526024908201527f4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f414c4c4f57454460408201526317d6515560e21b606082015260800190565b6020808252600b908201526a1053149150511657d4d15560aa1b604082015260600190565b60208082526017908201527f4d41585f4c315f4d53475f4645455f4558434545444544000000000000000000604082015260600190565b6020808252601a908201527f494e56414c49445f46494e414c5f424c4f434b5f4e554d424552000000000000604082015260600190565b602080825260149082015273554e45585045435445445f494e49545f4441544160601b604082015260600190565b6020808252601690820152750929cac82989288bea082b2989e8288be988a9c8ea8960531b604082015260600190565b6020808252601690820152751112549150d517d0d0531317d11254d0531313d5d15160521b604082015260600190565b60208082526017908201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604082015260600190565b6020808252601290820152712120a22fa4a724aa24a0a624ad20aa24a7a760711b604082015260600190565b6020808252601c908201527f494e56414c49445f4d4553534147455f5345474d454e545f53495a4500000000604082015260600190565b60208082526018908201527f535441524b4e45545f4f55545055545f544f4f5f4c4f4e470000000000000000604082015260600190565b6020808252601490820152731393d7d35154d4d051d157d513d7d0d05390d15360621b604082015260600190565b60208082526019908201527f535441524b4e45545f4f55545055545f544f4f5f53484f525400000000000000604082015260600190565b60208082526019908201527f5452554e43415445445f4d4553534147455f5041594c4f414400000000000000604082015260600190565b60208082526009908201526811925390531256915160ba1b604082015260600190565b6020808252600f908201526e4f4e4c595f474f5645524e414e434560881b604082015260600190565b6020808252600b908201526a4241445f4144445245535360a81b604082015260600190565b6020808252601390820152721253925517d110551057d513d3d7d4d3505313606a1b604082015260600190565b60208082526017908201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604082015260600190565b6020808252601a908201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d45000000000000604082015260600190565b60208082526013908201527211551217d514905394d1915497d19052531151606a1b604082015260600190565b6020808252600d908201526c27a7262cafa7a822a920aa27a960991b604082015260600190565b60208082526014908201527324a72b20a624a22fa12627a1a5afa72aa6a122a960611b604082015260600190565b602080825260149082015273474f5645524e4f525f53454c465f52454d4f564560601b604082015260600190565b6020808252600c908201526b2727aa2fa3a7ab22a92727a960a11b604082015260600190565b60208082526022908201527f4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f52455155455354604082015261115160f21b606082015260800190565b60208082526021908201527f4c315f4d53475f4645455f4d5553545f42455f475245415445525f5448414e5f6040820152600360fc1b606082015260800190565b9283526020830191909152604082015260600190565b60008085851115612aa3578182fd5b83861115612aaf578182fd5b5050602083020193919092039150565b60008085851115612ace578081fd5b83861115612ada578081fd5b5050820193919092039150565b60005b83811015612b02578181015183820152602001612aea565b83811115612b11576000848401525b50505050565b6001600160a01b038116811461077057600080fdfe535441524b4e45545f312e305f494e49545f56455249464945525f41444452455353535441524b4e45545f312e305f524f4c45535f4f50455241544f52535f4d415050494e475f544147535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f4d41505050494e47535441524b4e45545f312e305f494e49545f535441524b4e45545f53544154455f535452554354535441524b4e45545f312e305f494e49545f50524f4752414d5f484153485f55494e54535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f44454c4159535441524b4e45545f312e305f535441524b4e45545f434f4e4649475f48415348535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e475f5632535441524b574152455f434f4e5452414354535f474f564552454e45445f46494e414c495a41424c455f312e305f544147a2646970667358221220b7354eb19765e0a04f95654bf866ab83a5bc1563ff5165428e85156835ff95b764736f6c634300060c0033", - "sourceMap": "729:7138:37:-:0;;;;;;;;;;;;-1:-1:-1;489:4:4;473:21;;;;;;729:7138:37;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106101e35760003560e01c80638303bd8a1161010257806396115bc211610095578063e1f1176d11610064578063e1f1176d14610515578063e37fec251461052a578063e87e73321461053f578063eeb728661461055f576101e3565b806396115bc2146104955780639be446bf146104b5578063a46efaf3146104d5578063c99d397f146104f5576101e3565b80638d4e4083116100d15780638d4e40831461043657806391a66a261461044b578063946be3ed1461046b5780639588eca214610480576101e3565b80638303bd8a146103cc57806384f921cd146103e1578063853e2461146104015780638a9bf09014610421576101e3565b80633e3aa6c51161017a5780636170ff1b116101495780636170ff1b1461034c5780636d70f7ae1461036c57806377c7d7a91461038c5780637a98660b146103ac576101e3565b80633e3aa6c5146102e1578063439fab91146103025780634bb278f31461032257806354eccba414610337576101e3565b806335befa5d116101b657806335befa5d146102755780633682a4501461028a578063382d83e3146102ac5780633d07b336146102c1576101e3565b8063018cccdf146101e857806301a01590146102135780632c9dd5c01461024057806333eeb14714610260575b600080fd5b3480156101f457600080fd5b506101fd610581565b60405161020a919061235d565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004611f37565b6105c6565b60405161020a9190612352565b34801561024c57600080fd5b506101fd61025b3660046120ae565b6105d7565b34801561026c57600080fd5b506102336106ba565b34801561028157600080fd5b506101fd6106bf565b34801561029657600080fd5b506102aa6102a5366004611f37565b6106d2565b005b3480156102b857600080fd5b506101fd610773565b3480156102cd57600080fd5b506102aa6102dc366004611f9a565b610786565b6102f46102ef3660046120f8565b61081a565b60405161020a929190612366565b34801561030e57600080fd5b506102aa61031d366004611fb2565b610934565b34801561032e57600080fd5b506102aa610a7c565b34801561034357600080fd5b506101fd610b14565b34801561035857600080fd5b506101fd610367366004612149565b610b20565b34801561037857600080fd5b50610233610387366004611f37565b610c62565b34801561039857600080fd5b506101fd6103a7366004611f9a565b610c8f565b3480156103b857600080fd5b506101fd6103c7366004612149565b610caa565b3480156103d857600080fd5b506101fd610d61565b3480156103ed57600080fd5b506102aa6103fc366004611f37565b610d84565b34801561040d57600080fd5b506102aa61041c366004611f5a565b610d8d565b34801561042d57600080fd5b506101fd610ef3565b34801561044257600080fd5b50610233610f16565b34801561045757600080fd5b506102aa610466366004611f37565b610f39565b34801561047757600080fd5b506102aa610f42565b34801561048c57600080fd5b506101fd610f4c565b3480156104a157600080fd5b506102aa6104b0366004611f37565b610f5c565b3480156104c157600080fd5b506101fd6104d0366004611f9a565b610ff2565b3480156104e157600080fd5b506101fd6104f0366004611f9a565b610ffc565b34801561050157600080fd5b506102aa610510366004611f9a565b611006565b34801561052157600080fd5b506101fd611059565b34801561053657600080fd5b506102aa61107c565b34801561054b57600080fd5b506102aa61055a366004611f9a565b611084565b34801561056b57600080fd5b50610574611118565b60405161020a91906123a3565b60006105c16040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525061114f565b905090565b60006105d182611183565b92915050565b60405160009081906105f59086903390869088908290602001612235565b60405160208183030381529060405280519060200120905060006106176111b2565b600083815260209190915260409020541161064d5760405162461bcd60e51b8152600401610644906128ee565b60405180910390fd5b336001600160a01b0316857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b186866040516106899291906122ab565b60405180910390a3600161069b6111b2565b6000838152602091909152604090208054919091039055949350505050565b600090565b60006106c96111d5565b60010154905090565b6106db33611183565b6106f75760405162461bcd60e51b81526004016106449061283c565b61070081610c62565b61077057600161070e61121f565b6001600160a01b0383166000908152602091909152604090819020805460ff191692151592909217909155517f50a18c352ee1c02ffe058e15c2eb6e58be387c81e73cc1e17035286e54c19a5790610767908390612297565b60405180910390a15b50565b600061077d6111d5565b60020154905090565b61078e610f16565b156107ab5760405162461bcd60e51b815260040161064490612819565b6107b433611183565b6107d05760405162461bcd60e51b81526004016106449061283c565b337f393c6beb5756a944b2967f15f31ff671e312e945d7a84fd3bdcfd6b408b2dc796107fa611059565b83604051610809929190612366565b60405180910390a261077081611242565b6000806000341161083d5760405162461bcd60e51b815260040161064490612a3d565b610845610b14565b3411156108645760405162461bcd60e51b8152600401610644906125b0565b600061086e610581565b90506108b26040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525082600101611260565b8587336001600160a01b03167fdb80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b888886346040516108f394939291906122e3565b60405180910390a4600061090a8888888886611293565b9050346001016109186112d4565b6000838152602091909152604090205597909650945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630141561097d5760405162461bcd60e51b81526004016106449061267c565b60006109876106ba565b602090810291508101808310156109b05760405162461bcd60e51b81526004016106449061288a565b60006109be82848688612abf565b8101906109cb9190611f37565b90503660006109dc8582888a612abf565b915091506109ea8282610a78565b3660006109f98887818c612abf565b90925090506001600160a01b03851615610a2457610a188583836112f7565b50505050505050610a78565b610a2c61141c565b15610a54578015610a4f5760405162461bcd60e51b81526004016106449061261e565b610a70565b610a5e828261142d565b610a68828261148d565b610a706114e7565b505050505050505b5050565b610a8533611183565b610aa15760405162461bcd60e51b81526004016106449061283c565b610aa9610f16565b15610ac65760405162461bcd60e51b815260040161064490612819565b610ae9604051806060016040528060318152602001612c88603191396001611260565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a1565b670de0b6b3a764000090565b60008486336001600160a01b03167f8abd2ec2e0a10c82f5b60ea00455fa96c41fd144f225fcc52b8d83d94f803ed8878787604051610b61939291906122bf565b60405180910390a46000610b788787878787611293565b90506000610b846112d4565b60008381526020919091526040902054905080610bb35760405162461bcd60e51b81526004016106449061277d565b6000610bbd61153e565b60008481526020919091526040902054905080610bec5760405162461bcd60e51b8152600401610644906129fb565b6000610bf6610d61565b8201905081811015610c1a5760405162461bcd60e51b815260040161064490612510565b80421015610c3a5760405162461bcd60e51b815260040161064490612547565b6000610c446112d4565b60008681526020919091526040902055509198975050505050505050565b6000610c6c61121f565b6001600160a01b0392909216600090815260209290925250604090205460ff1690565b6000610c996112d4565b600092835260205250604090205490565b60008486336001600160a01b03167f2e00dccd686fd6823ec7dc3e125582aa82881b6ff5f6b5a73856e1ea8338a3be878787604051610ceb939291906122bf565b60405180910390a46000610d028787878787611293565b90506000610d0e6112d4565b60008381526020919091526040902054905080610d3d5760405162461bcd60e51b81526004016106449061277d565b42610d4661153e565b60008481526020919091526040902055509695505050505050565b60006105c16040518060600160405280602d8152602001612bf1602d913961114f565b61077081611561565b610d9633610c62565b610db25760405162461bcd60e51b815260040161064490612952565b6000610dbc6111d5565b600101549050610dcc838361163c565b82826004818110610dd957fe5b90506020020135610de8611059565b14610e055760405162461bcd60e51b8152600401610644906124b6565b610e198383610e126111d5565b919061165c565b6005610e396001610e2c85848189612a94565b610e346111b2565b611706565b01610e536000610e4b85848189612a94565b610e346112d4565b01828114610e735760405162461bcd60e51b815260040161064490612746565b6000610e7d6111d5565b90507fd342ddf7a308dec111745b00315c14b7efb2bdae570a6856e088ed0c65a3576c816000015482600101548360020154604051610ebe93929190612a7e565b60405180910390a182600101816001015414610eec5760405162461bcd60e51b8152600401610644906125e7565b5050505050565b60006105c1604051806060016040528060238152602001612bce6023913961114f565b60006105c1604051806060016040528060318152602001612c886031913961114f565b61077081611afb565b610f4a611bf0565b565b6000610f566111d5565b54905090565b610f6533611183565b610f815760405162461bcd60e51b81526004016106449061283c565b610f8a81610c62565b15610770576000610f9961121f565b6001600160a01b0383166000908152602091909152604090819020805460ff191692151592909217909155517fec5f6c3a91a1efb1f9a308bb33c6e9e66bf9090fad0732f127dfdbf516d0625d90610767908390612297565b6000610c9961153e565b6000610c996111b2565b61100e610f16565b1561102b5760405162461bcd60e51b815260040161064490612819565b61103433611183565b6110505760405162461bcd60e51b81526004016106449061283c565b61077081611c45565b60006105c1604051806060016040528060218152602001612c1e6021913961114f565b610f4a611c67565b61108c610f16565b156110a95760405162461bcd60e51b815260040161064490612819565b6110b233611183565b6110ce5760405162461bcd60e51b81526004016106449061283c565b337f600a61c1b32ac42fb2fe76e8fc7582a98106668fc16dcd85567cd3937363e49b6110f8610ef3565b83604051611107929190612366565b60405180910390a261077081611cea565b60408051808201909152601981527f537461726b576172655f537461726b6e65745f323032335f3600000000000000602082015290565b600080826040516020016111639190612216565b60408051601f198184030181529190528051602090910120549392505050565b60008061118e611d0c565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60006105c1604051806060016040528060238152602001612c3f60239139611d55565b600080604051806060016040528060278152602001612ba7602791396040516020016112019190612216565b60408051601f19818403018152919052805160209091012092915050565b60006105c1604051806060016040528060288152602001612b4f60289139611d55565b610770604051806060016040528060218152602001612c1e60219139825b6000826040516020016112739190612216565b604051602081830303815290604052805190602001209050818155505050565b6040516000906112b390339088908590899088908a90829060200161225f565b60405160208183030381529060405280519060200120905095945050505050565b60006105c1604051806060016040528060268152602001612c6260269139611d55565b611309836001600160a01b0316611d88565b6113255760405162461bcd60e51b8152600401610644906123d6565b60006060846001600160a01b031663439fab9160e01b858560405160240161134e929190612374565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161138c9190612216565b600060405180830381855af49150503d80600081146113c7576040519150601f19603f3d011682016040523d82523d6000602084013e6113cc565b606091505b50915091508181906113f15760405162461bcd60e51b815260040161064491906123a3565b5080518190156114145760405162461bcd60e51b815260040161064491906123a3565b505050505050565b6000611426610ef3565b1515905090565b60c0811461144d5760405162461bcd60e51b81526004016106449061242d565b600061145c6020828486612abf565b8101906114699190611f9a565b9050806114885760405162461bcd60e51b8152600401610644906126e3565b505050565b600080600061149a611ed4565b6114a68587018761201f565b93509350935093506114b784611cea565b6114c083611d8e565b6114d2816114cc6111d5565b90611db0565b6114db82611242565b61141462069780611c45565b60006114f1611d0c565b6001810154909150600160a01b900460ff16156115205760405162461bcd60e51b8152600401610644906124e3565b60018101805460ff60a01b1916600160a01b17905561077033611dca565b60006105c1604051806060016040528060308152602001612b7760309139611d55565b61156a33611183565b6115865760405162461bcd60e51b81526004016106449061283c565b336001600160a01b03821614156115af5760405162461bcd60e51b8152600401610644906129a7565b60006115b9611d0c565b90506115c482611183565b6115e05760405162461bcd60e51b8152600401610644906129d5565b6001600160a01b03821660009081526020829052604090819020805460ff19169055517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a2959990611630908490612297565b60405180910390a15050565b60058111610a785760405162461bcd60e51b8152600401610644906127ab565b6001838101805490910190558181600281811061167557fe5b9050602002013583600101541461169e5760405162461bcd60e51b815260040161064490612979565b818160038181106116ab57fe5b60200291909101356002850155503660006116c68484611e50565b915091506116d48282611e6c565b8554146116f35760405162461bcd60e51b815260040161064490612487565b6116fd8282611e8a565b90945550505050565b6000808484600081811061171657fe5b905060200201359050634000000081106117425760405162461bcd60e51b81526004016106449061270f565b6001818101600088611755576004611758565b60025b905060005b82841015611a4a578382018881106117875760405162461bcd60e51b815260040161064490612402565b60008a8a8381811061179557fe5b905060200201359050634000000081106117c15760405162461bcd60e51b81526004016106449061264c565b8181016001018a8111156117e75760405162461bcd60e51b8152600401610644906127e2565b8c156118c55760008c8c8990849261180193929190612a94565b604051602001611812929190612201565b6040516020818303038152906040528051906020012090508c8c60018a0181811061183957fe5b905060200201356001600160a01b03168d8d60008b0181811061185857fe5b905060200201357f4264ac208b5fde633ccdd42e0f12c3d6d443a4f3779bbf886925b94665b63a228f8f60038d0190879261189593929190612a94565b6040516118a39291906122ab565b60405180910390a3600090815260208b90526040902080546001019055611a40565b60008c8c899084926118d993929190612a94565b6040516020016118ea929190612201565b60408051601f1981840301815291815281516020928301206000818152928e90529120549091508061192e5760405162461bcd60e51b8152600401610644906128ee565b600091825260208c9052604082208290559490940160001901938c8c60028a0181811061195757fe5b90506020020135905060608d8d60058b0190859261197793929190612a94565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505090508d8d60038b018181106119c857fe5b905060200201358e8e60018c018181106119de57fe5b905060200201358f8f60008d018181106119f457fe5b905060200201356001600160a01b03167f9592d37825c744e33fa80c469683bbd04d336241bb600b574758efd182abe26a8486604051611a3592919061230a565b60405180910390a450505b955061175d915050565b828414611a695760405162461bcd60e51b81526004016106449061270f565b8015611aed576000336001600160a01b031682604051611a8890612232565b60006040518083038185875af1925050503d8060008114611ac5576040519150601f19603f3d011682016040523d82523d6000602084013e611aca565b606091505b5050905080611aeb5760405162461bcd60e51b815260040161064490612925565b505b509198975050505050505050565b611b0433611183565b611b205760405162461bcd60e51b81526004016106449061283c565b6000611b2a611d0c565b90506001600160a01b038216611b525760405162461bcd60e51b815260040161064490612865565b611b5b82611183565b15611b785760405162461bcd60e51b81526004016106449061245d565b60018101546001600160a01b031615611ba35760405162461bcd60e51b8152600401610644906128b7565b6001810180546001600160a01b0319166001600160a01b0384161790556040517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a690611630908490612297565b6000611bfa611d0c565b60018101549091506001600160a01b03163314611c295760405162461bcd60e51b8152600401610644906126ac565b611c3233611dca565b60010180546001600160a01b0319169055565b6107706040518060600160405280602d8152602001612bf1602d913982611260565b611c7033611183565b611c8c5760405162461bcd60e51b81526004016106449061283c565b6000611c96611d0c565b60018101549091506001600160a01b031615610770576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b610770604051806060016040528060238152602001612bce6023913982611260565b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020016112019190612216565b60008082604051602001611d699190612216565b60408051601f1981840301815291905280516020909101209392505050565b3b151590565b610770604051806060016040528060228152602001612b2d6022913982611e99565b805182556020810151600183015560400151600290910155565b611dd381611183565b15611df05760405162461bcd60e51b81526004016106449061245d565b6000611dfa611d0c565b6001600160a01b03831660009081526020829052604090819020805460ff19166001179055519091507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d290611630908490612297565b366000611e606002828587612a94565b915091505b9250929050565b600082826000818110611e7b57fe5b90506020020135905092915050565b600082826001818110611e7b57fe5b6000611ea48361114f565b6001600160a01b031614611eca5760405162461bcd60e51b81526004016106449061258b565b610a788282611260565b60405180606001604052806000815260200160008152602001600081525090565b60008083601f840112611f06578182fd5b50813567ffffffffffffffff811115611f1d578182fd5b6020830191508360208083028501011115611e6557600080fd5b600060208284031215611f48578081fd5b8135611f5381612b17565b9392505050565b60008060208385031215611f6c578081fd5b823567ffffffffffffffff811115611f82578182fd5b611f8e85828601611ef5565b90969095509350505050565b600060208284031215611fab578081fd5b5035919050565b60008060208385031215611fc4578182fd5b823567ffffffffffffffff80821115611fdb578384fd5b818501915085601f830112611fee578384fd5b813581811115611ffc578485fd5b86602082850101111561200d578485fd5b60209290920196919550909350505050565b60008060008084860360c0811215612035578283fd5b85359450602086013561204781612b17565b9350604086013592506060605f1982011215612061578182fd5b506040516060810181811067ffffffffffffffff82111715612081578283fd5b8060405250606086013581526080860135602082015260a086013560408201528091505092959194509250565b6000806000604084860312156120c2578283fd5b83359250602084013567ffffffffffffffff8111156120df578283fd5b6120eb86828701611ef5565b9497909650939450505050565b6000806000806060858703121561210d578384fd5b8435935060208501359250604085013567ffffffffffffffff811115612131578283fd5b61213d87828801611ef5565b95989497509550505050565b600080600080600060808688031215612160578081fd5b8535945060208601359350604086013567ffffffffffffffff811115612184578182fd5b61219088828901611ef5565b96999598509660600135949350505050565b81835260006001600160fb1b038311156121ba578081fd5b6020830280836020870137939093016020019283525090919050565b60006001600160fb1b038311156121eb578081fd5b6020830280838637939093019283525090919050565b600061220e8284866121d6565b949350505050565b60008251612228818460208701612ae7565b9190910192915050565b90565b60008682528560208301528460408301526122546060830184866121d6565b979650505050505050565b600088825287602083015286604083015285606083015284608083015261228a60a0830184866121d6565b9998505050505050505050565b6001600160a01b0391909116815260200190565b60006020825261220e6020830184866121a2565b6000604082526122d36040830185876121a2565b9050826020830152949350505050565b6000606082526122f76060830186886121a2565b6020830194909452506040015292915050565b604080825283519082018190526000906020906060840190828701845b8281101561234357815184529284019290840190600101612327565b50505092019290925292915050565b901515815260200190565b90815260200190565b918252602082015260400190565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b60006020825282518060208401526123c2816040850160208701612ae7565b601f01601f19169190910160400192915050565b602080825260129082015271115250d7d393d517d057d0d3d395149050d560721b604082015260600190565b602080825260119082015270135154d4d051d157d513d3d7d4d213d495607a1b604082015260600190565b602080825260169082015275494c4c4547414c5f494e49545f444154415f53495a4560501b604082015260600190565b60208082526010908201526f20a62922a0a22cafa3a7ab22a92727a960811b604082015260600190565b6020808252601590820152741253959053125117d41491559253d554d7d493d3d5605a1b604082015260600190565b6020808252601390820152720929cac82989288be869e9c8c928ebe9082a69606b1b604082015260600190565b6020808252601390820152721053149150511657d253925512505312569151606a1b604082015260600190565b6020808252601c908201527f43414e43454c5f414c4c4f5745445f54494d455f4f564552464c4f5700000000604082015260600190565b60208082526024908201527f4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f414c4c4f57454460408201526317d6515560e21b606082015260800190565b6020808252600b908201526a1053149150511657d4d15560aa1b604082015260600190565b60208082526017908201527f4d41585f4c315f4d53475f4645455f4558434545444544000000000000000000604082015260600190565b6020808252601a908201527f494e56414c49445f46494e414c5f424c4f434b5f4e554d424552000000000000604082015260600190565b602080825260149082015273554e45585045435445445f494e49545f4441544160601b604082015260600190565b6020808252601690820152750929cac82989288bea082b2989e8288be988a9c8ea8960531b604082015260600190565b6020808252601690820152751112549150d517d0d0531317d11254d0531313d5d15160521b604082015260600190565b60208082526017908201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604082015260600190565b6020808252601290820152712120a22fa4a724aa24a0a624ad20aa24a7a760711b604082015260600190565b6020808252601c908201527f494e56414c49445f4d4553534147455f5345474d454e545f53495a4500000000604082015260600190565b60208082526018908201527f535441524b4e45545f4f55545055545f544f4f5f4c4f4e470000000000000000604082015260600190565b6020808252601490820152731393d7d35154d4d051d157d513d7d0d05390d15360621b604082015260600190565b60208082526019908201527f535441524b4e45545f4f55545055545f544f4f5f53484f525400000000000000604082015260600190565b60208082526019908201527f5452554e43415445445f4d4553534147455f5041594c4f414400000000000000604082015260600190565b60208082526009908201526811925390531256915160ba1b604082015260600190565b6020808252600f908201526e4f4e4c595f474f5645524e414e434560881b604082015260600190565b6020808252600b908201526a4241445f4144445245535360a81b604082015260600190565b6020808252601390820152721253925517d110551057d513d3d7d4d3505313606a1b604082015260600190565b60208082526017908201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604082015260600190565b6020808252601a908201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d45000000000000604082015260600190565b60208082526013908201527211551217d514905394d1915497d19052531151606a1b604082015260600190565b6020808252600d908201526c27a7262cafa7a822a920aa27a960991b604082015260600190565b60208082526014908201527324a72b20a624a22fa12627a1a5afa72aa6a122a960611b604082015260600190565b602080825260149082015273474f5645524e4f525f53454c465f52454d4f564560601b604082015260600190565b6020808252600c908201526b2727aa2fa3a7ab22a92727a960a11b604082015260600190565b60208082526022908201527f4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f52455155455354604082015261115160f21b606082015260800190565b60208082526021908201527f4c315f4d53475f4645455f4d5553545f42455f475245415445525f5448414e5f6040820152600360fc1b606082015260800190565b9283526020830191909152604082015260600190565b60008085851115612aa3578182fd5b83861115612aaf578182fd5b5050602083020193919092039150565b60008085851115612ace578081fd5b83861115612ada578081fd5b5050820193919092039150565b60005b83811015612b02578181015183820152602001612aea565b83811115612b11576000848401525b50505050565b6001600160a01b038116811461077057600080fdfe535441524b4e45545f312e305f494e49545f56455249464945525f41444452455353535441524b4e45545f312e305f524f4c45535f4f50455241544f52535f4d415050494e475f544147535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f4d41505050494e47535441524b4e45545f312e305f494e49545f535441524b4e45545f53544154455f535452554354535441524b4e45545f312e305f494e49545f50524f4752414d5f484153485f55494e54535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f44454c4159535441524b4e45545f312e305f535441524b4e45545f434f4e4649475f48415348535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e475f5632535441524b574152455f434f4e5452414354535f474f564552454e45445f46494e414c495a41424c455f312e305f544147a2646970667358221220b7354eb19765e0a04f95654bf866ab83a5bc1563ff5165428e85156835ff95b764736f6c634300060c0033", - "sourceMap": "729:7138:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1928:133:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;599:112:16;;;;;;;;;;-1:-1:-1;599:112:16;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4556:497:17:-;;;;;;;;;;-1:-1:-1;4556:497:17;;;;;:::i;:::-;;:::i;778:86:10:-;;;;;;;;;;;;;:::i;5456:102:37:-;;;;;;;;;;;;;:::i;540:233:3:-;;;;;;;;;;-1:-1:-1;540:233:3;;;;;:::i;:::-;;:::i;:::-;;5617:99:37;;;;;;;;;;;;;:::i;2248:198::-;;;;;;;;;;-1:-1:-1;2248:198:37;;;;;:::i;:::-;;:::i;3591:844:17:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1486:1028:10:-;;;;;;;;;;-1:-1:-1;1486:1028:10;;;;;:::i;:::-;;:::i;705:144:1:-;;;;;;;;;;;;;:::i;1074:103:17:-;;;;;;;;;;;;;:::i;5649:1148::-;;;;;;;;;;-1:-1:-1;5649:1148:17;;;;;:::i;:::-;;:::i;1038:114:3:-;;;;;;;;;;-1:-1:-1;1038:114:3;;;;;:::i;:::-;;:::i;1324:122:17:-;;;;;;;;;;-1:-1:-1;1324:122:17;;;;;:::i;:::-;;:::i;5059:584::-;;;;;;;;;;-1:-1:-1;5059:584:17;;;;;:::i;:::-;;:::i;2067:152::-;;;;;;;;;;;;;:::i;840:121:16:-;;;;;;;;;;-1:-1:-1;840:121:16;;;;;:::i;:::-;;:::i;6058:1807:37:-;;;;;;;;;;-1:-1:-1;6058:1807:37;;;;;:::i;:::-;;:::i;2699:120::-;;;;;;;;;;;;;:::i;493:112:1:-;;;;;;;;;;;;;:::i;717:117:16:-;;;;;;;;;;-1:-1:-1;717:117:16;;;;;:::i;:::-;;:::i;967:81::-;;;;;;;;;;;;;:::i;5300:95:37:-;;;;;;;;;;;;;:::i;779:253:3:-;;;;;;;;;;-1:-1:-1;779:253:3;;;;;:::i;:::-;;:::i;2591:146:17:-;;;;;;;;;;-1:-1:-1;2591:146:17;;;;;:::i;:::-;;:::i;1452:122::-;;;;;;;;;;-1:-1:-1;1452:122:17;;;;;:::i;:::-;;:::i;2452:183:37:-;;;;;;;;;;-1:-1:-1;2452:183:37;;;;;:::i;:::-;;:::i;3415:118::-;;;;;;;;;;;;;:::i;1054:81:16:-;;;;;;;;;;;;;:::i;2037:205:37:-;;;;;;;;;;-1:-1:-1;2037:205:37;;;;;:::i;:::-;;:::i;5123:118::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1928:133:17:-;1979:7;2005:49;2031:22;;;;;;;;;;;;;;;;;2005:25;:49::i;:::-;1998:56;;1928:133;:::o;599:112:16:-;664:4;687:17;699:4;687:11;:17::i;:::-;680:24;599:112;-1:-1:-1;;599:112:16:o;4556:497:17:-;4750:75;;4686:7;;;;4750:75;;4767:11;;4788:10;;4801:7;;;;;;4750:75;;;:::i;:::-;;;;;;;;;;;;;4727:108;;;;;;4709:126;;4882:1;4854:16;:14;:16::i;:::-;:25;;;;;;;;;;;;;:29;4846:68;;;;-1:-1:-1;;;4846:68:17;;;;;;;:::i;:::-;;;;;;;;;4929:53;;4962:10;;4949:11;;4929:53;;;;4974:7;;;;4929:53;:::i;:::-;;;;;;;;5021:1;4992:16;:14;:16::i;:::-;:25;;;;;;;;;;;;:30;;;;;;;;:25;4556:497;-1:-1:-1;;;;4556:497:17:o;778:86:10:-;829:4;778:86;:::o;5456:102:37:-;5507:6;5532:7;:5;:7::i;:::-;:19;;;5525:26;;5456:102;:::o;540:233:3:-;292:23:8;304:10;292:11;:23::i;:::-;284:51;;;;-1:-1:-1;;;284:51:8;;;;;;;:::i;:::-;635:23:3::1;646:11;635:10;:23::i;:::-;630:137;;704:4;674:14;:12;:14::i;:::-;-1:-1:-1::0;;;;;674:27:3;::::1;;::::0;;;::::1;::::0;;;;;;;;;:34;;-1:-1:-1;;674:34:3::1;::::0;::::1;;::::0;;;::::1;::::0;;;727:29;::::1;::::0;::::1;::::0;674:27;;727:29:::1;:::i;:::-;;;;;;;;630:137;540:233:::0;:::o;5617:99:37:-;5666:7;5692;:5;:7::i;:::-;:17;;;5685:24;;5617:99;:::o;2248:198::-;654:13:1;:11;:13::i;:::-;653:14;645:36;;;;-1:-1:-1;;;645:36:1;;;;;;;:::i;:::-;292:23:8::1;304:10;292:11;:23::i;:::-;284:51;;;::::0;-1:-1:-1;;;284:51:8;;::::1;::::0;::::1;;;:::i;:::-;2364:10:37::2;2346:58;2376:12;:10;:12::i;:::-;2390:13;2346:58;;;;;;;:::i;:::-;;;;;;;;2414:25;2425:13;2414:10;:25::i;3591:844:17:-:0;3746:7;3755;3794:1;3782:9;:13;3774:59;;;;-1:-1:-1;;;3774:59:17;;;;;;;:::i;:::-;3864:16;:14;:16::i;:::-;3851:9;:29;;3843:65;;;;-1:-1:-1;;;3843:65:17;;;;;;;:::i;:::-;3918:13;3934:20;:18;:20::i;:::-;3918:36;;3964:60;3990:22;;;;;;;;;;;;;;;;;4014:5;4022:1;4014:9;3964:25;:60::i;:::-;4039:74;;4077:8;;4066:9;;4054:10;;4039:74;;;;4087:7;;;;4096:5;;4103:9;;4039:74;:::i;:::-;;;;;;;;4123:15;4141:53;4158:9;4169:8;4179:7;;4188:5;4141:16;:53::i;:::-;4123:71;;4382:9;4394:1;4382:13;4354:16;:14;:16::i;:::-;:25;;;;;;;;;;;;:41;:25;4422:5;;-1:-1:-1;3591:844:17;-1:-1:-1;;;;;3591:844:17:o;1486:1028:10:-;571:4:4;-1:-1:-1;;;;;554:5:4;:22;;;546:57;;;;-1:-1:-1;;;546:57:4;;;;;;;:::i;:::-;1564:17:10::1;1589:19;:17;:19::i;:::-;1584:2;:24:::0;;::::1;::::0;-1:-1:-1;1645:14:10;::::1;1677:31:::0;;::::1;;1669:63;;;::::0;-1:-1:-1;;;1669:63:10;;::::1;::::0;::::1;;;:::i;:::-;1742:18;1774:32;1789:16:::0;1779:9;1774:4;;:32:::1;:::i;:::-;1763:55;;;;;;;:::i;:::-;1742:76:::0;-1:-1:-1;1829:35:10::1;;1867:16;1873:9:::0;1829:35;1867:4;;:16:::1;:::i;:::-;1829:54;;;;1894:49;1922:20;;1894:27;:49::i;:::-;1954:23;;1980;:4:::0;1985:16;1980:4;;:23:::1;:::i;:::-;1954:49:::0;;-1:-1:-1;1954:49:10;-1:-1:-1;;;;;;2098:26:10;::::1;::::0;2094:122:::1;;2140:45;2164:10;2176:8;;2140:23;:45::i;:::-;2199:7;;;;;;;;;2094:122;2230:15;:13;:15::i;:::-;2226:282;;;2269:20:::0;;2261:53:::1;;;::::0;-1:-1:-1;;;2261:53:10;;::::1;::::0;::::1;;;:::i;:::-;2226:282;;;2394:26;2411:8;;2394:16;:26::i;:::-;2434:33;2458:8;;2434:23;:33::i;:::-;2481:16;:14;:16::i;:::-;613:1:4;;;;;;;;1486:1028:10::0;;:::o;705:144:1:-;292:23:8;304:10;292:11;:23::i;:::-;284:51;;;;-1:-1:-1;;;284:51:8;;;;;;;:::i;:::-;654:13:1::1;:11;:13::i;:::-;653:14;645:36;;;::::0;-1:-1:-1;;;645:36:1;;::::1;::::0;::::1;;;:::i;:::-;772:44:::2;798:11;;;;;;;;;;;;;;;;;811:4;772:25;:44::i;:::-;831:11;::::0;::::2;::::0;;;::::2;705:144::o:0;1074:103:17:-;1060:7;1074:103;:::o;5649:1148::-;5847:68;;5823:7;;5890:8;;5879:9;;5867:10;;5847:68;;;;5900:7;;;;5909:5;;5847:68;:::i;:::-;;;;;;;;6133:15;6151:53;6168:9;6179:8;6189:7;;6198:5;6151:16;:53::i;:::-;6133:71;;6214:21;6238:16;:14;:16::i;:::-;:25;;;;;;;;;;;;;;-1:-1:-1;6281:18:17;6273:51;;;;-1:-1:-1;;;6273:51:17;;;;;;;:::i;:::-;6335:19;6357:28;:26;:28::i;:::-;:37;;;;;;;;;;;;;;-1:-1:-1;6412:16:17;6404:63;;;;-1:-1:-1;;;6404:63:17;;;;;;;:::i;:::-;6478:25;6520:26;:24;:26::i;:::-;6506:11;:40;6478:68;;6585:11;6564:17;:32;;6556:73;;;;-1:-1:-1;;;6556:73:17;;;;;;;:::i;:::-;6666:17;6647:15;:36;;6639:85;;;;-1:-1:-1;;;6639:85:17;;;;;;;:::i;:::-;6763:1;6735:16;:14;:16::i;:::-;:25;;;;;;;;;;;;:29;-1:-1:-1;6735:25:17;;5649:1148;-1:-1:-1;;;;;;;;5649:1148:17:o;1038:114:3:-;1102:4;1125:14;:12;:14::i;:::-;-1:-1:-1;;;;;1125:20:3;;;;;;;;;;;;;-1:-1:-1;1125:20:3;;;;;;;1038:114::o;1324:122:17:-;1388:7;1414:16;:14;:16::i;:::-;:25;;;;;;-1:-1:-1;1414:25:17;;;;;1324:122::o;5059:584::-;5268:79;;5244:7;;5322:8;;5311:9;;5299:10;;5268:79;;;;5332:7;;;;5341:5;;5268:79;:::i;:::-;;;;;;;;5357:15;5375:53;5392:9;5403:8;5413:7;;5422:5;5375:16;:53::i;:::-;5357:71;;5438:21;5462:16;:14;:16::i;:::-;:25;;;;;;;;;;;;;;-1:-1:-1;5505:17:17;5497:50;;;;-1:-1:-1;;;5497:50:17;;;;;;;:::i;:::-;5597:15;5557:28;:26;:28::i;:::-;:37;;;;;;;;;;;;:55;-1:-1:-1;5557:37:17;5059:584;-1:-1:-1;;;;;;5059:584:17:o;2067:152::-;2124:7;2150:62;2176:35;;;;;;;;;;;;;;;;;2150:25;:62::i;840:121:16:-;919:35;935:18;919:15;:35::i;6058:1807:37:-;341:22:9;352:10;341;:22::i;:::-;333:48;;;;-1:-1:-1;;;333:48:9;;;;;;;:::i;:::-;6331:25:37::1;6359:7;:5;:7::i;:::-;:19;;;6331:47;;6425:38;6449:13;;6425:23;:38::i;:::-;6544:13;;833:1:15;6544:48:37;;;;;;;;;;;;;6528:12;:10;:12::i;:::-;:64;6507:130;;;::::0;-1:-1:-1;;;6507:130:37;;::::1;::::0;::::1;;;:::i;:::-;6648:29;6663:13;;6648:7;:5;:7::i;:::-;:14:::0;:29;:14:::1;:29::i;:::-;880:1:15;6985:155:37;7054:4;7072:28;:13:::0;880:1:15;7072:13:37;;:28:::1;:::i;:::-;7114:16;:14;:16::i;:::-;6985:30;:155::i;:::-;6969:171;7205:156;7274:5;7293:28;:13:::0;6969:171;7293:13;;:28:::1;:::i;:::-;7335:16;:14;:16::i;7205:156::-;7189:172;7379:36:::0;;::::1;7371:73;;;::::0;-1:-1:-1;;;7371:73:37;;::::1;::::0;::::1;;;:::i;:::-;7588:34;7625:7;:5;:7::i;:::-;7588:44;;7647:71;7662:6;:17;;;7681:6;:18;;;7701:6;:16;;;7647:71;;;;;;;;:::i;:::-;;;;;;;;7805:18;7826:1;7805:22;7783:6;:18;;;:44;7775:83;;;::::0;-1:-1:-1;;;7775:83:37;;::::1;::::0;::::1;;;:::i;:::-;391:1:9;;;6058:1807:37::0;;:::o;2699:120::-;2743:7;2769:43;2795:16;;;;;;;;;;;;;;;;;2769:25;:43::i;493:112:1:-;537:4;560:38;586:11;;;;;;;;;;;;;;;;;560:25;:38::i;717:117:16:-;794:33;815:11;794:20;:33::i;967:81::-;1022:19;:17;:19::i;:::-;967:81::o;5300:95:37:-;5344:7;5370;:5;:7::i;:::-;:18;;-1:-1:-1;5300:95:37;:::o;779:253:3:-;292:23:8;304:10;292:11;:23::i;:::-;284:51;;;;-1:-1:-1;;;284:51:8;;;;;;;:::i;:::-;879:27:3::1;890:15;879:10;:27::i;:::-;875:151;;;956:5;922:14;:12;:14::i;:::-;-1:-1:-1::0;;;;;922:31:3;::::1;;::::0;;;::::1;::::0;;;;;;;;;:39;;-1:-1:-1;;922:39:3::1;::::0;::::1;;::::0;;;::::1;::::0;;;980:35;::::1;::::0;::::1;::::0;922:31;;980:35:::1;:::i;2591:146:17:-:0;2667:7;2693:28;:26;:28::i;1452:122::-;1516:7;1542:16;:14;:16::i;2452:183:37:-;654:13:1;:11;:13::i;:::-;653:14;645:36;;;;-1:-1:-1;;;645:36:1;;;;;;;:::i;:::-;292:23:8::1;304:10;292:11;:23::i;:::-;284:51;;;::::0;-1:-1:-1;;;284:51:8;;::::1;::::0;::::1;;;:::i;:::-;2588:40:37::2;2613:14;2588:24;:40::i;3415:118::-:0;3458:7;3484:42;3510:15;;;;;;;;;;;;;;;;;3484:25;:42::i;1054:81:16:-;1109:19;:17;:19::i;2037:205:37:-;654:13:1;:11;:13::i;:::-;653:14;645:36;;;;-1:-1:-1;;;645:36:1;;;;;;;:::i;:::-;292:23:8::1;304:10;292:11;:23::i;:::-;284:51;;;::::0;-1:-1:-1;;;284:51:8;;::::1;::::0;::::1;;;:::i;:::-;2156:10:37::2;2137:61;2168:13;:11;:13::i;:::-;2183:14;2137:61;;;;;;;:::i;:::-;;;;;;;;2208:27;2220:14;2208:11;:27::i;5123:118::-:0;5200:34;;;;;;;;;;;;;;;;;5123:118;:::o;1465:209:12:-;1530:14;1556:12;1598:4;1581:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;1581:22:12;;;;;;1571:33;;1581:22;1571:33;;;;1647:11;;;-1:-1:-1;;;1623:45:12:o;1988:189:0:-;2055:4;2071:32;2106:19;:17;:19::i;:::-;-1:-1:-1;;;;;2142:28:0;;;;:22;:28;;;;;;;;-1:-1:-1;;2142:28:0;;;;;;;1988:189::o;1754:168:17:-;1803:35;1857:58;1894:20;;;;;;;;;;;;;;;;;1857:36;:58::i;3722:232:37:-;3762:39;3813:16;3859;;;;;;;;;;;;;;;;;3842:34;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;3842:34:37;;;;;;3832:45;;3842:34;3832:45;;;;;;-1:-1:-1;;3896:52:37:o;318:170:18:-;374:32;425:56;459:21;;;;;;;;;;;;;;;;;425:33;:56::i;3242:110:37:-;3296:49;3322:15;;;;;;;;;;;;;;;;;3339:5;1680:192:12;1756:12;1798:4;1781:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;1771:33;;;;;;1756:48;;1850:5;1844:4;1837:19;1823:43;;;:::o;3048:481:17:-;3280:228;;3215:7;;3280:228;;3326:10;;3359:9;;3390:5;;3417:8;;3447:7;;;;;;3280:228;;;:::i;:::-;;;;;;;;;;;;;3253:269;;;;;;3234:288;;3048:481;;;;;;;:::o;1580:168::-;1629:35;1683:58;1720:20;;;;;;;;;;;;;;;;;1683:36;:58::i;2520:540:10:-;2648:36;-1:-1:-1;;;;;2648:34:10;;;:36::i;:::-;2640:67;;;;-1:-1:-1;;;2640:67:10;;;;;;;:::i;:::-;2879:57;;2788:12;;2802:23;;-1:-1:-1;;;;;2829:36:10;;;-1:-1:-1;;;2902:24:10;2879:57;;2928:7;;;;2879:57;;;:::i;:::-;;;;-1:-1:-1;;2879:57:10;;;;;;;;;;;;;;-1:-1:-1;;;;;2879:57:10;-1:-1:-1;;;;;;2879:57:10;;;;;;;;;;;2829:117;;;;2879:57;2829:117;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:159;;;;2964:7;2980:10;2956:36;;;;;-1:-1:-1;;;2956:36:10;;;;;;;;:::i;:::-;-1:-1:-1;3010:17:10;;:10;;:22;3002:51;;;;-1:-1:-1;;;3002:51:10;;;;;;;;:::i;:::-;;2520:540;;;;;:::o;3960:105:37:-;4017:4;4040:13;:11;:13::i;:::-;:18;;;-1:-1:-1;3960:105:37;:::o;4172:266::-;4275:6;4260:21;;4252:56;;;;-1:-1:-1;;;4252:56:37;;;;;;;:::i;:::-;4318:20;4352:9;4358:2;4318:20;4352:4;;:9;:::i;:::-;4341:32;;;;;;;:::i;:::-;4318:55;-1:-1:-1;4391:17:37;4383:48;;;;-1:-1:-1;;;4383:48:37;;;;;;;:::i;:::-;4172:266;;;:::o;4544:505::-;4640:20;4674:17;4705:19;4738:39;;:::i;:::-;4790:66;;;;4801:4;4790:66;:::i;:::-;4626:230;;;;;;;;4867:25;4879:12;4867:11;:25::i;:::-;4902:29;4921:9;4902:18;:29::i;:::-;4941:26;4954:12;4941:7;:5;:7::i;:::-;:12;;:26::i;:::-;4977:23;4988:11;4977:10;:23::i;:::-;5010:32;5035:6;5010:24;:32::i;1665:317:0:-;1710:32;1745:19;:17;:19::i;:::-;1783:15;;;;;;-1:-1:-1;;;;1783:15:0;;;;1782:16;1774:48;;;;-1:-1:-1;;;1774:48:0;;;;;;;:::i;:::-;1850:4;1832:15;;:22;;-1:-1:-1;;;;1832:22:0;-1:-1:-1;;;1832:22:0;;;1946:29;1964:10;1946:17;:29::i;2743:221:17:-;2828:35;2886:71;2923:33;;;;;;;;;;;;;;;;;2886:36;:71::i;4088:402:0:-;292:23:8;304:10;292:11;:23::i;:::-;284:51;;;;-1:-1:-1;;;284:51:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;4183:32:0;::::1;:10;:32;;4175:65;;;::::0;-1:-1:-1;;;4175:65:0;;::::1;::::0;::::1;;;:::i;:::-;4250:32;4285:19;:17;:19::i;:::-;4250:54;;4322:31;4334:18;4322:11;:31::i;:::-;4314:56;;;::::0;-1:-1:-1;;;4314:56:0;;::::1;::::0;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;4380:42:0;::::1;4425:5;4380:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;4380:50:0::1;::::0;;4445:38;::::1;::::0;::::1;::::0;4380:42;;4445:38:::1;:::i;:::-;;;;;;;;345:1:8;4088:402:0::0;:::o;1965:151:15:-;880:1;2047:32;;2039:70;;;;-1:-1:-1;;;2039:70:15;;;;;;;:::i;598:803:19:-;808:1;787:17;;;:22;;;;;;;870:14;;726:1:15;870:50:19;;;;;;;;;;;;;848:5;:17;;;840:80;819:147;;;;-1:-1:-1;;;819:147:19;;;;;;;:::i;:::-;995:14;;779:1:15;995:48:19;;;;;;;;;;;;;;977:15;;;:66;-1:-1:-1;1054:41:19;;1098:46;1129:14;;1098:30;:46::i;:::-;1054:90;;;;1195:62;1234:22;;1195:38;:62::i;:::-;1175:16;;:82;1154:150;;;;-1:-1:-1;;;1154:150:19;;;;;;;:::i;:::-;1333:61;1371:22;;1333:37;:61::i;:::-;1314:80;;;-1:-1:-1;;;;598:803:19:o;2748:3369:15:-;2921:7;2940:26;2969:18;;2988:1;2969:21;;;;;;;;;;;;;2940:50;;3029:5;3008:18;:26;3000:67;;;;-1:-1:-1;;;3000:67:15;;;;;;;:::i;:::-;3095:1;3134:27;;;3078:14;3214:8;:80;;1399:1;3214:80;;;1059:1;3214:80;3172:132;;3315:20;3349:2443;3365:17;3356:6;:26;3349:2443;;;3428:26;;;3476:47;;;3468:77;;;;-1:-1:-1;;;3468:77:15;;;;;;;:::i;:::-;3560:21;3584:18;;3603:19;3584:39;;;;;;;;;;;;;3560:63;;3661:5;3645:13;:21;3637:56;;;;-1:-1:-1;;;3637:56:15;;;;;;;:::i;:::-;3728:39;;;3750:1;3728:39;3789:38;;;;3781:76;;;;-1:-1:-1;;;3781:76:15;;;;;;;:::i;:::-;3876:8;3872:1877;;;3904:19;3974:18;;3993:6;3974:36;4000:9;3974:36;;;;;;;:::i;:::-;3957:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3926:103;;;;;;3904:125;;4237:18;;999:1;4256:6;:40;4237:60;;;;;;;;;;;;;-1:-1:-1;;;;;4053:394:15;4118:18;;941:1;4137:6;:42;4118:62;;;;;;;;;;;;;4053:394;4364:18;;1111:1;4383:6;:34;4364:64;4418:9;4364:64;;;;;;;:::i;:::-;4053:394;;;;;;;:::i;:::-;;;;;;;;4465:21;;;;;;;;;;;:26;;4490:1;4465:26;;;3872:1877;;;4552:19;4626:18;;4645:6;4626:36;4652:9;4626:36;;;;;;;:::i;:::-;4609:54;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;4609:54:15;;;;;;4574:111;;4609:54;4574:111;;;;4708:21;4732;;;;;;;;;;4574:111;;-1:-1:-1;4732:21:15;4775:56;;;;-1:-1:-1;;;4775:56:15;;;;;;;:::i;:::-;4932:1;4908:21;;;;;;;;;;:25;;;4853:33;;;;-1:-1:-1;;4853:33:15;;4986:18;;1283:1;5005:35;;4986:55;;;;;;;;;;;;;4970:71;;5059:29;5124:18;;1451:1;5143:6;:34;5124:64;5178:9;5124:64;;;;;;;:::i;:::-;5059:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5534:18;;1339:1;5553:6;:38;5534:58;;;;;;;;;;;;;5419:18;;1230:1;5438:6;:40;5419:60;;;;;;;;;;;;;5307:18;;1172:1;5326:6;:42;5307:62;;;;;;;;;;;;;-1:-1:-1;;;;;5229:505:15;;5646:12;5711:5;5229:505;;;;;;;:::i;:::-;;;;;;;;3872:1877;;;5772:9;-1:-1:-1;3349:2443:15;;-1:-1:-1;;3349:2443:15;;5819:17;5809:6;:27;5801:68;;;;-1:-1:-1;;;5801:68:15;;;;;;;:::i;:::-;5884:16;;5880:207;;5983:40;;5965:12;;5983:10;;6006:12;;5983:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5964:59;;;6045:7;6037:39;;;;-1:-1:-1;;;6037:39:15;;;;;;;:::i;:::-;5880:207;;-1:-1:-1;6104:6:15;;2748:3369;-1:-1:-1;;;;;;;;2748:3369:15:o;2537:447:0:-;292:23:8;304:10;292:11;:23::i;:::-;284:51;;;;-1:-1:-1;;;284:51:8;;;;;;;:::i;:::-;2622:32:0::1;2657:19;:17;:19::i;:::-;2622:54:::0;-1:-1:-1;;;;;;2694:27:0;::::1;2686:51;;;::::0;-1:-1:-1;;;2686:51:0;;::::1;::::0;::::1;;;:::i;:::-;2756:24;2768:11;2756;:24::i;:::-;2755:25;2747:54;;;::::0;-1:-1:-1;;;2747:54:0;;::::1;::::0;::::1;;;:::i;:::-;2819:21;::::0;::::1;::::0;-1:-1:-1;;;;;2819:21:0::1;:37:::0;2811:73:::1;;;::::0;-1:-1:-1;;;2811:73:0;;::::1;::::0;::::1;;;:::i;:::-;2894:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;;2894:35:0::1;-1:-1:-1::0;;;;;2894:35:0;::::1;;::::0;;2944:33:::1;::::0;::::1;::::0;::::1;::::0;2894:35;;2944:33:::1;:::i;3649:382::-:0;3778:32;3813:19;:17;:19::i;:::-;3864:21;;;;;;-1:-1:-1;;;;;;3864:21:0;3850:10;:35;3842:71;;;;-1:-1:-1;;;3842:71:0;;;;;;;:::i;:::-;3949:29;3967:10;3949:17;:29::i;:::-;3988:21;;:36;;-1:-1:-1;;;;;;3988:36:0;;;3649:382::o;2225:162:17:-;2302:78;2328:35;;;;;;;;;;;;;;;;;2365:14;2302:25;:78::i;2251:280:0:-;292:23:8;304:10;292:11;:23::i;:::-;284:51;;;;-1:-1:-1;;;284:51:8;;;;;;;:::i;:::-;2314:32:0::1;2349:19;:17;:19::i;:::-;2382:21;::::0;::::1;::::0;;;-1:-1:-1;;;;;;2382:21:0::1;:37:::0;2378:147:::1;;2435:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;2435:36:0::1;::::0;;2490:24:::1;::::0;::::1;::::0;-1:-1:-1;;2490:24:0::1;345:1:8;2251:280:0:o:0;2884:112:37:-;2939:50;2965:16;;;;;;;;;;;;;;;;;2983:5;2939:25;:50::i;343:250:16:-;404:32;448:16;494:28;;;;;;;;;;;;;;;;;477:46;;;;;;;;:::i;258:298:12:-;358:50;424:16;470:4;453:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;453:22:12;;;;;;443:33;;453:22;443:33;;;;;;-1:-1:-1;;;495:55:12:o;346:190:11:-;475:20;521:8;;;346:190::o;3539:130:37:-;3601:61;3634:20;;;;;;;;;;;;;;;;;3656:5;3601:32;:61::i;227:222:19:-;324:20;;305:39;;374:21;;;;354:17;;;:41;423:19;;;405:15;;;;:37;227:222::o;3309:334:0:-;3384:24;3396:11;3384;:24::i;:::-;3383:25;3375:54;;;;-1:-1:-1;;;3375:54:0;;;;;;;:::i;:::-;3439:32;3474:19;:17;:19::i;:::-;-1:-1:-1;;;;;3503:35:0;;:22;:35;;;;;;;;;;;;:42;;-1:-1:-1;;3503:42:0;-1:-1:-1;3503:42:0;;;3601:35;3503;;-1:-1:-1;3601:35:0;;;;3503;;3601;:::i;2225:210:15:-;2329:18;;2370:58;2426:1;2329:18;2370:11;;:58;:::i;:::-;2363:65;;;;2225:210;;;;;;:::o;171:177::-;284:7;314:24;;339:1;314:27;;;;;;;;;;;;;307:34;;171:177;;;;:::o;413:176::-;525:7;555:24;;580:1;555:27;;;;;;2472:189:12;2596:3;2563:21;2579:4;2563:15;:21::i;:::-;-1:-1:-1;;;;;2563:37:12;;2555:61;;;;-1:-1:-1;;;2555:61:12;;;;;;;:::i;:::-;2626:28;2642:4;2648:5;2626:15;:28::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;313:352::-;;;443:3;436:4;428:6;424:17;420:27;410:2;;-1:-1;;451:12;410:2;-1:-1;481:20;;521:18;510:30;;507:2;;;-1:-1;;543:12;507:2;587:4;579:6;575:17;563:29;;638:3;587:4;;622:6;618:17;579:6;604:32;;601:41;598:2;;;655:1;;645:12;2106:241;;2210:2;2198:9;2189:7;2185:23;2181:32;2178:2;;;-1:-1;;2216:12;2178:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2268:63;2172:175;-1:-1;;;2172:175::o;2618:397::-;;;2757:2;2745:9;2736:7;2732:23;2728:32;2725:2;;;-1:-1;;2763:12;2725:2;2821:17;2808:31;2859:18;2851:6;2848:30;2845:2;;;-1:-1;;2881:12;2845:2;2919:80;2991:7;2982:6;2971:9;2967:22;2919:80;:::i;:::-;2901:98;;;;-1:-1;2719:296;-1:-1;;;;2719:296::o;3022:241::-;;3126:2;3114:9;3105:7;3101:23;3097:32;3094:2;;;-1:-1;;3132:12;3094:2;-1:-1;740:20;;3088:175;-1:-1;3088:175::o;3270:365::-;;;3393:2;3381:9;3372:7;3368:23;3364:32;3361:2;;;-1:-1;;3399:12;3361:2;3457:17;3444:31;3495:18;;3487:6;3484:30;3481:2;;;-1:-1;;3517:12;3481:2;3602:6;3591:9;3587:22;;;938:3;931:4;923:6;919:17;915:27;905:2;;-1:-1;;946:12;905:2;989:6;976:20;3495:18;1008:6;1005:30;1002:2;;;-1:-1;;1038:12;1002:2;1133:3;3393:2;1113:17;1074:6;1099:32;;1096:41;1093:2;;;-1:-1;;1140:12;1093:2;3393;1070:17;;;;;3537:82;;-1:-1;3355:280;;-1:-1;;;;3355:280::o;3890:679::-;;;;;4064:9;4055:7;4051:23;4076:3;4051:23;4047:33;4044:2;;;-1:-1;;4083:12;4044:2;2049:6;2036:20;4135:63;;4235:2;4286:9;4282:22;217:20;242:41;277:5;242:41;:::i;:::-;4243:71;-1:-1;4351:2;4390:22;;2036:20;;-1:-1;4459:2;-1:-1;;1427:19;;1423:30;1420:2;;;-1:-1;;1456:12;1420:2;;4351;45663:9;4459:2;45699:6;45695:17;45806:6;45794:10;45791:22;45770:18;45758:10;45755:34;45752:62;45749:2;;;-1:-1;;45817:12;45749:2;45847:10;4351:2;45836:22;;4459:2;4525:9;4521:22;2036:20;1574:16;1567:75;1763:22;4525:9;1763:22;1234:20;4235:2;1729:5;1725:16;1718:74;1912:22;4525:9;1912:22;2036:20;4351:2;1877:5;1873:16;1866:75;4467:86;;;;4038:531;;;;;;;:::o;4576:522::-;;;;4732:2;4720:9;4711:7;4707:23;4703:32;4700:2;;;-1:-1;;4738:12;4700:2;2049:6;2036:20;4790:63;;4918:2;4907:9;4903:18;4890:32;4942:18;4934:6;4931:30;4928:2;;;-1:-1;;4964:12;4928:2;5002:80;5074:7;5065:6;5054:9;5050:22;5002:80;:::i;:::-;4694:404;;4984:98;;-1:-1;4984:98;;-1:-1;;;;4694:404::o;5105:647::-;;;;;5278:2;5266:9;5257:7;5253:23;5249:32;5246:2;;;-1:-1;;5284:12;5246:2;2049:6;2036:20;5336:63;;5436:2;5479:9;5475:22;2036:20;5444:63;;5572:2;5561:9;5557:18;5544:32;5596:18;5588:6;5585:30;5582:2;;;-1:-1;;5618:12;5582:2;5656:80;5728:7;5719:6;5708:9;5704:22;5656:80;:::i;:::-;5240:512;;;;-1:-1;5638:98;-1:-1;;;;5240:512::o;5759:773::-;;;;;;5949:3;5937:9;5928:7;5924:23;5920:33;5917:2;;;-1:-1;;5956:12;5917:2;2049:6;2036:20;6008:63;;6108:2;6151:9;6147:22;2036:20;6116:63;;6244:2;6233:9;6229:18;6216:32;6268:18;6260:6;6257:30;6254:2;;;-1:-1;;6290:12;6254:2;6328:80;6400:7;6391:6;6380:9;6376:22;6328:80;:::i;:::-;5911:621;;;;-1:-1;6310:98;6445:2;6484:22;2036:20;;5911:621;-1:-1;;;;5911:621::o;6872:467::-;46663:19;;;6872:467;-1:-1;;;;;7120:78;;7117:2;;;-1:-1;;7201:12;7117:2;46712:4;7236:6;7232:17;48959:6;48954:3;46712:4;46707:3;46703:14;48936:30;48997:16;;;;46712:4;48997:16;48990:27;;;-1:-1;48997:16;;7004:335;-1:-1;7004:335::o;7378:503::-;;-1:-1;;;;;7662:78;;7659:2;;;-1:-1;;7743:12;7659:2;7786:4;7778:6;7774:17;48959:6;48954:3;48949;48936:30;48997:16;;;;48990:27;;;-1:-1;48997:16;;7528:353;-1:-1;7528:353::o;22734:361::-;;22935:135;23066:3;23057:6;23049;22935:135;:::i;:::-;23080:10;22916:179;-1:-1;;;;22916:179::o;23102:271::-;;9337:5;46131:12;9448:52;9493:6;9488:3;9481:4;9474:5;9470:16;9448:52;:::i;:::-;9512:16;;;;;23236:137;-1:-1;;23236:137::o;23662:379::-;24026:10;23850:191::o;24048:772::-;;8830:5;8807:3;8800:37;8830:5;24417:2;24412:3;24408:12;8800:37;8830:5;24519:12;24412:3;24519:12;8800:37;24660:135;24630:12;24412:3;24630:12;24782:6;24774;24660:135;:::i;:::-;24805:10;24308:512;-1:-1;;;;;;;24308:512::o;24827:1050::-;;8830:5;8807:3;8800:37;8830:5;25252:2;25247:3;25243:12;8800:37;8830:5;25354:12;25247:3;25354:12;8800:37;8830:5;25465:12;25247:3;25465:12;8800:37;8830:5;25576:12;25247:3;25576:12;8800:37;25717:135;25687:12;25247:3;25687:12;25839:6;25831;25717:135;:::i;:::-;25862:10;25143:734;-1:-1;;;;;;;;;25143:734::o;25884:222::-;-1:-1;;;;;48732:54;;;;6792:37;;26011:2;25996:18;;25982:124::o;26113:390::-;;26300:2;26321:17;26314:47;26375:118;26300:2;26289:9;26285:18;26479:6;26471;26375:118;:::i;26510:501::-;;26725:2;26746:17;26739:47;26800:118;26725:2;26714:9;26710:18;26904:6;26896;26800:118;:::i;:::-;26792:126;;8830:5;26997:2;26986:9;26982:18;8800:37;26696:315;;;;;;:::o;27018:612::-;;27261:2;27282:17;27275:47;27336:118;27261:2;27250:9;27246:18;27440:6;27432;27336:118;:::i;:::-;27533:2;27518:18;;8800:37;;;;-1:-1;27616:2;27601:18;8800:37;27328:126;27232:398;-1:-1;;27232:398::o;27637:481::-;27842:2;27856:47;;;46131:12;;27827:18;;;46663:19;;;27637:481;;46712:4;;46703:14;;;;45985;;;27637:481;8328:260;8353:6;8350:1;8347:13;8328:260;;;8414:13;;8800:37;;6693:14;;;;46518;;;;8375:1;8368:9;8328:260;;;-1:-1;;;28089:18;;8800:37;;;;27909:116;27813:305;-1:-1;;27813:305::o;28125:210::-;48487:13;;48480:21;8683:34;;28246:2;28231:18;;28217:118::o;28342:222::-;8800:37;;;28469:2;28454:18;;28440:124::o;28571:333::-;8800:37;;;28890:2;28875:18;;8800:37;28726:2;28711:18;;28697:207::o;28911:326::-;;29066:2;29087:17;29080:47;46675:6;29066:2;29055:9;29051:18;46663:19;48959:6;48954:3;46703:14;29055:9;46703:14;48936:30;48997:16;;;46703:14;48997:16;;;48990:27;;;;49473:7;49457:14;;;-1:-1;;49453:28;9124:39;;;29037:200;-1:-1;29037:200::o;29469:310::-;;29616:2;29637:17;29630:47;9802:5;46131:12;46675:6;29616:2;29605:9;29601:18;46663:19;9896:52;9941:6;46703:14;29605:9;46703:14;29616:2;9922:5;9918:16;9896:52;:::i;:::-;49473:7;49457:14;-1:-1;;49453:28;9960:39;;;;46703:14;9960:39;;29587:192;-1:-1;;29587:192::o;29786:416::-;29986:2;30000:47;;;10603:2;29971:18;;;46663:19;-1:-1;;;46703:14;;;10619:41;10679:12;;;29957:245::o;30209:416::-;30409:2;30423:47;;;10930:2;30394:18;;;46663:19;-1:-1;;;46703:14;;;10946:40;11005:12;;;30380:245::o;30632:416::-;30832:2;30846:47;;;11256:2;30817:18;;;46663:19;-1:-1;;;46703:14;;;11272:45;11336:12;;;30803:245::o;31055:416::-;31255:2;31269:47;;;11587:2;31240:18;;;46663:19;-1:-1;;;46703:14;;;11603:39;11661:12;;;31226:245::o;31478:416::-;31678:2;31692:47;;;11912:2;31663:18;;;46663:19;-1:-1;;;46703:14;;;11928:44;11991:12;;;31649:245::o;31901:416::-;32101:2;32115:47;;;12242:2;32086:18;;;46663:19;-1:-1;;;46703:14;;;12258:42;12319:12;;;32072:245::o;32324:416::-;32524:2;32538:47;;;12570:2;32509:18;;;46663:19;-1:-1;;;46703:14;;;12586:42;12647:12;;;32495:245::o;32747:416::-;32947:2;32961:47;;;12898:2;32932:18;;;46663:19;12934:30;46703:14;;;12914:51;12984:12;;;32918:245::o;33170:416::-;33370:2;33384:47;;;13235:2;33355:18;;;46663:19;13271:34;46703:14;;;13251:55;-1:-1;;;13326:12;;;13319:28;13366:12;;;33341:245::o;33593:416::-;33793:2;33807:47;;;13617:2;33778:18;;;46663:19;-1:-1;;;46703:14;;;13633:34;13686:12;;;33764:245::o;34016:416::-;34216:2;34230:47;;;13937:2;34201:18;;;46663:19;13973:25;46703:14;;;13953:46;14018:12;;;34187:245::o;34439:416::-;34639:2;34653:47;;;14269:2;34624:18;;;46663:19;14305:28;46703:14;;;14285:49;14353:12;;;34610:245::o;34862:416::-;35062:2;35076:47;;;14604:2;35047:18;;;46663:19;-1:-1;;;46703:14;;;14620:43;-1:-1;14682:12;;35033:245::o;35285:416::-;35485:2;35499:47;;;14933:2;35470:18;;;46663:19;-1:-1;;;46703:14;;;14949:45;15013:12;;;35456:245::o;35708:416::-;35908:2;35922:47;;;15264:2;35893:18;;;46663:19;-1:-1;;;46703:14;;;15280:45;15344:12;;;35879:245::o;36131:416::-;36331:2;36345:47;;;15595:2;36316:18;;;46663:19;15631:25;46703:14;;;15611:46;15676:12;;;36302:245::o;36554:416::-;36754:2;36768:47;;;15927:2;36739:18;;;46663:19;-1:-1;;;46703:14;;;15943:41;16003:12;;;36725:245::o;36977:416::-;37177:2;37191:47;;;16254:2;37162:18;;;46663:19;16290:30;46703:14;;;16270:51;16340:12;;;37148:245::o;37400:416::-;37600:2;37614:47;;;16591:2;37585:18;;;46663:19;16627:26;46703:14;;;16607:47;16673:12;;;37571:245::o;37823:416::-;38023:2;38037:47;;;16924:2;38008:18;;;46663:19;-1:-1;;;46703:14;;;16940:43;17002:12;;;37994:245::o;38246:416::-;38446:2;38460:47;;;17253:2;38431:18;;;46663:19;17289:27;46703:14;;;17269:48;17336:12;;;38417:245::o;38669:416::-;38869:2;38883:47;;;17587:2;38854:18;;;46663:19;17623:27;46703:14;;;17603:48;17670:12;;;38840:245::o;39092:416::-;39292:2;39306:47;;;17921:1;39277:18;;;46663:19;-1:-1;;;46703:14;;;17936:32;17987:12;;;39263:245::o;39515:416::-;39715:2;39729:47;;;18238:2;39700:18;;;46663:19;-1:-1;;;46703:14;;;18254:38;18311:12;;;39686:245::o;39938:416::-;40138:2;40152:47;;;18562:2;40123:18;;;46663:19;-1:-1;;;46703:14;;;18578:34;18631:12;;;40109:245::o;40361:416::-;40561:2;40575:47;;;18882:2;40546:18;;;46663:19;-1:-1;;;46703:14;;;18898:42;18959:12;;;40532:245::o;40784:416::-;40984:2;40998:47;;;19210:2;40969:18;;;46663:19;19246:25;46703:14;;;19226:46;19291:12;;;40955:245::o;41207:416::-;41407:2;41421:47;;;19542:2;41392:18;;;46663:19;19578:28;46703:14;;;19558:49;19626:12;;;41378:245::o;41630:416::-;41830:2;41844:47;;;20182:2;41815:18;;;46663:19;-1:-1;;;46703:14;;;20198:42;20259:12;;;41801:245::o;42053:416::-;42253:2;42267:47;;;20510:2;42238:18;;;46663:19;-1:-1;;;46703:14;;;20526:36;20581:12;;;42224:245::o;42476:416::-;42676:2;42690:47;;;20832:2;42661:18;;;46663:19;-1:-1;;;46703:14;;;20848:43;20910:12;;;42647:245::o;42899:416::-;43099:2;43113:47;;;21161:2;43084:18;;;46663:19;-1:-1;;;46703:14;;;21177:43;-1:-1;21239:12;;43070:245::o;43322:416::-;43522:2;43536:47;;;21490:2;43507:18;;;46663:19;-1:-1;;;46703:14;;;21506:35;21560:12;;;43493:245::o;43745:416::-;43945:2;43959:47;;;21811:2;43930:18;;;46663:19;21847:34;46703:14;;;21827:55;-1:-1;;;21902:12;;;21895:26;21940:12;;;43916:245::o;44168:416::-;44368:2;44382:47;;;22191:2;44353:18;;;46663:19;22227:34;46703:14;;;22207:55;-1:-1;;;22282:12;;;22275:25;22319:12;;;44339:245::o;44820:440::-;8800:37;;;45163:2;45148:18;;8800:37;;;;45246:2;45231:18;;8800:37;45001:2;44986:18;;44972:288::o;47550:335::-;;;47716:8;47704:10;47701:24;47698:2;;;-1:-1;;47728:12;47698:2;47763:6;47753:8;47750:20;47747:2;;;-1:-1;;47773:12;47747:2;-1:-1;;47833:2;47817:19;;47805:32;;47855:25;;;;;-1:-1;47692:193::o;47892:318::-;;;48042:8;48030:10;48027:24;48024:2;;;-1:-1;;48054:12;48024:2;48089:6;48079:8;48076:20;48073:2;;;-1:-1;;48099:12;48073:2;-1:-1;;48131:31;;;48180:25;;;;;-1:-1;48018:192::o;49032:268::-;49097:1;49104:101;49118:6;49115:1;49112:13;49104:101;;;49185:11;;;49179:18;49166:11;;;49159:39;49140:2;49133:10;49104:101;;;49220:6;49217:1;49214:13;49211:2;;;49097:1;49276:6;49271:3;49267:16;49260:27;49211:2;;49081:219;;;:::o;49494:117::-;-1:-1;;;;;48732:54;;49553:35;;49543:2;;49602:1;;49592:12", - "linkReferences": {}, - "immutableReferences": { "460": [{ "start": 2358, "length": 32 }] } - }, - "methodIdentifiers": { - "cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": "6170ff1b", - "configHash()": "e1f1176d", - "consumeMessageFromL2(uint256,uint256[])": "2c9dd5c0", - "finalize()": "4bb278f3", - "getMaxL1MsgFee()": "54eccba4", - "identify()": "eeb72866", - "initialize(bytes)": "439fab91", - "isFinalized()": "8d4e4083", - "isFrozen()": "33eeb147", - "isOperator(address)": "6d70f7ae", - "l1ToL2MessageCancellations(bytes32)": "9be446bf", - "l1ToL2MessageNonce()": "018cccdf", - "l1ToL2Messages(bytes32)": "77c7d7a9", - "l2ToL1Messages(bytes32)": "a46efaf3", - "messageCancellationDelay()": "8303bd8a", - "programHash()": "8a9bf090", - "registerOperator(address)": "3682a450", - "sendMessageToL2(uint256,uint256,uint256[])": "3e3aa6c5", - "setConfigHash(uint256)": "3d07b336", - "setMessageCancellationDelay(uint256)": "c99d397f", - "setProgramHash(uint256)": "e87e7332", - "starknetAcceptGovernance()": "946be3ed", - "starknetCancelNomination()": "e37fec25", - "starknetIsGovernor(address)": "01a01590", - "starknetNominateNewGovernor(address)": "91a66a26", - "starknetRemoveGovernor(address)": "84f921cd", - "startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": "7a98660b", - "stateBlockHash()": "382d83e3", - "stateBlockNumber()": "35befa5d", - "stateRoot()": "9588eca2", - "unregisterOperator(address)": "96115bc2", - "updateState(uint256[])": "853e2461" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"changedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldConfigHash\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newConfigHash\",\"type\":\"uint256\"}],\"name\":\"ConfigHashChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"ConsumedMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ConsumedMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Finalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"LogMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"LogMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"acceptedGovernor\",\"type\":\"address\"}],\"name\":\"LogNewGovernorAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nominatedGovernor\",\"type\":\"address\"}],\"name\":\"LogNominatedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogNominationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"LogOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"LogOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"removedGovernor\",\"type\":\"address\"}],\"name\":\"LogRemovedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateTransitionFact\",\"type\":\"bytes32\"}],\"name\":\"LogStateTransitionFact\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"globalRoot\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"blockNumber\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockHash\",\"type\":\"uint256\"}],\"name\":\"LogStateUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2Canceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2CancellationStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"changedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldProgramHash\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newProgramHash\",\"type\":\"uint256\"}],\"name\":\"ProgramHashChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"cancelL1ToL2Message\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"configHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"consumeMessageFromL2\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxL1MsgFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"l1ToL2MessageCancellations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ToL2MessageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"l1ToL2Messages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"l2ToL1Messages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageCancellationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOperator\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"sendMessageToL2\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newConfigHash\",\"type\":\"uint256\"}],\"name\":\"setConfigHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"delayInSeconds\",\"type\":\"uint256\"}],\"name\":\"setMessageCancellationDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProgramHash\",\"type\":\"uint256\"}],\"name\":\"setProgramHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"starknetAcceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"starknetCancelNomination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"starknetIsGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"starknetNominateNewGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governorForRemoval\",\"type\":\"address\"}],\"name\":\"starknetRemoveGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"startL1ToL2MessageCancellation\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateBlockHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateBlockNumber\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedOperator\",\"type\":\"address\"}],\"name\":\"unregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"programOutput\",\"type\":\"uint256[]\"}],\"name\":\"updateState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)\":{\"notice\":\"Cancels an L1 to L2 message, this function should be called at least messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation(). A message may only be cancelled by its sender. If the message is missing, the call will revert. Note that the message fee is not refunded.\"},\"consumeMessageFromL2(uint256,uint256[])\":{\"notice\":\"Consumes a message that was sent from an L2 contract. Returns the hash of the message.\"},\"getMaxL1MsgFee()\":{\"notice\":\"Returns the max fee (in Wei) that StarkNet will accept per single message.\"},\"identify()\":{\"notice\":\"Returns a string that identifies the contract.\"},\"l1ToL2MessageCancellations(bytes32)\":{\"notice\":\"Returns the timestamp at the time cancelL1ToL2Message was called with a message matching 'msgHash'. The function returns 0 if cancelL1ToL2Message was never called.\"},\"l1ToL2Messages(bytes32)\":{\"notice\":\"Returns the msg_fee + 1 for the message with the given 'msgHash', or 0 if no message with such a hash is pending.\"},\"sendMessageToL2(uint256,uint256,uint256[])\":{\"notice\":\"Sends a message to an L2 contract.\"},\"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)\":{\"notice\":\"Starts the cancellation of an L1 to L2 message. A message can be canceled messageCancellationDelay() seconds after this function is called. Note: This function may only be called for a message that is currently pending and the caller must be the sender of the that message.\"},\"stateBlockHash()\":{\"notice\":\"Returns the current block hash.\"},\"stateBlockNumber()\":{\"notice\":\"Returns the current block number.\"},\"stateRoot()\":{\"notice\":\"Returns the current state root.\"},\"updateState(uint256[])\":{\"notice\":\"Updates the state of the StarkNet, based on a proof of the StarkNet OS that the state transition is valid. Arguments: programOutput - The main part of the StarkNet OS program output. data_availability_fact - An encoding of the on-chain data associated with the 'programOutput'.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/StarknetSovereign.sol\":\"Starknet\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\"]},\"sources\":{\"lib/cairo-lang/src/starkware/solidity/components/Governance.sol\":{\"keccak256\":\"0xf95152fbacc9b6096be75c4a0f03bfc10b1a5d6219bd24ce61963b78d8ea4d7f\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://53814938c69e1ce9e911bacf16633ef2d555391e8dafd697fd7ee2f8b201c293\",\"dweb:/ipfs/QmVVXhKbDHLAnwmGHFBkRaMJ597PV4gdmHTxQFSVS7NiUu\"]},\"lib/cairo-lang/src/starkware/solidity/components/GovernedFinalizable.sol\":{\"keccak256\":\"0x99e7a7ce7494dffd1e29855ae193d8d8a8b1d8811dc5b4f65c11f53049f60718\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://82f5fb8443fdb206e0b161dd93ddd920e250fa29b1be7abc6999014cefdeb389\",\"dweb:/ipfs/QmYsdDfnxPc72HJANgRKNwdagWW3mzttrzMQ1T73abcVnx\"]},\"lib/cairo-lang/src/starkware/solidity/components/OnchainDataFactTreeEncoder.sol\":{\"keccak256\":\"0xb5fdb7ff413d7f06b0f62db39100f668fa2c89b22eb1232dd9b2b66b1df44490\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://a851defbca9032b49eae3bc5aae1f140c2ff45c8648ed56146cb738a80381a0c\",\"dweb:/ipfs/QmdKfzzP4zF5sdsZS74qo4o6YiGrWVCxzmeVj74rRnk8q4\"]},\"lib/cairo-lang/src/starkware/solidity/components/Operator.sol\":{\"keccak256\":\"0x9a6a1f3772861dc6d6645bd140bafa7f562fd630244316f754303e45a0b642b1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://7aaf1f4d36727c33ba2c653ff1405cf4e1034ce274d87b6dfffcc1314eeac9d8\",\"dweb:/ipfs/QmYdpszZJkpZ3eybwTWx6ssWVSdTVKaEgoaPm42T1pKS36\"]},\"lib/cairo-lang/src/starkware/solidity/interfaces/BlockDirectCall.sol\":{\"keccak256\":\"0xe8d027bbe8defa2df3caded6a7c5149372475e16d5cbaee80d5b05d923536ff9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://5f627a16e57292b1f58fad26970abb41c91be120da24712bbcd34a0b345b3f2d\",\"dweb:/ipfs/QmSk7WdEp1WwpHLZQdViuKJZ5E2C4w2YiFYKkKNiFPWc2E\"]},\"lib/cairo-lang/src/starkware/solidity/interfaces/ContractInitializer.sol\":{\"keccak256\":\"0x4899cc503a549113f495e45c1ca08a15c13f8f22d42468b1089f9279a41a9021\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://de484cf04271afc3b24a1cc0f37036a9707b6ff28efd69d9afe95d5b5bb0f4d4\",\"dweb:/ipfs/QmS2bNaTM2NpoiGZQH723z3zxtpZcfB8W5wXDTQKLqJzqM\"]},\"lib/cairo-lang/src/starkware/solidity/interfaces/IFactRegistry.sol\":{\"keccak256\":\"0xab04b296b506dfb0b4a8828f3dc463072fd50449a5ad8327d1baf01438b0fb35\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e451abe007f98081d1adfd759cc4168f81982992d8c0554650b94d37bc009e64\",\"dweb:/ipfs/QmVBNUWFhNX8PqSMcqRkHVaTbcm7KNpgSg91Sj6MepFG6u\"]},\"lib/cairo-lang/src/starkware/solidity/interfaces/Identity.sol\":{\"keccak256\":\"0xe09f6920ecf39cfa9285164bfba092dc9fce892da3fb4e3839391b5c039c34ff\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b68168b5efcfd7a269c1b50ca381776764ac460fe7be2354c1b2410a2c9676d5\",\"dweb:/ipfs/Qmagk5UEjwWkqMczGvxa3V2fG2h4779MbXZ23i5U98gMUo\"]},\"lib/cairo-lang/src/starkware/solidity/interfaces/MGovernance.sol\":{\"keccak256\":\"0x02dc54c223e2977a13a3e12bb60659598ce2c56bc8df3a27d8bb8e761c676c67\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://eff35423c5dc96cf0d223517c9eaca3dc028fbd8be9ec3f989299c6db8e8c5b2\",\"dweb:/ipfs/QmfDR7Yoq5Lz3zLLSj2jXoSojPYTrWp4HYhGRtXus4t1G6\"]},\"lib/cairo-lang/src/starkware/solidity/interfaces/MOperator.sol\":{\"keccak256\":\"0x00417855444c25ec8e3b119775a0f2c7407bffbf5db69a8347ce6313cda84bdf\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://0922504dd6f7d7c8011d26953b5e12a02b5af0f4308e17ea508b45686c4bd5aa\",\"dweb:/ipfs/QmcwebQGm1yLuhEYy2VnuR9vB9eWZJPRTTMWRxE3EXW43B\"]},\"lib/cairo-lang/src/starkware/solidity/interfaces/ProxySupport.sol\":{\"keccak256\":\"0xc2253392af4d0d80c55d8b45af6700353cc66a4633c931ee53f9485178758b7a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://14c96384bd0a2924abd78fbdfbfcb9e3dc6a6ba4e26778cf18ceeb5e9ffdc758\",\"dweb:/ipfs/QmbXxostCT9v3fnH4Ao9tGcHY7A6i4KvsR7JrcNBNM8XPe\"]},\"lib/cairo-lang/src/starkware/solidity/libraries/Addresses.sol\":{\"keccak256\":\"0x05016ed8cfde52acab00e22bb6ad741b8c0a6d0c8e358b87e275314e22f64461\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://632b9cd4f05f3ce39b5cdf5d20aa68b8800c4e292fe49dd6e86ffca7bc3a75e6\",\"dweb:/ipfs/QmUnJbZSJ23yEoemcsDwaus214uymAVS1LkyGdRPvZJfnZ\"]},\"lib/cairo-lang/src/starkware/solidity/libraries/NamedStorage.sol\":{\"keccak256\":\"0x014ba48551c965e42b7e8f2e22f6f5f559f1ecaa6b1ce2dbf965e2b9808514ee\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://fb77540fd0d17b382d61e597862b29d164256f7224f0f39a534d2e1c3c161140\",\"dweb:/ipfs/QmYCombekr8CQvCCjBDFVniNCnreg9Z2TT78ZjdS3FGNsk\"]},\"lib/cairo-lang/src/starkware/starknet/solidity/IStarknetMessaging.sol\":{\"keccak256\":\"0x75d3dad61854e3115a97fa314066cd3ff4544fa712bea1a6595bbac7ef8e92f8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://d5a07d8e15bfba827443a9f79f0465f1e24df4960a581754c6139964b56124c5\",\"dweb:/ipfs/QmUqBMSiC8b3T6L6mRFcxR83ByHK1q2KVo3nCoKsph8DJH\"]},\"lib/cairo-lang/src/starkware/starknet/solidity/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0xfeac71f229049b84eb47fbdae456f9de2074016828a4529e00abd4eddc8bb844\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://c9acd4424ec21178670c3b1793f2f8d2c4d59ff0f22063ba5f60100f18f47b95\",\"dweb:/ipfs/QmTHjQARTTVRFnCeThphAVocQYSk2hXCYT2yDr6TmZccJP\"]},\"lib/cairo-lang/src/starkware/starknet/solidity/Output.sol\":{\"keccak256\":\"0x2ac3d70a983a64285d80a86e9d7aa54512b24975610331de72f097e66e62e518\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b976a5bb24ba56e038fc3f9700c6cddf8d0c555fa2be5cd74db59cc26b8b25c0\",\"dweb:/ipfs/QmPCQPDJNmZZtpXHMm31gJz9CJshKgMviSQAXJ5V62dvbL\"]},\"lib/cairo-lang/src/starkware/starknet/solidity/StarknetGovernance.sol\":{\"keccak256\":\"0x8cbfaa3158fb569adc4cc2ac4b7c1045cce0eb180b365ecfaf2aec82f53d1ffe\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://196f9b478b3e766db7621bf6699a22cdab262203de63eed0ea29dfd614ef13d2\",\"dweb:/ipfs/QmeqGnZwcMHEHWwT4XzENy85XtFLty2y6j3o5k3JRYTpqm\"]},\"lib/cairo-lang/src/starkware/starknet/solidity/StarknetMessaging.sol\":{\"keccak256\":\"0xbab7ad137660d819316cdc502cd96b82db5ede18f580e7750bfd3ea4e65eb4fb\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://8bc3f628c8967f5179c604e77bd0cf9ad9ce9379240c130d50b38c713d6c3c21\",\"dweb:/ipfs/QmQXs5AzAbxxY6jicFNoHMepF5iAz2QppCjyZQjQZRy41J\"]},\"lib/cairo-lang/src/starkware/starknet/solidity/StarknetOperator.sol\":{\"keccak256\":\"0x2c1bdc4010e7b07a344336f1145cf8bedaced48fbfe91d065d185a2205ec3244\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9847d7ee4b5eff9513ab3df92e3b00e16c67ddbd6e5affbc855cab3b9b9ab4ac\",\"dweb:/ipfs/QmXaKMszDZJFtCa9ujwMeAZd1FcUM68BHsXe1s5VZLSWPh\"]},\"lib/cairo-lang/src/starkware/starknet/solidity/StarknetState.sol\":{\"keccak256\":\"0x98689b355b5758e590f3b5611b6df41e87b04202ab5457127e35b030af905b4f\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9ddafb29225921f0f985d654e634b077161fb298d6f23891ab6042e243b95233\",\"dweb:/ipfs/QmPMvx7j8SJe8tqw3cUNwDt2tiStSaz6y59cHGN7GgE6Rm\"]},\"src/StarknetSovereign.sol\":{\"keccak256\":\"0xc764b87700d3e383c229e490e6b0d0167ba1f462c64597c24eff3c204185baab\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9463375e63cc69c072ef952511973fa1d0ecdc8e8628d214a8970d4d1b8d4d14\",\"dweb:/ipfs/Qmd39hmPc8N11Ybb3auAxq6P5pcM7AgqmExbDTjaQPFx2Z\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.6.12+commit.27d51765" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "changedBy", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "oldConfigHash", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "newConfigHash", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ConfigHashChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fromAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "ConsumedMessageToL1", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ConsumedMessageToL2", - "anonymous": false - }, - { - "inputs": [], - "type": "event", - "name": "Finalized", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fromAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "LogMessageToL1", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "LogMessageToL2", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "acceptedGovernor", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogNewGovernorAccepted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "nominatedGovernor", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogNominatedGovernor", - "anonymous": false - }, - { - "inputs": [], - "type": "event", - "name": "LogNominationCancelled", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogOperatorAdded", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogOperatorRemoved", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "removedGovernor", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogRemovedGovernor", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "stateTransitionFact", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "LogStateTransitionFact", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "globalRoot", - "type": "uint256", - "indexed": false - }, - { - "internalType": "int256", - "name": "blockNumber", - "type": "int256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "blockHash", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "LogStateUpdate", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "MessageToL2Canceled", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "MessageToL2CancellationStarted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "changedBy", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "oldProgramHash", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "newProgramHash", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ProgramHashChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "cancelL1ToL2Message", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "configHash", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fromAddress", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "consumeMessageFromL2", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "finalize" - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "getMaxL1MsgFee", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "identify", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isFinalized", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isFrozen", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "user", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isOperator", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "l1ToL2MessageCancellations", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "l1ToL2MessageNonce", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "l1ToL2Messages", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "l2ToL1Messages", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "messageCancellationDelay", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "programHash", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOperator", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerOperator" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "sendMessageToL2", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newConfigHash", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfigHash" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "delayInSeconds", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setMessageCancellationDelay" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newProgramHash", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setProgramHash" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "starknetAcceptGovernance" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "starknetCancelNomination" - }, - { - "inputs": [ - { "internalType": "address", "name": "user", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "starknetIsGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "starknetNominateNewGovernor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "starknetRemoveGovernor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "toAddress", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "startL1ToL2MessageCancellation", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "stateBlockHash", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "stateBlockNumber", - "outputs": [ - { "internalType": "int256", "name": "", "type": "int256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "stateRoot", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "removedOperator", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "unregisterOperator" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "programOutput", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "updateState" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { - "kind": "user", - "methods": { - "cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": { - "notice": "Cancels an L1 to L2 message, this function should be called at least messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation(). A message may only be cancelled by its sender. If the message is missing, the call will revert. Note that the message fee is not refunded." - }, - "consumeMessageFromL2(uint256,uint256[])": { - "notice": "Consumes a message that was sent from an L2 contract. Returns the hash of the message." - }, - "getMaxL1MsgFee()": { - "notice": "Returns the max fee (in Wei) that StarkNet will accept per single message." - }, - "identify()": { - "notice": "Returns a string that identifies the contract." - }, - "l1ToL2MessageCancellations(bytes32)": { - "notice": "Returns the timestamp at the time cancelL1ToL2Message was called with a message matching 'msgHash'. The function returns 0 if cancelL1ToL2Message was never called." - }, - "l1ToL2Messages(bytes32)": { - "notice": "Returns the msg_fee + 1 for the message with the given 'msgHash', or 0 if no message with such a hash is pending." - }, - "sendMessageToL2(uint256,uint256,uint256[])": { - "notice": "Sends a message to an L2 contract." - }, - "startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": { - "notice": "Starts the cancellation of an L1 to L2 message. A message can be canceled messageCancellationDelay() seconds after this function is called. Note: This function may only be called for a message that is currently pending and the caller must be the sender of the that message." - }, - "stateBlockHash()": { "notice": "Returns the current block hash." }, - "stateBlockNumber()": { - "notice": "Returns the current block number." - }, - "stateRoot()": { "notice": "Returns the current state root." }, - "updateState(uint256[])": { - "notice": "Updates the state of the StarkNet, based on a proof of the StarkNet OS that the state transition is valid. Arguments: programOutput - The main part of the StarkNet OS program output. data_availability_fact - An encoding of the on-chain data associated with the 'programOutput'." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "cairo-lang/=lib/cairo-lang/src/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/", - "starknet-token/=lib/starknet-token/src/starkware/isd/", - "starkware/isd/=lib/starknet-token/src/starkware/isd/", - "starkware/solidity/=lib/cairo-lang/src/starkware/solidity/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "src/StarknetSovereign.sol": "Starknet" }, - "libraries": {} - }, - "sources": { - "lib/cairo-lang/src/starkware/solidity/components/Governance.sol": { - "keccak256": "0xf95152fbacc9b6096be75c4a0f03bfc10b1a5d6219bd24ce61963b78d8ea4d7f", - "urls": [ - "bzz-raw://53814938c69e1ce9e911bacf16633ef2d555391e8dafd697fd7ee2f8b201c293", - "dweb:/ipfs/QmVVXhKbDHLAnwmGHFBkRaMJ597PV4gdmHTxQFSVS7NiUu" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/components/GovernedFinalizable.sol": { - "keccak256": "0x99e7a7ce7494dffd1e29855ae193d8d8a8b1d8811dc5b4f65c11f53049f60718", - "urls": [ - "bzz-raw://82f5fb8443fdb206e0b161dd93ddd920e250fa29b1be7abc6999014cefdeb389", - "dweb:/ipfs/QmYsdDfnxPc72HJANgRKNwdagWW3mzttrzMQ1T73abcVnx" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/components/OnchainDataFactTreeEncoder.sol": { - "keccak256": "0xb5fdb7ff413d7f06b0f62db39100f668fa2c89b22eb1232dd9b2b66b1df44490", - "urls": [ - "bzz-raw://a851defbca9032b49eae3bc5aae1f140c2ff45c8648ed56146cb738a80381a0c", - "dweb:/ipfs/QmdKfzzP4zF5sdsZS74qo4o6YiGrWVCxzmeVj74rRnk8q4" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/components/Operator.sol": { - "keccak256": "0x9a6a1f3772861dc6d6645bd140bafa7f562fd630244316f754303e45a0b642b1", - "urls": [ - "bzz-raw://7aaf1f4d36727c33ba2c653ff1405cf4e1034ce274d87b6dfffcc1314eeac9d8", - "dweb:/ipfs/QmYdpszZJkpZ3eybwTWx6ssWVSdTVKaEgoaPm42T1pKS36" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/interfaces/BlockDirectCall.sol": { - "keccak256": "0xe8d027bbe8defa2df3caded6a7c5149372475e16d5cbaee80d5b05d923536ff9", - "urls": [ - "bzz-raw://5f627a16e57292b1f58fad26970abb41c91be120da24712bbcd34a0b345b3f2d", - "dweb:/ipfs/QmSk7WdEp1WwpHLZQdViuKJZ5E2C4w2YiFYKkKNiFPWc2E" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/interfaces/ContractInitializer.sol": { - "keccak256": "0x4899cc503a549113f495e45c1ca08a15c13f8f22d42468b1089f9279a41a9021", - "urls": [ - "bzz-raw://de484cf04271afc3b24a1cc0f37036a9707b6ff28efd69d9afe95d5b5bb0f4d4", - "dweb:/ipfs/QmS2bNaTM2NpoiGZQH723z3zxtpZcfB8W5wXDTQKLqJzqM" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/interfaces/IFactRegistry.sol": { - "keccak256": "0xab04b296b506dfb0b4a8828f3dc463072fd50449a5ad8327d1baf01438b0fb35", - "urls": [ - "bzz-raw://e451abe007f98081d1adfd759cc4168f81982992d8c0554650b94d37bc009e64", - "dweb:/ipfs/QmVBNUWFhNX8PqSMcqRkHVaTbcm7KNpgSg91Sj6MepFG6u" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/interfaces/Identity.sol": { - "keccak256": "0xe09f6920ecf39cfa9285164bfba092dc9fce892da3fb4e3839391b5c039c34ff", - "urls": [ - "bzz-raw://b68168b5efcfd7a269c1b50ca381776764ac460fe7be2354c1b2410a2c9676d5", - "dweb:/ipfs/Qmagk5UEjwWkqMczGvxa3V2fG2h4779MbXZ23i5U98gMUo" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/interfaces/MGovernance.sol": { - "keccak256": "0x02dc54c223e2977a13a3e12bb60659598ce2c56bc8df3a27d8bb8e761c676c67", - "urls": [ - "bzz-raw://eff35423c5dc96cf0d223517c9eaca3dc028fbd8be9ec3f989299c6db8e8c5b2", - "dweb:/ipfs/QmfDR7Yoq5Lz3zLLSj2jXoSojPYTrWp4HYhGRtXus4t1G6" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/interfaces/MOperator.sol": { - "keccak256": "0x00417855444c25ec8e3b119775a0f2c7407bffbf5db69a8347ce6313cda84bdf", - "urls": [ - "bzz-raw://0922504dd6f7d7c8011d26953b5e12a02b5af0f4308e17ea508b45686c4bd5aa", - "dweb:/ipfs/QmcwebQGm1yLuhEYy2VnuR9vB9eWZJPRTTMWRxE3EXW43B" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/interfaces/ProxySupport.sol": { - "keccak256": "0xc2253392af4d0d80c55d8b45af6700353cc66a4633c931ee53f9485178758b7a", - "urls": [ - "bzz-raw://14c96384bd0a2924abd78fbdfbfcb9e3dc6a6ba4e26778cf18ceeb5e9ffdc758", - "dweb:/ipfs/QmbXxostCT9v3fnH4Ao9tGcHY7A6i4KvsR7JrcNBNM8XPe" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/libraries/Addresses.sol": { - "keccak256": "0x05016ed8cfde52acab00e22bb6ad741b8c0a6d0c8e358b87e275314e22f64461", - "urls": [ - "bzz-raw://632b9cd4f05f3ce39b5cdf5d20aa68b8800c4e292fe49dd6e86ffca7bc3a75e6", - "dweb:/ipfs/QmUnJbZSJ23yEoemcsDwaus214uymAVS1LkyGdRPvZJfnZ" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/solidity/libraries/NamedStorage.sol": { - "keccak256": "0x014ba48551c965e42b7e8f2e22f6f5f559f1ecaa6b1ce2dbf965e2b9808514ee", - "urls": [ - "bzz-raw://fb77540fd0d17b382d61e597862b29d164256f7224f0f39a534d2e1c3c161140", - "dweb:/ipfs/QmYCombekr8CQvCCjBDFVniNCnreg9Z2TT78ZjdS3FGNsk" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/starknet/solidity/IStarknetMessaging.sol": { - "keccak256": "0x75d3dad61854e3115a97fa314066cd3ff4544fa712bea1a6595bbac7ef8e92f8", - "urls": [ - "bzz-raw://d5a07d8e15bfba827443a9f79f0465f1e24df4960a581754c6139964b56124c5", - "dweb:/ipfs/QmUqBMSiC8b3T6L6mRFcxR83ByHK1q2KVo3nCoKsph8DJH" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/starknet/solidity/IStarknetMessagingEvents.sol": { - "keccak256": "0xfeac71f229049b84eb47fbdae456f9de2074016828a4529e00abd4eddc8bb844", - "urls": [ - "bzz-raw://c9acd4424ec21178670c3b1793f2f8d2c4d59ff0f22063ba5f60100f18f47b95", - "dweb:/ipfs/QmTHjQARTTVRFnCeThphAVocQYSk2hXCYT2yDr6TmZccJP" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/starknet/solidity/Output.sol": { - "keccak256": "0x2ac3d70a983a64285d80a86e9d7aa54512b24975610331de72f097e66e62e518", - "urls": [ - "bzz-raw://b976a5bb24ba56e038fc3f9700c6cddf8d0c555fa2be5cd74db59cc26b8b25c0", - "dweb:/ipfs/QmPCQPDJNmZZtpXHMm31gJz9CJshKgMviSQAXJ5V62dvbL" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/starknet/solidity/StarknetGovernance.sol": { - "keccak256": "0x8cbfaa3158fb569adc4cc2ac4b7c1045cce0eb180b365ecfaf2aec82f53d1ffe", - "urls": [ - "bzz-raw://196f9b478b3e766db7621bf6699a22cdab262203de63eed0ea29dfd614ef13d2", - "dweb:/ipfs/QmeqGnZwcMHEHWwT4XzENy85XtFLty2y6j3o5k3JRYTpqm" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/starknet/solidity/StarknetMessaging.sol": { - "keccak256": "0xbab7ad137660d819316cdc502cd96b82db5ede18f580e7750bfd3ea4e65eb4fb", - "urls": [ - "bzz-raw://8bc3f628c8967f5179c604e77bd0cf9ad9ce9379240c130d50b38c713d6c3c21", - "dweb:/ipfs/QmQXs5AzAbxxY6jicFNoHMepF5iAz2QppCjyZQjQZRy41J" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/starknet/solidity/StarknetOperator.sol": { - "keccak256": "0x2c1bdc4010e7b07a344336f1145cf8bedaced48fbfe91d065d185a2205ec3244", - "urls": [ - "bzz-raw://9847d7ee4b5eff9513ab3df92e3b00e16c67ddbd6e5affbc855cab3b9b9ab4ac", - "dweb:/ipfs/QmXaKMszDZJFtCa9ujwMeAZd1FcUM68BHsXe1s5VZLSWPh" - ], - "license": "Apache-2.0." - }, - "lib/cairo-lang/src/starkware/starknet/solidity/StarknetState.sol": { - "keccak256": "0x98689b355b5758e590f3b5611b6df41e87b04202ab5457127e35b030af905b4f", - "urls": [ - "bzz-raw://9ddafb29225921f0f985d654e634b077161fb298d6f23891ab6042e243b95233", - "dweb:/ipfs/QmPMvx7j8SJe8tqw3cUNwDt2tiStSaz6y59cHGN7GgE6Rm" - ], - "license": "Apache-2.0." - }, - "src/StarknetSovereign.sol": { - "keccak256": "0xc764b87700d3e383c229e490e6b0d0167ba1f462c64597c24eff3c204185baab", - "urls": [ - "bzz-raw://9463375e63cc69c072ef952511973fa1d0ecdc8e8628d214a8970d4d1b8d4d14", - "dweb:/ipfs/Qmd39hmPc8N11Ybb3auAxq6P5pcM7AgqmExbDTjaQPFx2Z" - ], - "license": "Apache-2.0." - } - }, - "version": 1 - }, - "ast": { - "absolutePath": "src/StarknetSovereign.sol", - "id": 31651, - "exportedSymbols": { "Starknet": [31650] }, - "nodeType": "SourceUnit", - "src": "40:7828:37", - "nodes": [ - { - "id": 31173, - "nodeType": "PragmaDirective", - "src": "40:24:37", - "nodes": [], - "literals": ["solidity", "^", "0.6", ".12"] - }, - { - "id": 31174, - "nodeType": "PragmaDirective", - "src": "65:33:37", - "nodes": [], - "literals": ["experimental", "ABIEncoderV2"] - }, - { - "id": 31175, - "nodeType": "ImportDirective", - "src": "100:32:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/starknet/solidity/Output.sol", - "file": "starknet-cc/Output.sol", - "scope": 31651, - "sourceUnit": 1654, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31176, - "nodeType": "ImportDirective", - "src": "133:44:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/starknet/solidity/StarknetGovernance.sol", - "file": "starknet-cc/StarknetGovernance.sol", - "scope": 31651, - "sourceUnit": 1726, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31177, - "nodeType": "ImportDirective", - "src": "178:43:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/starknet/solidity/StarknetMessaging.sol", - "file": "starknet-cc/StarknetMessaging.sol", - "scope": 31651, - "sourceUnit": 2201, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31178, - "nodeType": "ImportDirective", - "src": "222:42:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/starknet/solidity/StarknetOperator.sol", - "file": "starknet-cc/StarknetOperator.sol", - "scope": 31651, - "sourceUnit": 2225, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31179, - "nodeType": "ImportDirective", - "src": "265:39:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/starknet/solidity/StarknetState.sol", - "file": "starknet-cc/StarknetState.sol", - "scope": 31651, - "sourceUnit": 2334, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31180, - "nodeType": "ImportDirective", - "src": "305:63:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/solidity/components/GovernedFinalizable.sol", - "file": "starkware/solidity/components/GovernedFinalizable.sol", - "scope": 31651, - "sourceUnit": 320, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31181, - "nodeType": "ImportDirective", - "src": "369:70:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/solidity/components/OnchainDataFactTreeEncoder.sol", - "file": "starkware/solidity/components/OnchainDataFactTreeEncoder.sol", - "scope": 31651, - "sourceUnit": 382, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31182, - "nodeType": "ImportDirective", - "src": "440:63:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/solidity/interfaces/ContractInitializer.sol", - "file": "starkware/solidity/interfaces/ContractInitializer.sol", - "scope": 31651, - "sourceUnit": 516, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31183, - "nodeType": "ImportDirective", - "src": "504:52:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/solidity/interfaces/Identity.sol", - "file": "starkware/solidity/interfaces/Identity.sol", - "scope": 31651, - "sourceUnit": 534, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31184, - "nodeType": "ImportDirective", - "src": "557:57:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/solidity/interfaces/IFactRegistry.sol", - "file": "starkware/solidity/interfaces/IFactRegistry.sol", - "scope": 31651, - "sourceUnit": 526, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31185, - "nodeType": "ImportDirective", - "src": "615:56:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/solidity/interfaces/ProxySupport.sol", - "file": "starkware/solidity/interfaces/ProxySupport.sol", - "scope": 31651, - "sourceUnit": 774, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31186, - "nodeType": "ImportDirective", - "src": "672:55:37", - "nodes": [], - "absolutePath": "lib/cairo-lang/src/starkware/solidity/libraries/NamedStorage.sol", - "file": "starkware/solidity/libraries/NamedStorage.sol", - "scope": 31651, - "sourceUnit": 1107, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 31650, - "nodeType": "ContractDefinition", - "src": "729:7138:37", - "nodes": [ - { - "id": 31203, - "nodeType": "UsingForDirective", - "src": "906:44:37", - "nodes": [], - "libraryName": { - "contractScope": null, - "id": 31201, - "name": "StarknetState", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2333, - "src": "912:13:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetState_$2333", - "typeString": "library StarknetState" - } - }, - "typeName": { - "contractScope": null, - "id": 31202, - "name": "StarknetState.State", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2234, - "src": "930:19:37", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State" - } - } - }, - { - "id": 31211, - "nodeType": "EventDefinition", - "src": "1011:127:37", - "nodes": [], - "anonymous": false, - "documentation": null, - "name": "ConfigHashChanged", - "parameters": { - "id": 31210, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31205, - "indexed": true, - "mutability": "mutable", - "name": "changedBy", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31211, - "src": "1044:25:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 31204, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1044:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31207, - "indexed": false, - "mutability": "mutable", - "name": "oldConfigHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31211, - "src": "1079:21:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31206, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1079:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31209, - "indexed": false, - "mutability": "mutable", - "name": "newConfigHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31211, - "src": "1110:21:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31208, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1110:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1034:103:37" - } - }, - { - "id": 31219, - "nodeType": "EventDefinition", - "src": "1196:80:37", - "nodes": [], - "anonymous": false, - "documentation": null, - "name": "LogStateUpdate", - "parameters": { - "id": 31218, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31213, - "indexed": false, - "mutability": "mutable", - "name": "globalRoot", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31219, - "src": "1217:18:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31212, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1217:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31215, - "indexed": false, - "mutability": "mutable", - "name": "blockNumber", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31219, - "src": "1237:18:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 31214, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "1237:6:37", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31217, - "indexed": false, - "mutability": "mutable", - "name": "blockHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31219, - "src": "1257:17:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31216, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1257:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1216:59:37" - } - }, - { - "id": 31223, - "nodeType": "EventDefinition", - "src": "1351:58:37", - "nodes": [], - "anonymous": false, - "documentation": null, - "name": "LogStateTransitionFact", - "parameters": { - "id": 31222, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31221, - "indexed": false, - "mutability": "mutable", - "name": "stateTransitionFact", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31223, - "src": "1380:27:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 31220, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1380:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1379:29:37" - } - }, - { - "id": 31231, - "nodeType": "EventDefinition", - "src": "1474:130:37", - "nodes": [], - "anonymous": false, - "documentation": null, - "name": "ProgramHashChanged", - "parameters": { - "id": 31230, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31225, - "indexed": true, - "mutability": "mutable", - "name": "changedBy", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31231, - "src": "1508:25:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 31224, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1508:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31227, - "indexed": false, - "mutability": "mutable", - "name": "oldProgramHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31231, - "src": "1543:22:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31226, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1543:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31229, - "indexed": false, - "mutability": "mutable", - "name": "newProgramHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31231, - "src": "1575:22:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31228, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1575:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1498:105:37" - } - }, - { - "id": 31234, - "nodeType": "VariableDeclaration", - "src": "1643:81:37", - "nodes": [], - "constant": true, - "mutability": "constant", - "name": "PROGRAM_HASH_TAG", - "overrides": null, - "scope": 31650, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 31232, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1643:6:37", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "535441524b4e45545f312e305f494e49545f50524f4752414d5f484153485f55494e54", - "id": 31233, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1687:37:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8cde0e99a4532474b22bd3952cb1c6b00478babd3678337325283f4f48110fc4", - "typeString": "literal_string \"STARKNET_1.0_INIT_PROGRAM_HASH_UINT\"" - }, - "value": "STARKNET_1.0_INIT_PROGRAM_HASH_UINT" - }, - "visibility": "internal" - }, - { - "id": 31237, - "nodeType": "VariableDeclaration", - "src": "1730:84:37", - "nodes": [], - "constant": true, - "mutability": "constant", - "name": "VERIFIER_ADDRESS_TAG", - "overrides": null, - "scope": 31650, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 31235, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1730:6:37", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "535441524b4e45545f312e305f494e49545f56455249464945525f41444452455353", - "id": 31236, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1778:36:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_04e7be39f2fb63cfd7d4fcfe19f108bc6b411ed972d99fca0a47dcaff878ce5e", - "typeString": "literal_string \"STARKNET_1.0_INIT_VERIFIER_ADDRESS\"" - }, - "value": "STARKNET_1.0_INIT_VERIFIER_ADDRESS" - }, - "visibility": "internal" - }, - { - "id": 31240, - "nodeType": "VariableDeclaration", - "src": "1820:85:37", - "nodes": [], - "constant": true, - "mutability": "constant", - "name": "STATE_STRUCT_TAG", - "overrides": null, - "scope": 31650, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 31238, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1820:6:37", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "535441524b4e45545f312e305f494e49545f535441524b4e45545f53544154455f535452554354", - "id": 31239, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1864:41:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_71a8ef1b1265359d77973c3524afac225c0a0d829a0d4da5cac3b34532019fec", - "typeString": "literal_string \"STARKNET_1.0_INIT_STARKNET_STATE_STRUCT\"" - }, - "value": "STARKNET_1.0_INIT_STARKNET_STATE_STRUCT" - }, - "visibility": "internal" - }, - { - "id": 31243, - "nodeType": "VariableDeclaration", - "src": "1952:78:37", - "nodes": [], - "constant": true, - "mutability": "constant", - "name": "CONFIG_HASH_TAG", - "overrides": null, - "scope": 31650, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 31241, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1952:6:37", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "535441524b4e45545f312e305f535441524b4e45545f434f4e4649475f48415348", - "id": 31242, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1995:35:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b4c82a817c6e58e43d4ecb2529caab94383420d8f31e963cfe54dfe32d2cca56", - "typeString": "literal_string \"STARKNET_1.0_STARKNET_CONFIG_HASH\"" - }, - "value": "STARKNET_1.0_STARKNET_CONFIG_HASH" - }, - "visibility": "internal" - }, - { - "id": 31265, - "nodeType": "FunctionDefinition", - "src": "2037:205:37", - "nodes": [], - "body": { - "id": 31264, - "nodeType": "Block", - "src": "2122:120:37", - "nodes": [], - "statements": [ - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31253, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "2156:3:37", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 31254, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2156:10:37", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31255, - "name": "programHash", - "nodeType": "Identifier", - "overloadedDeclarations": [31312, 31325], - "referencedDeclaration": 31312, - "src": "2168:11:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 31256, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2168:13:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 31257, - "name": "newProgramHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31245, - "src": "2183:14:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 31252, - "name": "ProgramHashChanged", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31231, - "src": "2137:18:37", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 31258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2137:61:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31259, - "nodeType": "EmitStatement", - "src": "2132:66:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31261, - "name": "newProgramHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31245, - "src": "2220:14:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 31260, - "name": "programHash", - "nodeType": "Identifier", - "overloadedDeclarations": [31312, 31325], - "referencedDeclaration": 31325, - "src": "2208:11:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 31262, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2208:27:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31263, - "nodeType": "ExpressionStatement", - "src": "2208:27:37" - } - ] - }, - "documentation": null, - "functionSelector": "e87e7332", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 31248, - "modifierName": { - "argumentTypes": null, - "id": 31247, - "name": "notFinalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 300, - "src": "2094:12:37", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2094:12:37" - }, - { - "arguments": null, - "id": 31250, - "modifierName": { - "argumentTypes": null, - "id": 31249, - "name": "onlyGovernance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 554, - "src": "2107:14:37", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2107:14:37" - } - ], - "name": "setProgramHash", - "overrides": null, - "parameters": { - "id": 31246, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31245, - "mutability": "mutable", - "name": "newProgramHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31265, - "src": "2061:22:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31244, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2061:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2060:24:37" - }, - "returnParameters": { - "id": 31251, - "nodeType": "ParameterList", - "parameters": [], - "src": "2122:0:37" - }, - "scope": 31650, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 31287, - "nodeType": "FunctionDefinition", - "src": "2248:198:37", - "nodes": [], - "body": { - "id": 31286, - "nodeType": "Block", - "src": "2331:115:37", - "nodes": [], - "statements": [ - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31275, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "2364:3:37", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 31276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2364:10:37", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31277, - "name": "configHash", - "nodeType": "Identifier", - "overloadedDeclarations": [31349, 31360], - "referencedDeclaration": 31360, - "src": "2376:10:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 31278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2376:12:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 31279, - "name": "newConfigHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31267, - "src": "2390:13:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 31274, - "name": "ConfigHashChanged", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31211, - "src": "2346:17:37", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 31280, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2346:58:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31281, - "nodeType": "EmitStatement", - "src": "2341:63:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31283, - "name": "newConfigHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31267, - "src": "2425:13:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 31282, - "name": "configHash", - "nodeType": "Identifier", - "overloadedDeclarations": [31349, 31360], - "referencedDeclaration": 31349, - "src": "2414:10:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 31284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2414:25:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31285, - "nodeType": "ExpressionStatement", - "src": "2414:25:37" - } - ] - }, - "documentation": null, - "functionSelector": "3d07b336", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 31270, - "modifierName": { - "argumentTypes": null, - "id": 31269, - "name": "notFinalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 300, - "src": "2303:12:37", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2303:12:37" - }, - { - "arguments": null, - "id": 31272, - "modifierName": { - "argumentTypes": null, - "id": 31271, - "name": "onlyGovernance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 554, - "src": "2316:14:37", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2316:14:37" - } - ], - "name": "setConfigHash", - "overrides": null, - "parameters": { - "id": 31268, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31267, - "mutability": "mutable", - "name": "newConfigHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31287, - "src": "2271:21:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31266, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2271:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2270:23:37" - }, - "returnParameters": { - "id": 31273, - "nodeType": "ParameterList", - "parameters": [], - "src": "2331:0:37" - }, - "scope": 31650, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 31301, - "nodeType": "FunctionDefinition", - "src": "2452:183:37", - "nodes": [], - "body": { - "id": 31300, - "nodeType": "Block", - "src": "2578:57:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31297, - "name": "delayInSeconds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31289, - "src": "2613:14:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 31296, - "name": "messageCancellationDelay", - "nodeType": "Identifier", - "overloadedDeclarations": [1836, 1849], - "referencedDeclaration": 1849, - "src": "2588:24:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 31298, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2588:40:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31299, - "nodeType": "ExpressionStatement", - "src": "2588:40:37" - } - ] - }, - "documentation": null, - "functionSelector": "c99d397f", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 31292, - "modifierName": { - "argumentTypes": null, - "id": 31291, - "name": "notFinalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 300, - "src": "2538:12:37", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2538:12:37" - }, - { - "arguments": null, - "id": 31294, - "modifierName": { - "argumentTypes": null, - "id": 31293, - "name": "onlyGovernance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 554, - "src": "2559:14:37", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2559:14:37" - } - ], - "name": "setMessageCancellationDelay", - "overrides": null, - "parameters": { - "id": 31290, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31289, - "mutability": "mutable", - "name": "delayInSeconds", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31301, - "src": "2489:22:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31288, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2489:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2488:24:37" - }, - "returnParameters": { - "id": 31295, - "nodeType": "ParameterList", - "parameters": [], - "src": "2578:0:37" - }, - "scope": 31650, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 31312, - "nodeType": "FunctionDefinition", - "src": "2699:120:37", - "nodes": [], - "body": { - "id": 31311, - "nodeType": "Block", - "src": "2752:67:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31308, - "name": "PROGRAM_HASH_TAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31234, - "src": "2795:16:37", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 31306, - "name": "NamedStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1106, - "src": "2769:12:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_NamedStorage_$1106_$", - "typeString": "type(library NamedStorage)" - } - }, - "id": 31307, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getUintValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 968, - "src": "2769:25:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (string memory) view returns (uint256)" - } - }, - "id": 31309, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2769:43:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 31305, - "id": 31310, - "nodeType": "Return", - "src": "2762:50:37" - } - ] - }, - "documentation": null, - "functionSelector": "8a9bf090", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "programHash", - "overrides": null, - "parameters": { - "id": 31302, - "nodeType": "ParameterList", - "parameters": [], - "src": "2719:2:37" - }, - "returnParameters": { - "id": 31305, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31304, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31312, - "src": "2743:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31303, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2743:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2742:9:37" - }, - "scope": 31650, - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "id": 31325, - "nodeType": "FunctionDefinition", - "src": "2884:112:37", - "nodes": [], - "body": { - "id": 31324, - "nodeType": "Block", - "src": "2929:67:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31320, - "name": "PROGRAM_HASH_TAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31234, - "src": "2965:16:37", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "argumentTypes": null, - "id": 31321, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31314, - "src": "2983:5:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 31317, - "name": "NamedStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1106, - "src": "2939:12:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_NamedStorage_$1106_$", - "typeString": "type(library NamedStorage)" - } - }, - "id": 31319, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setUintValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 986, - "src": "2939:25:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$", - "typeString": "function (string memory,uint256)" - } - }, - "id": 31322, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2939:50:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31323, - "nodeType": "ExpressionStatement", - "src": "2939:50:37" - } - ] - }, - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "programHash", - "overrides": null, - "parameters": { - "id": 31315, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31314, - "mutability": "mutable", - "name": "value", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31325, - "src": "2905:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31313, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2905:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2904:15:37" - }, - "returnParameters": { - "id": 31316, - "nodeType": "ParameterList", - "parameters": [], - "src": "2929:0:37" - }, - "scope": 31650, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31336, - "nodeType": "FunctionDefinition", - "src": "3052:126:37", - "nodes": [], - "body": { - "id": 31335, - "nodeType": "Block", - "src": "3104:74:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31332, - "name": "VERIFIER_ADDRESS_TAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31237, - "src": "3150:20:37", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 31330, - "name": "NamedStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1106, - "src": "3121:12:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_NamedStorage_$1106_$", - "typeString": "type(library NamedStorage)" - } - }, - "id": 31331, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getAddressValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 1026, - "src": "3121:28:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_address_$", - "typeString": "function (string memory) view returns (address)" - } - }, - "id": 31333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3121:50:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 31329, - "id": 31334, - "nodeType": "Return", - "src": "3114:57:37" - } - ] - }, - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "verifier", - "overrides": null, - "parameters": { - "id": 31326, - "nodeType": "ParameterList", - "parameters": [], - "src": "3069:2:37" - }, - "returnParameters": { - "id": 31329, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31328, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31336, - "src": "3095:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 31327, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3095:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3094:9:37" - }, - "scope": 31650, - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31349, - "nodeType": "FunctionDefinition", - "src": "3242:110:37", - "nodes": [], - "body": { - "id": 31348, - "nodeType": "Block", - "src": "3286:66:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31344, - "name": "CONFIG_HASH_TAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31243, - "src": "3322:15:37", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "argumentTypes": null, - "id": 31345, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31338, - "src": "3339:5:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 31341, - "name": "NamedStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1106, - "src": "3296:12:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_NamedStorage_$1106_$", - "typeString": "type(library NamedStorage)" - } - }, - "id": 31343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setUintValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 986, - "src": "3296:25:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$", - "typeString": "function (string memory,uint256)" - } - }, - "id": 31346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3296:49:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31347, - "nodeType": "ExpressionStatement", - "src": "3296:49:37" - } - ] - }, - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "configHash", - "overrides": null, - "parameters": { - "id": 31339, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31338, - "mutability": "mutable", - "name": "value", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31349, - "src": "3262:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31337, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3262:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3261:15:37" - }, - "returnParameters": { - "id": 31340, - "nodeType": "ParameterList", - "parameters": [], - "src": "3286:0:37" - }, - "scope": 31650, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31360, - "nodeType": "FunctionDefinition", - "src": "3415:118:37", - "nodes": [], - "body": { - "id": 31359, - "nodeType": "Block", - "src": "3467:66:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31356, - "name": "CONFIG_HASH_TAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31243, - "src": "3510:15:37", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 31354, - "name": "NamedStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1106, - "src": "3484:12:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_NamedStorage_$1106_$", - "typeString": "type(library NamedStorage)" - } - }, - "id": 31355, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getUintValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 968, - "src": "3484:25:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (string memory) view returns (uint256)" - } - }, - "id": 31357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3484:42:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 31353, - "id": 31358, - "nodeType": "Return", - "src": "3477:49:37" - } - ] - }, - "documentation": null, - "functionSelector": "e1f1176d", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "configHash", - "overrides": null, - "parameters": { - "id": 31350, - "nodeType": "ParameterList", - "parameters": [], - "src": "3434:2:37" - }, - "returnParameters": { - "id": 31353, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31352, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31360, - "src": "3458:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31351, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3458:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3457:9:37" - }, - "scope": 31650, - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "id": 31373, - "nodeType": "FunctionDefinition", - "src": "3539:130:37", - "nodes": [], - "body": { - "id": 31372, - "nodeType": "Block", - "src": "3591:78:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31368, - "name": "VERIFIER_ADDRESS_TAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31237, - "src": "3634:20:37", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "argumentTypes": null, - "id": 31369, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31362, - "src": "3656:5:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 31365, - "name": "NamedStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1106, - "src": "3601:12:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_NamedStorage_$1106_$", - "typeString": "type(library NamedStorage)" - } - }, - "id": 31367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setAddressValueOnce", - "nodeType": "MemberAccess", - "referencedDeclaration": 1069, - "src": "3601:32:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$", - "typeString": "function (string memory,address)" - } - }, - "id": 31370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3601:61:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31371, - "nodeType": "ExpressionStatement", - "src": "3601:61:37" - } - ] - }, - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setVerifierAddress", - "overrides": null, - "parameters": { - "id": 31363, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31362, - "mutability": "mutable", - "name": "value", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31373, - "src": "3567:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 31361, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3567:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3566:15:37" - }, - "returnParameters": { - "id": 31364, - "nodeType": "ParameterList", - "parameters": [], - "src": "3591:0:37" - }, - "scope": 31650, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31389, - "nodeType": "FunctionDefinition", - "src": "3722:232:37", - "nodes": [], - "body": { - "id": 31388, - "nodeType": "Block", - "src": "3803:151:37", - "nodes": [], - "statements": [ - { - "assignments": [31379], - "declarations": [ - { - "constant": false, - "id": 31379, - "mutability": "mutable", - "name": "location", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31388, - "src": "3813:16:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 31378, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3813:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 31386, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31383, - "name": "STATE_STRUCT_TAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31240, - "src": "3859:16:37", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 31381, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "3842:3:37", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 31382, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3842:16:37", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 31384, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3842:34:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 31380, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "3832:9:37", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 31385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3832:45:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3813:64:37" - }, - { - "AST": { - "nodeType": "YulBlock", - "src": "3896:52:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3910:28:37", - "value": { - "name": "location", - "nodeType": "YulIdentifier", - "src": "3930:8:37" - }, - "variableNames": [ - { - "name": "stateStruct_slot", - "nodeType": "YulIdentifier", - "src": "3910:16:37" - } - ] - } - ] - }, - "evmVersion": "istanbul", - "externalReferences": [ - { - "declaration": 31379, - "isOffset": false, - "isSlot": false, - "src": "3930:8:37", - "valueSize": 1 - }, - { - "declaration": 31376, - "isOffset": false, - "isSlot": true, - "src": "3910:16:37", - "valueSize": 1 - } - ], - "id": 31387, - "nodeType": "InlineAssembly", - "src": "3887:61:37" - } - ] - }, - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "state", - "overrides": null, - "parameters": { - "id": 31374, - "nodeType": "ParameterList", - "parameters": [], - "src": "3736:2:37" - }, - "returnParameters": { - "id": 31377, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31376, - "mutability": "mutable", - "name": "stateStruct", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31389, - "src": "3762:39:37", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State" - }, - "typeName": { - "contractScope": null, - "id": 31375, - "name": "StarknetState.State", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2234, - "src": "3762:19:37", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3761:41:37" - }, - "scope": 31650, - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31401, - "nodeType": "FunctionDefinition", - "src": "3960:105:37", - "nodes": [], - "body": { - "id": 31400, - "nodeType": "Block", - "src": "4023:42:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 31398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31395, - "name": "programHash", - "nodeType": "Identifier", - "overloadedDeclarations": [31312, 31325], - "referencedDeclaration": 31312, - "src": "4040:11:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 31396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4040:13:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 31397, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4057:1:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4040:18:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 31394, - "id": 31399, - "nodeType": "Return", - "src": "4033:25:37" - } - ] - }, - "baseFunctions": [499], - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isInitialized", - "overrides": { - "id": 31391, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3999:8:37" - }, - "parameters": { - "id": 31390, - "nodeType": "ParameterList", - "parameters": [], - "src": "3982:2:37" - }, - "returnParameters": { - "id": 31394, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31393, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31401, - "src": "4017:4:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 31392, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4017:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4016:6:37" - }, - "scope": 31650, - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31410, - "nodeType": "FunctionDefinition", - "src": "4071:95:37", - "nodes": [], - "body": { - "id": 31409, - "nodeType": "Block", - "src": "4141:25:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 31407, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4158:1:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 31406, - "id": 31408, - "nodeType": "Return", - "src": "4151:8:37" - } - ] - }, - "baseFunctions": [494], - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "numOfSubContracts", - "overrides": { - "id": 31403, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4114:8:37" - }, - "parameters": { - "id": 31402, - "nodeType": "ParameterList", - "parameters": [], - "src": "4097:2:37" - }, - "returnParameters": { - "id": 31406, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31405, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31410, - "src": "4132:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31404, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4132:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4131:9:37" - }, - "scope": 31650, - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31446, - "nodeType": "FunctionDefinition", - "src": "4172:266:37", - "nodes": [], - "body": { - "id": 31445, - "nodeType": "Block", - "src": "4242:196:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 31422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31417, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31412, - "src": "4260:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 31418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4260:11:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_192_by_1", - "typeString": "int_const 192" - }, - "id": 31421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "36", - "id": 31419, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4275:1:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_6_by_1", - "typeString": "int_const 6" - }, - "value": "6" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "3332", - "id": 31420, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4279:2:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "4275:6:37", - "typeDescriptions": { - "typeIdentifier": "t_rational_192_by_1", - "typeString": "int_const 192" - } - }, - "src": "4260:21:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "494c4c4547414c5f494e49545f444154415f53495a45", - "id": 31423, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4283:24:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_14356eebb71e7931cad70fa351b8bc5bd32ed3af1a9628009fb6ec382db26522", - "typeString": "literal_string \"ILLEGAL_INIT_DATA_SIZE\"" - }, - "value": "ILLEGAL_INIT_DATA_SIZE" - } - ], - "expression": { - "argumentTypes": [ - { "typeIdentifier": "t_bool", "typeString": "bool" }, - { - "typeIdentifier": "t_stringliteral_14356eebb71e7931cad70fa351b8bc5bd32ed3af1a9628009fb6ec382db26522", - "typeString": "literal_string \"ILLEGAL_INIT_DATA_SIZE\"" - } - ], - "id": 31416, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "4252:7:37", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 31424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4252:56:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31425, - "nodeType": "ExpressionStatement", - "src": "4252:56:37" - }, - { - "assignments": [31427], - "declarations": [ - { - "constant": false, - "id": 31427, - "mutability": "mutable", - "name": "programHash_", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31445, - "src": "4318:20:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31426, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4318:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 31437, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 31430, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31412, - "src": "4352:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "argumentTypes": null, - "hexValue": "3332", - "id": 31431, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4358:2:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "id": 31432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "4352:9:37", - "startExpression": null, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 31434, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4364:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 31433, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4364:7:37", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - } - ], - "id": 31435, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4363:9:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - }, - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "expression": { - "argumentTypes": null, - "id": 31428, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "4341:3:37", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 31429, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "decode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4341:10:37", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 31436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4341:32:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4318:55:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 31441, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 31439, - "name": "programHash_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31427, - "src": "4391:12:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 31440, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4407:1:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4391:17:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4241445f494e495449414c495a4154494f4e", - "id": 31442, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4410:20:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_755bbc3475835b38d7a5e4a6c96c52430dc055820776347e2e8da2916177d245", - "typeString": "literal_string \"BAD_INITIALIZATION\"" - }, - "value": "BAD_INITIALIZATION" - } - ], - "expression": { - "argumentTypes": [ - { "typeIdentifier": "t_bool", "typeString": "bool" }, - { - "typeIdentifier": "t_stringliteral_755bbc3475835b38d7a5e4a6c96c52430dc055820776347e2e8da2916177d245", - "typeString": "literal_string \"BAD_INITIALIZATION\"" - } - ], - "id": 31438, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "4383:7:37", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 31443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4383:48:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31444, - "nodeType": "ExpressionStatement", - "src": "4383:48:37" - } - ] - }, - "baseFunctions": [504], - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "validateInitData", - "overrides": { - "id": 31414, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4233:8:37" - }, - "parameters": { - "id": 31413, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31412, - "mutability": "mutable", - "name": "data", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31446, - "src": "4198:19:37", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 31411, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4198:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4197:21:37" - }, - "returnParameters": { - "id": 31415, - "nodeType": "ParameterList", - "parameters": [], - "src": "4242:0:37" - }, - "scope": 31650, - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31453, - "nodeType": "FunctionDefinition", - "src": "4444:94:37", - "nodes": [], - "body": { - "id": 31452, - "nodeType": "Block", - "src": "4536:2:37", - "nodes": [], - "statements": [] - }, - "baseFunctions": [509], - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "processSubContractAddresses", - "overrides": { - "id": 31450, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4527:8:37" - }, - "parameters": { - "id": 31449, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31448, - "mutability": "mutable", - "name": "subContractAddresses", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31453, - "src": "4481:35:37", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 31447, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4481:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4480:37:37" - }, - "returnParameters": { - "id": 31451, - "nodeType": "ParameterList", - "parameters": [], - "src": "4536:0:37" - }, - "scope": 31650, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31504, - "nodeType": "FunctionDefinition", - "src": "4544:505:37", - "nodes": [], - "body": { - "id": 31503, - "nodeType": "Block", - "src": "4616:433:37", - "nodes": [], - "statements": [ - { - "assignments": [31460, 31462, 31464, 31466], - "declarations": [ - { - "constant": false, - "id": 31460, - "mutability": "mutable", - "name": "programHash_", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31503, - "src": "4640:20:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31459, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4640:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31462, - "mutability": "mutable", - "name": "verifier_", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31503, - "src": "4674:17:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 31461, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4674:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31464, - "mutability": "mutable", - "name": "configHash_", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31503, - "src": "4705:19:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31463, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4705:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31466, - "mutability": "mutable", - "name": "initialState", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31503, - "src": "4738:39:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_memory_ptr", - "typeString": "struct StarknetState.State" - }, - "typeName": { - "contractScope": null, - "id": 31465, - "name": "StarknetState.State", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2234, - "src": "4738:19:37", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 31480, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31469, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31455, - "src": "4801:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 31471, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4808:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 31470, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4808:7:37", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - { - "argumentTypes": null, - "id": 31473, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4817:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 31472, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4817:7:37", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - { - "argumentTypes": null, - "id": 31475, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4826:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 31474, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4826:7:37", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31476, - "name": "StarknetState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2333, - "src": "4835:13:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_StarknetState_$2333_$", - "typeString": "type(library StarknetState)" - } - }, - "id": 31477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "State", - "nodeType": "MemberAccess", - "referencedDeclaration": 2234, - "src": "4835:19:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "type(struct StarknetState.State storage pointer)" - } - } - ], - "id": 31478, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4807:48:37", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_struct$_State_$2234_storage_ptr_$_$", - "typeString": "tuple(type(uint256),type(address),type(uint256),type(struct StarknetState.State storage pointer))" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_struct$_State_$2234_storage_ptr_$_$", - "typeString": "tuple(type(uint256),type(address),type(uint256),type(struct StarknetState.State storage pointer))" - } - ], - "expression": { - "argumentTypes": null, - "id": 31467, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "4790:3:37", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 31468, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "decode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4790:10:37", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 31479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4790:66:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_address_payable_$_t_uint256_$_t_struct$_State_$2234_memory_ptr_$", - "typeString": "tuple(uint256,address payable,uint256,struct StarknetState.State memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4626:230:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31482, - "name": "programHash_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31460, - "src": "4879:12:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 31481, - "name": "programHash", - "nodeType": "Identifier", - "overloadedDeclarations": [31312, 31325], - "referencedDeclaration": 31325, - "src": "4867:11:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 31483, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4867:25:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31484, - "nodeType": "ExpressionStatement", - "src": "4867:25:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31486, - "name": "verifier_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31462, - "src": "4921:9:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 31485, - "name": "setVerifierAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31373, - "src": "4902:18:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 31487, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4902:29:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31488, - "nodeType": "ExpressionStatement", - "src": "4902:29:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31492, - "name": "initialState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31466, - "src": "4954:12:37", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_memory_ptr", - "typeString": "struct StarknetState.State memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_State_$2234_memory_ptr", - "typeString": "struct StarknetState.State memory" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31489, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31389, - "src": "4941:5:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "function () pure returns (struct StarknetState.State storage pointer)" - } - }, - "id": 31490, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4941:7:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31491, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "copy", - "nodeType": "MemberAccess", - "referencedDeclaration": 2263, - "src": "4941:12:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$2234_storage_ptr_$_t_struct$_State_$2234_memory_ptr_$returns$__$bound_to$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "function (struct StarknetState.State storage pointer,struct StarknetState.State memory)" - } - }, - "id": 31493, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4941:26:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31494, - "nodeType": "ExpressionStatement", - "src": "4941:26:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31496, - "name": "configHash_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31464, - "src": "4988:11:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 31495, - "name": "configHash", - "nodeType": "Identifier", - "overloadedDeclarations": [31349, 31360], - "referencedDeclaration": 31349, - "src": "4977:10:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 31497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4977:23:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31498, - "nodeType": "ExpressionStatement", - "src": "4977:23:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "35", - "id": 31500, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5035:6:37", - "subdenomination": "days", - "typeDescriptions": { - "typeIdentifier": "t_rational_432000_by_1", - "typeString": "int_const 432000" - }, - "value": "5" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_432000_by_1", - "typeString": "int_const 432000" - } - ], - "id": 31499, - "name": "messageCancellationDelay", - "nodeType": "Identifier", - "overloadedDeclarations": [1836, 1849], - "referencedDeclaration": 1849, - "src": "5010:24:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 31501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5010:32:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31502, - "nodeType": "ExpressionStatement", - "src": "5010:32:37" - } - ] - }, - "baseFunctions": [514], - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "initializeContractState", - "overrides": { - "id": 31457, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4607:8:37" - }, - "parameters": { - "id": 31456, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31455, - "mutability": "mutable", - "name": "data", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31504, - "src": "4577:19:37", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 31454, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4577:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4576:21:37" - }, - "returnParameters": { - "id": 31458, - "nodeType": "ParameterList", - "parameters": [], - "src": "4616:0:37" - }, - "scope": 31650, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 31514, - "nodeType": "FunctionDefinition", - "src": "5123:118:37", - "nodes": [], - "body": { - "id": 31513, - "nodeType": "Block", - "src": "5190:51:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "537461726b576172655f537461726b6e65745f323032335f36", - "id": 31511, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5207:27:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_2a1b12eb18968846aa42f0439e8341082c05ab7ac9d4e10fe505d21d0bef4c39", - "typeString": "literal_string \"StarkWare_Starknet_2023_6\"" - }, - "value": "StarkWare_Starknet_2023_6" - }, - "functionReturnParameters": 31510, - "id": 31512, - "nodeType": "Return", - "src": "5200:34:37" - } - ] - }, - "baseFunctions": [532], - "documentation": { - "id": 31505, - "nodeType": "StructuredDocumentation", - "src": "5055:63:37", - "text": "Returns a string that identifies the contract." - }, - "functionSelector": "eeb72866", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "identify", - "overrides": { - "id": 31507, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5157:8:37" - }, - "parameters": { - "id": 31506, - "nodeType": "ParameterList", - "parameters": [], - "src": "5140:2:37" - }, - "returnParameters": { - "id": 31510, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31509, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31514, - "src": "5175:13:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 31508, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "5175:6:37", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5174:15:37" - }, - "scope": 31650, - "stateMutability": "pure", - "virtual": false, - "visibility": "external" - }, - { - "id": 31525, - "nodeType": "FunctionDefinition", - "src": "5300:95:37", - "nodes": [], - "body": { - "id": 31524, - "nodeType": "Block", - "src": "5353:42:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31520, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31389, - "src": "5370:5:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "function () pure returns (struct StarknetState.State storage pointer)" - } - }, - "id": 31521, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5370:7:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31522, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "globalRoot", - "nodeType": "MemberAccess", - "referencedDeclaration": 2229, - "src": "5370:18:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 31519, - "id": 31523, - "nodeType": "Return", - "src": "5363:25:37" - } - ] - }, - "documentation": { - "id": 31515, - "nodeType": "StructuredDocumentation", - "src": "5247:48:37", - "text": "Returns the current state root." - }, - "functionSelector": "9588eca2", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "stateRoot", - "overrides": null, - "parameters": { - "id": 31516, - "nodeType": "ParameterList", - "parameters": [], - "src": "5318:2:37" - }, - "returnParameters": { - "id": 31519, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31518, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31525, - "src": "5344:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31517, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5344:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5343:9:37" - }, - "scope": 31650, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 31536, - "nodeType": "FunctionDefinition", - "src": "5456:102:37", - "nodes": [], - "body": { - "id": 31535, - "nodeType": "Block", - "src": "5515:43:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31531, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31389, - "src": "5532:5:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "function () pure returns (struct StarknetState.State storage pointer)" - } - }, - "id": 31532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5532:7:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31533, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "blockNumber", - "nodeType": "MemberAccess", - "referencedDeclaration": 2231, - "src": "5532:19:37", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "functionReturnParameters": 31530, - "id": 31534, - "nodeType": "Return", - "src": "5525:26:37" - } - ] - }, - "documentation": { - "id": 31526, - "nodeType": "StructuredDocumentation", - "src": "5401:50:37", - "text": "Returns the current block number." - }, - "functionSelector": "35befa5d", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "stateBlockNumber", - "overrides": null, - "parameters": { - "id": 31527, - "nodeType": "ParameterList", - "parameters": [], - "src": "5481:2:37" - }, - "returnParameters": { - "id": 31530, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31529, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31536, - "src": "5507:6:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 31528, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "5507:6:37", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5506:8:37" - }, - "scope": 31650, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 31547, - "nodeType": "FunctionDefinition", - "src": "5617:99:37", - "nodes": [], - "body": { - "id": 31546, - "nodeType": "Block", - "src": "5675:41:37", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31542, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31389, - "src": "5692:5:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "function () pure returns (struct StarknetState.State storage pointer)" - } - }, - "id": 31543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5692:7:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31544, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "blockHash", - "nodeType": "MemberAccess", - "referencedDeclaration": 2233, - "src": "5692:17:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 31541, - "id": 31545, - "nodeType": "Return", - "src": "5685:24:37" - } - ] - }, - "documentation": { - "id": 31537, - "nodeType": "StructuredDocumentation", - "src": "5564:48:37", - "text": "Returns the current block hash." - }, - "functionSelector": "382d83e3", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "stateBlockHash", - "overrides": null, - "parameters": { - "id": 31538, - "nodeType": "ParameterList", - "parameters": [], - "src": "5640:2:37" - }, - "returnParameters": { - "id": 31541, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31540, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31547, - "src": "5666:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31539, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5666:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5665:9:37" - }, - "scope": 31650, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 31649, - "nodeType": "FunctionDefinition", - "src": "6058:1807:37", - "nodes": [], - "body": { - "id": 31648, - "nodeType": "Block", - "src": "6149:1716:37", - "nodes": [], - "statements": [ - { - "assignments": [31557], - "declarations": [ - { - "constant": false, - "id": 31557, - "mutability": "mutable", - "name": "initialBlockNumber", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31648, - "src": "6331:25:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 31556, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "6331:6:37", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 31561, - "initialValue": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31558, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31389, - "src": "6359:5:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "function () pure returns (struct StarknetState.State storage pointer)" - } - }, - "id": 31559, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6359:7:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31560, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "blockNumber", - "nodeType": "MemberAccess", - "referencedDeclaration": 2231, - "src": "6359:19:37", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6331:47:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31565, - "name": "programOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31551, - "src": "6449:13:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - ], - "expression": { - "argumentTypes": null, - "id": 31562, - "name": "StarknetOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1653, - "src": "6425:14:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_StarknetOutput_$1653_$", - "typeString": "type(library StarknetOutput)" - } - }, - "id": 31564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "validate", - "nodeType": "MemberAccess", - "referencedDeclaration": 1363, - "src": "6425:23:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_calldata_ptr_$returns$__$", - "typeString": "function (uint256[] calldata) pure" - } - }, - "id": 31566, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6425:38:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31567, - "nodeType": "ExpressionStatement", - "src": "6425:38:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 31575, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31569, - "name": "configHash", - "nodeType": "Identifier", - "overloadedDeclarations": [31349, 31360], - "referencedDeclaration": 31360, - "src": "6528:10:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 31570, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6528:12:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 31571, - "name": "programOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31551, - "src": "6544:13:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - }, - "id": 31574, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31572, - "name": "StarknetOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1653, - "src": "6558:14:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_StarknetOutput_$1653_$", - "typeString": "type(library StarknetOutput)" - } - }, - "id": 31573, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "CONFIG_HASH_OFFSET", - "nodeType": "MemberAccess", - "referencedDeclaration": 1292, - "src": "6558:33:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6544:48:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6528:64:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "494e56414c49445f434f4e4649475f48415348", - "id": 31576, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6606:21:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_1e15566847ed1c19ce14d62c724c85d7702676fc6f806d61315d57d0377541dc", - "typeString": "literal_string \"INVALID_CONFIG_HASH\"" - }, - "value": "INVALID_CONFIG_HASH" - } - ], - "expression": { - "argumentTypes": [ - { "typeIdentifier": "t_bool", "typeString": "bool" }, - { - "typeIdentifier": "t_stringliteral_1e15566847ed1c19ce14d62c724c85d7702676fc6f806d61315d57d0377541dc", - "typeString": "literal_string \"INVALID_CONFIG_HASH\"" - } - ], - "id": 31568, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "6507:7:37", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 31577, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6507:130:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31578, - "nodeType": "ExpressionStatement", - "src": "6507:130:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 31582, - "name": "programOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31551, - "src": "6663:13:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31579, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31389, - "src": "6648:5:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "function () pure returns (struct StarknetState.State storage pointer)" - } - }, - "id": 31580, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6648:7:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31581, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "update", - "nodeType": "MemberAccess", - "referencedDeclaration": 2332, - "src": "6648:14:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$2234_storage_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$returns$__$bound_to$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "function (struct StarknetState.State storage pointer,uint256[] calldata)" - } - }, - "id": 31583, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6648:29:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31584, - "nodeType": "ExpressionStatement", - "src": "6648:29:37" - }, - { - "assignments": [31586], - "declarations": [ - { - "constant": false, - "id": 31586, - "mutability": "mutable", - "name": "outputOffset", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31648, - "src": "6910:20:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31585, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6910:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 31589, - "initialValue": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31587, - "name": "StarknetOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1653, - "src": "6933:14:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_StarknetOutput_$1653_$", - "typeString": "type(library StarknetOutput)" - } - }, - "id": 31588, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "HEADER_SIZE", - "nodeType": "MemberAccess", - "referencedDeclaration": 1295, - "src": "6933:26:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6910:49:37" - }, - { - "expression": { - "argumentTypes": null, - "id": 31600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 31590, - "name": "outputOffset", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31586, - "src": "6969:12:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "74727565", - "id": 31593, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7054:4:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 31594, - "name": "programOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31551, - "src": "7072:13:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - }, - "endExpression": null, - "id": 31596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "7072:28:37", - "startExpression": { - "argumentTypes": null, - "id": 31595, - "name": "outputOffset", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31586, - "src": "7086:12:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr_slice", - "typeString": "uint256[] calldata slice" - } - }, - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31597, - "name": "l2ToL1Messages", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1814, - "src": "7114:14:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", - "typeString": "function () pure returns (mapping(bytes32 => uint256))" - } - }, - "id": 31598, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7114:16:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - } - ], - "expression": { - "argumentTypes": [ - { "typeIdentifier": "t_bool", "typeString": "bool" }, - { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr_slice", - "typeString": "uint256[] calldata slice" - }, - { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - ], - "expression": { - "argumentTypes": null, - "id": 31591, - "name": "StarknetOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1653, - "src": "6985:14:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_StarknetOutput_$1653_$", - "typeString": "type(library StarknetOutput)" - } - }, - "id": 31592, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "processMessages", - "nodeType": "MemberAccess", - "referencedDeclaration": 1652, - "src": "6985:30:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_mapping$_t_bytes32_$_t_uint256_$_$returns$_t_uint256_$", - "typeString": "function (bool,uint256[] calldata,mapping(bytes32 => uint256)) returns (uint256)" - } - }, - "id": 31599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6985:155:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6969:171:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 31601, - "nodeType": "ExpressionStatement", - "src": "6969:171:37" - }, - { - "expression": { - "argumentTypes": null, - "id": 31612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 31602, - "name": "outputOffset", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31586, - "src": "7189:12:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 31605, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7274:5:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 31606, - "name": "programOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31551, - "src": "7293:13:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - }, - "endExpression": null, - "id": 31608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "7293:28:37", - "startExpression": { - "argumentTypes": null, - "id": 31607, - "name": "outputOffset", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31586, - "src": "7307:12:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr_slice", - "typeString": "uint256[] calldata slice" - } - }, - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31609, - "name": "l1ToL2Messages", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1801, - "src": "7335:14:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", - "typeString": "function () pure returns (mapping(bytes32 => uint256))" - } - }, - "id": 31610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7335:16:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - } - ], - "expression": { - "argumentTypes": [ - { "typeIdentifier": "t_bool", "typeString": "bool" }, - { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr_slice", - "typeString": "uint256[] calldata slice" - }, - { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - ], - "expression": { - "argumentTypes": null, - "id": 31603, - "name": "StarknetOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1653, - "src": "7205:14:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_StarknetOutput_$1653_$", - "typeString": "type(library StarknetOutput)" - } - }, - "id": 31604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "processMessages", - "nodeType": "MemberAccess", - "referencedDeclaration": 1652, - "src": "7205:30:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_mapping$_t_bytes32_$_t_uint256_$_$returns$_t_uint256_$", - "typeString": "function (bool,uint256[] calldata,mapping(bytes32 => uint256)) returns (uint256)" - } - }, - "id": 31611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7205:156:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7189:172:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 31613, - "nodeType": "ExpressionStatement", - "src": "7189:172:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 31618, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 31615, - "name": "outputOffset", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31586, - "src": "7379:12:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31616, - "name": "programOutput", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31551, - "src": "7395:13:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - }, - "id": 31617, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7395:20:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7379:36:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "535441524b4e45545f4f55545055545f544f4f5f4c4f4e47", - "id": 31619, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7417:26:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_81aab34693ff9205394810638bf8ae3f6aba0692d74a5c21cdfb88a363048a6c", - "typeString": "literal_string \"STARKNET_OUTPUT_TOO_LONG\"" - }, - "value": "STARKNET_OUTPUT_TOO_LONG" - } - ], - "expression": { - "argumentTypes": [ - { "typeIdentifier": "t_bool", "typeString": "bool" }, - { - "typeIdentifier": "t_stringliteral_81aab34693ff9205394810638bf8ae3f6aba0692d74a5c21cdfb88a363048a6c", - "typeString": "literal_string \"STARKNET_OUTPUT_TOO_LONG\"" - } - ], - "id": 31614, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "7371:7:37", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 31620, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7371:73:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31621, - "nodeType": "ExpressionStatement", - "src": "7371:73:37" - }, - { - "assignments": [31625], - "declarations": [ - { - "constant": false, - "id": 31625, - "mutability": "mutable", - "name": "state_", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31648, - "src": "7588:34:37", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State" - }, - "typeName": { - "contractScope": null, - "id": 31624, - "name": "StarknetState.State", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2234, - "src": "7588:19:37", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 31628, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 31626, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31389, - "src": "7625:5:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_State_$2234_storage_ptr_$", - "typeString": "function () pure returns (struct StarknetState.State storage pointer)" - } - }, - "id": 31627, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7625:7:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7588:44:37" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31630, - "name": "state_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31625, - "src": "7662:6:37", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31631, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "globalRoot", - "nodeType": "MemberAccess", - "referencedDeclaration": 2229, - "src": "7662:17:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31632, - "name": "state_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31625, - "src": "7681:6:37", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31633, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "blockNumber", - "nodeType": "MemberAccess", - "referencedDeclaration": 2231, - "src": "7681:18:37", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31634, - "name": "state_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31625, - "src": "7701:6:37", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31635, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "blockHash", - "nodeType": "MemberAccess", - "referencedDeclaration": 2233, - "src": "7701:16:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 31629, - "name": "LogStateUpdate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31219, - "src": "7647:14:37", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_int256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,int256,uint256)" - } - }, - "id": 31636, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7647:71:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31637, - "nodeType": "EmitStatement", - "src": "7642:76:37" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 31644, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 31639, - "name": "state_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31625, - "src": "7783:6:37", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$2234_storage_ptr", - "typeString": "struct StarknetState.State storage pointer" - } - }, - "id": 31640, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "blockNumber", - "nodeType": "MemberAccess", - "referencedDeclaration": 2231, - "src": "7783:18:37", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 31643, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 31641, - "name": "initialBlockNumber", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 31557, - "src": "7805:18:37", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 31642, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7826:1:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "7805:22:37", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "7783:44:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "494e56414c49445f46494e414c5f424c4f434b5f4e554d424552", - "id": 31645, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7829:28:37", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_4704f665b3bc7084199f162272b6b773fa8dad10a187a1c61e90ec9d251e75ab", - "typeString": "literal_string \"INVALID_FINAL_BLOCK_NUMBER\"" - }, - "value": "INVALID_FINAL_BLOCK_NUMBER" - } - ], - "expression": { - "argumentTypes": [ - { "typeIdentifier": "t_bool", "typeString": "bool" }, - { - "typeIdentifier": "t_stringliteral_4704f665b3bc7084199f162272b6b773fa8dad10a187a1c61e90ec9d251e75ab", - "typeString": "literal_string \"INVALID_FINAL_BLOCK_NUMBER\"" - } - ], - "id": 31638, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "7775:7:37", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 31646, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7775:83:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 31647, - "nodeType": "ExpressionStatement", - "src": "7775:83:37" - } - ] - }, - "documentation": { - "id": 31548, - "nodeType": "StructuredDocumentation", - "src": "5722:331:37", - "text": "Updates the state of the StarkNet, based on a proof of the\nStarkNet OS that the state transition is valid.\nArguments:\nprogramOutput - The main part of the StarkNet OS program output.\ndata_availability_fact - An encoding of the on-chain data associated\nwith the 'programOutput'." - }, - "functionSelector": "853e2461", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 31554, - "modifierName": { - "argumentTypes": null, - "id": 31553, - "name": "onlyOperator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 585, - "src": "6136:12:37", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "6136:12:37" - } - ], - "name": "updateState", - "overrides": null, - "parameters": { - "id": 31552, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 31551, - "mutability": "mutable", - "name": "programOutput", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 31649, - "src": "6088:32:37", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 31549, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6088:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 31550, - "length": null, - "nodeType": "ArrayTypeName", - "src": "6088:9:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6078:48:37" - }, - "returnParameters": { - "id": 31555, - "nodeType": "ParameterList", - "parameters": [], - "src": "6149:0:37" - }, - "scope": 31650, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "abstract": false, - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 31187, - "name": "Identity", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 533, - "src": "754:8:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Identity_$533", - "typeString": "contract Identity" - } - }, - "id": 31188, - "nodeType": "InheritanceSpecifier", - "src": "754:8:37" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 31189, - "name": "StarknetMessaging", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2200, - "src": "768:17:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetMessaging_$2200", - "typeString": "contract StarknetMessaging" - } - }, - "id": 31190, - "nodeType": "InheritanceSpecifier", - "src": "768:17:37" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 31191, - "name": "StarknetGovernance", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1725, - "src": "791:18:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetGovernance_$1725", - "typeString": "contract StarknetGovernance" - } - }, - "id": 31192, - "nodeType": "InheritanceSpecifier", - "src": "791:18:37" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 31193, - "name": "GovernedFinalizable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 319, - "src": "815:19:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GovernedFinalizable_$319", - "typeString": "contract GovernedFinalizable" - } - }, - "id": 31194, - "nodeType": "InheritanceSpecifier", - "src": "815:19:37" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 31195, - "name": "StarknetOperator", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2224, - "src": "840:16:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetOperator_$2224", - "typeString": "contract StarknetOperator" - } - }, - "id": 31196, - "nodeType": "InheritanceSpecifier", - "src": "840:16:37" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 31197, - "name": "ContractInitializer", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 515, - "src": "862:19:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractInitializer_$515", - "typeString": "contract ContractInitializer" - } - }, - "id": 31198, - "nodeType": "InheritanceSpecifier", - "src": "862:19:37" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 31199, - "name": "ProxySupport", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 773, - "src": "887:12:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ProxySupport_$773", - "typeString": "contract ProxySupport" - } - }, - "id": 31200, - "nodeType": "InheritanceSpecifier", - "src": "887:12:37" - } - ], - "contractDependencies": [ - 266, 319, 456, 486, 515, 533, 555, 603, 773, 1174, 1249, 1725, 2200, - 2224 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "linearizedBaseContracts": [ - 31650, 773, 515, 486, 2224, 456, 603, 319, 1725, 266, 555, 2200, 1174, - 1249, 533 - ], - "name": "Starknet", - "scope": 31651 - } - ], - "license": "Apache-2.0." - }, - "id": 37 -} diff --git a/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs b/crates/l2/starknet-core-contract-client/src/clients/core_contract.rs similarity index 74% rename from crates/l2/starknet-core-contract-client/src/clients/sovereign.rs rename to crates/l2/starknet-core-contract-client/src/clients/core_contract.rs index a2c3b6c..a8649c3 100644 --- a/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs +++ b/crates/l2/starknet-core-contract-client/src/clients/core_contract.rs @@ -1,15 +1,16 @@ use std::sync::Arc; use crate::interfaces::{ - GovernedFinalizable, Operator, StarknetGovernance, StarknetMessaging, StarknetSovereignContract, + GovernedFinalizable, Operator, StarknetCoreContract, StarknetGovernance, StarknetMessaging, }; use ethers::types::Address; use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport3_0_2; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; /// Client to interact with a Starknet core contract running in `Sovereign` mode -pub struct StarknetSovereignContractClient { - core_contract: StarknetSovereignContract, +#[derive(Clone)] +pub struct StarknetCoreContractClient { + core_contract: StarknetCoreContract, messaging: StarknetMessaging, operator: Operator, proxy_support: ProxySupport3_0_2, @@ -18,14 +19,14 @@ pub struct StarknetSovereignContractClient { core_contract_implementation: Address, } -impl StarknetSovereignContractClient { +impl StarknetCoreContractClient { pub fn new( address: Address, client: Arc, implementation_address: Address, ) -> Self { Self { - core_contract: StarknetSovereignContract::new(address, client.clone()), + core_contract: StarknetCoreContract::new(address, client.clone()), messaging: StarknetMessaging::new(address, client.clone()), operator: Operator::new(address, client.clone()), proxy_support: ProxySupport3_0_2::new(address, client.clone()), @@ -36,40 +37,38 @@ impl StarknetSovereignContractClient { } } -impl AsRef> - for StarknetSovereignContractClient -{ - fn as_ref(&self) -> &StarknetSovereignContract { +impl AsRef> for StarknetCoreContractClient { + fn as_ref(&self) -> &StarknetCoreContract { &self.core_contract } } -impl AsRef> for StarknetSovereignContractClient { +impl AsRef> for StarknetCoreContractClient { fn as_ref(&self) -> &StarknetMessaging { &self.messaging } } -impl AsRef> for StarknetSovereignContractClient { +impl AsRef> for StarknetCoreContractClient { fn as_ref(&self) -> &ProxySupport3_0_2 { &self.proxy_support } } -impl AsRef> for StarknetSovereignContractClient { +impl AsRef> for StarknetCoreContractClient { fn as_ref(&self) -> &Operator { &self.operator } } -impl AsRef> for StarknetSovereignContractClient { +impl AsRef> for StarknetCoreContractClient { fn as_ref(&self) -> &StarknetGovernance { &self.governance } } -impl AsRef> for StarknetSovereignContractClient { +impl AsRef> for StarknetCoreContractClient { fn as_ref(&self) -> &GovernedFinalizable { &self.governed_finalizable } } -impl StarknetContractClient for StarknetSovereignContractClient { +impl StarknetContractClient for StarknetCoreContractClient { fn address(&self) -> Address { self.core_contract.address() } diff --git a/crates/l2/starknet-core-contract-client/src/clients/validity.rs b/crates/l2/starknet-core-contract-client/src/clients/dev_core_contract.rs similarity index 75% rename from crates/l2/starknet-core-contract-client/src/clients/validity.rs rename to crates/l2/starknet-core-contract-client/src/clients/dev_core_contract.rs index 1520feb..67cda00 100644 --- a/crates/l2/starknet-core-contract-client/src/clients/validity.rs +++ b/crates/l2/starknet-core-contract-client/src/clients/dev_core_contract.rs @@ -4,13 +4,14 @@ use ethers::abi::Address; use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport3_0_2; use crate::interfaces::{ - GovernedFinalizable, Operator, StarknetGovernance, StarknetMessaging, StarknetValidityContract, + GovernedFinalizable, Operator, StarknetDevCoreContract, StarknetGovernance, StarknetMessaging, }; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; /// Client to interact with a Starknet core contract running in `Validity` mode -pub struct StarknetValidityContractClient { - core_contract: StarknetValidityContract, +#[derive(Clone)] +pub struct StarknetDevCoreContractClient { + core_contract: StarknetDevCoreContract, messaging: StarknetMessaging, operator: Operator, proxy_support: ProxySupport3_0_2, @@ -19,14 +20,14 @@ pub struct StarknetValidityContractClient { core_contract_implementation: ethers::addressbook::Address, } -impl StarknetValidityContractClient { +impl StarknetDevCoreContractClient { pub fn new( address: Address, client: Arc, implementation_address: Address, ) -> Self { Self { - core_contract: StarknetValidityContract::new(address, client.clone()), + core_contract: StarknetDevCoreContract::new(address, client.clone()), messaging: StarknetMessaging::new(address, client.clone()), operator: Operator::new(address, client.clone()), proxy_support: ProxySupport3_0_2::new(address, client.clone()), @@ -37,40 +38,38 @@ impl StarknetValidityContractClient { } } -impl AsRef> - for StarknetValidityContractClient -{ - fn as_ref(&self) -> &StarknetValidityContract { +impl AsRef> for StarknetDevCoreContractClient { + fn as_ref(&self) -> &StarknetDevCoreContract { &self.core_contract } } -impl AsRef> for StarknetValidityContractClient { +impl AsRef> for StarknetDevCoreContractClient { fn as_ref(&self) -> &StarknetMessaging { &self.messaging } } -impl AsRef> for StarknetValidityContractClient { +impl AsRef> for StarknetDevCoreContractClient { fn as_ref(&self) -> &ProxySupport3_0_2 { &self.proxy_support } } -impl AsRef> for StarknetValidityContractClient { +impl AsRef> for StarknetDevCoreContractClient { fn as_ref(&self) -> &Operator { &self.operator } } -impl AsRef> for StarknetValidityContractClient { +impl AsRef> for StarknetDevCoreContractClient { fn as_ref(&self) -> &StarknetGovernance { &self.governance } } -impl AsRef> for StarknetValidityContractClient { +impl AsRef> for StarknetDevCoreContractClient { fn as_ref(&self) -> &GovernedFinalizable { &self.governed_finalizable } } -impl StarknetContractClient for StarknetValidityContractClient { +impl StarknetContractClient for StarknetDevCoreContractClient { fn address(&self) -> ethers::addressbook::Address { self.core_contract.address() } diff --git a/crates/l2/starknet-core-contract-client/src/clients/mod.rs b/crates/l2/starknet-core-contract-client/src/clients/mod.rs index 8d9fc4d..c244391 100644 --- a/crates/l2/starknet-core-contract-client/src/clients/mod.rs +++ b/crates/l2/starknet-core-contract-client/src/clients/mod.rs @@ -1,5 +1,5 @@ -mod sovereign; -mod validity; +mod core_contract; +mod dev_core_contract; -pub use sovereign::*; -pub use validity::*; +pub use core_contract::*; +pub use dev_core_contract::*; diff --git a/crates/l2/starknet-core-contract-client/src/interfaces/validity_core_contract.rs b/crates/l2/starknet-core-contract-client/src/interfaces/core_contract.rs similarity index 65% rename from crates/l2/starknet-core-contract-client/src/interfaces/validity_core_contract.rs rename to crates/l2/starknet-core-contract-client/src/interfaces/core_contract.rs index 6eb4a1c..55cd456 100644 --- a/crates/l2/starknet-core-contract-client/src/interfaces/validity_core_contract.rs +++ b/crates/l2/starknet-core-contract-client/src/interfaces/core_contract.rs @@ -1,33 +1,18 @@ use async_trait::async_trait; use ethers::contract::ContractError; use ethers::middleware::Middleware; -use ethers::prelude::abigen; +use ethers::prelude::{abigen, Bytes}; use ethers::types::{TransactionReceipt, I256, U256}; use utils::errors::Error; abigen!( - StarknetValidityContract, - r#"[ - function setProgramHash(uint256 newProgramHash) external notFinalized onlyGovernance - function setConfigHash(uint256 newConfigHash) external notFinalized onlyGovernance - function setMessageCancellationDelay(uint256 delayInSeconds) external notFinalized onlyGovernance - - function programHash() public view returns (uint256) - function configHash() public view returns (uint256) - - function identify() external pure override returns (string memory) - function stateRoot() external view returns (uint256) - function stateBlockNumber() external view returns (int256) - function stateBlockHash() external view returns (uint256) - - function updateState(uint256[] calldata programOutput, uint256 onchainDataHash, uint256 onchainDataSize) external onlyOperator - - ]"#, + StarknetCoreContract, + "../../../artifacts/cairo-lang/Starknet.json", ); #[async_trait] -pub trait StarknetValidityContractTrait { +pub trait StarknetCoreContractTrait { async fn set_program_hash( &self, new_program_hash: U256, @@ -48,25 +33,30 @@ pub trait StarknetValidityContractTrait { async fn state_root(&self) -> Result>; async fn state_block_number(&self) -> Result>; async fn state_block_hash(&self) -> Result>; - /// Update the L1 state + /// Update the L1 state using calldata async fn update_state( &self, program_output: Vec, onchain_data_hash: U256, onchain_data_size: U256, ) -> Result, Error>; + /// Update the L1 state using blob and kzg + async fn update_state_kzg_da( + &self, + program_output: Vec, + kzg_hashes: Vec, + ) -> Result, Error>; } +pub struct StandardCoreContract(pub StarknetCoreContract); + #[async_trait] -impl StarknetValidityContractTrait for T -where - T: AsRef> + Send + Sync, -{ +impl StarknetCoreContractTrait for StandardCoreContract { async fn set_program_hash( &self, new_program_hash: U256, ) -> Result, Error> { - self.as_ref() + self.0 .set_program_hash(new_program_hash) .send() .await @@ -79,7 +69,7 @@ where &self, new_config_hash: U256, ) -> Result, Error> { - self.as_ref() + self.0 .set_config_hash(new_config_hash) .send() .await @@ -92,7 +82,7 @@ where &self, delay_in_seconds: U256, ) -> Result, Error> { - self.as_ref() + self.0 .set_message_cancellation_delay(delay_in_seconds) .send() .await @@ -102,39 +92,27 @@ where } async fn program_hash(&self) -> Result> { - self.as_ref() - .program_hash() - .call() - .await - .map_err(Into::into) + self.0.program_hash().call().await.map_err(Into::into) } async fn config_hash(&self) -> Result> { - self.as_ref().config_hash().call().await.map_err(Into::into) + self.0.config_hash().call().await.map_err(Into::into) } async fn identify(&self) -> Result> { - self.as_ref().identify().call().await.map_err(Into::into) + self.0.identify().call().await.map_err(Into::into) } async fn state_root(&self) -> Result> { - self.as_ref().state_root().call().await.map_err(Into::into) + self.0.state_root().call().await.map_err(Into::into) } async fn state_block_number(&self) -> Result> { - self.as_ref() - .state_block_number() - .call() - .await - .map_err(Into::into) + self.0.state_block_number().call().await.map_err(Into::into) } async fn state_block_hash(&self) -> Result> { - self.as_ref() - .state_block_hash() - .call() - .await - .map_err(Into::into) + self.0.state_block_hash().call().await.map_err(Into::into) } async fn update_state( @@ -143,7 +121,7 @@ where onchain_data_hash: U256, onchain_data_size: U256, ) -> Result, Error> { - self.as_ref() + self.0 .update_state(program_output, onchain_data_hash, onchain_data_size) .send() .await @@ -151,4 +129,18 @@ where .await .map_err(Into::into) } + + async fn update_state_kzg_da( + &self, + program_output: Vec, + kzg_hashes: Vec, + ) -> Result, Error> { + self.0 + .update_state_kzg_da(program_output, kzg_hashes) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } } diff --git a/crates/l2/starknet-core-contract-client/src/interfaces/dev_core_contract.rs b/crates/l2/starknet-core-contract-client/src/interfaces/dev_core_contract.rs new file mode 100644 index 0000000..8f3fa51 --- /dev/null +++ b/crates/l2/starknet-core-contract-client/src/interfaces/dev_core_contract.rs @@ -0,0 +1,128 @@ +use async_trait::async_trait; +use ethers::contract::ContractError; +use ethers::middleware::Middleware; +use ethers::prelude::abigen; +use ethers::types::{Bytes, TransactionReceipt, I256, U256}; + +use crate::interfaces::core_contract::StarknetCoreContractTrait; +use utils::errors::Error; + +abigen!( + StarknetDevCoreContract, + "../../../artifacts/StarknetDevCoreContract.json", +); + +pub struct DevCoreContract(pub StarknetDevCoreContract); + +#[allow(dead_code)] +impl DevCoreContract { + async fn update_state_override( + &self, + global_root: U256, + block_number: I256, + block_hash: U256, + ) -> Result, Error> { + self.0 + .update_state_override(global_root, block_number, block_hash) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } +} + +#[async_trait] +impl StarknetCoreContractTrait for DevCoreContract { + async fn set_program_hash( + &self, + new_program_hash: U256, + ) -> Result, Error> { + self.0 + .set_program_hash(new_program_hash) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn set_config_hash( + &self, + new_config_hash: U256, + ) -> Result, Error> { + self.0 + .set_config_hash(new_config_hash) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn set_message_cancellation_delay( + &self, + delay_in_seconds: U256, + ) -> Result, Error> { + self.0 + .set_message_cancellation_delay(delay_in_seconds) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn program_hash(&self) -> Result> { + self.0.program_hash().call().await.map_err(Into::into) + } + + async fn config_hash(&self) -> Result> { + self.0.config_hash().call().await.map_err(Into::into) + } + + async fn identify(&self) -> Result> { + self.0.identify().call().await.map_err(Into::into) + } + + async fn state_root(&self) -> Result> { + self.0.state_root().call().await.map_err(Into::into) + } + + async fn state_block_number(&self) -> Result> { + self.0.state_block_number().call().await.map_err(Into::into) + } + + async fn state_block_hash(&self) -> Result> { + self.0.state_block_hash().call().await.map_err(Into::into) + } + + async fn update_state( + &self, + program_output: Vec, + onchain_data_hash: U256, + onchain_data_size: U256, + ) -> Result, Error> { + self.0 + .update_state(program_output, onchain_data_hash, onchain_data_size) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn update_state_kzg_da( + &self, + program_output: Vec, + kzg_hashes: Vec, + ) -> Result, Error> { + self.0 + .update_state_kzg_da(program_output, kzg_hashes) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } +} diff --git a/crates/l2/starknet-core-contract-client/src/interfaces/mod.rs b/crates/l2/starknet-core-contract-client/src/interfaces/mod.rs index a776821..4da973f 100644 --- a/crates/l2/starknet-core-contract-client/src/interfaces/mod.rs +++ b/crates/l2/starknet-core-contract-client/src/interfaces/mod.rs @@ -1,11 +1,13 @@ +mod core_contract; +mod dev_core_contract; mod governance; mod governed_finalizable; mod messaging; mod messaging_events; mod operator; -mod sovereign_core_contract; -mod validity_core_contract; +pub use core_contract::{StarknetCoreContract, StarknetCoreContractTrait}; +pub use dev_core_contract::StarknetDevCoreContract; pub use governance::{StarknetGovernance, StarknetGovernanceTrait}; pub use governed_finalizable::{GovernedFinalizable, GovernedFinalizableTrait}; pub use messaging::{StarknetMessaging, StarknetMessagingTrait}; @@ -15,5 +17,3 @@ pub use messaging_events::{ StarknetMessagingEvents, }; pub use operator::{Operator, OperatorTrait}; -pub use sovereign_core_contract::{StarknetSovereignContract, StarknetSovereignContractTrait}; -pub use validity_core_contract::{StarknetValidityContract, StarknetValidityContractTrait}; diff --git a/crates/l2/starknet-core-contract-client/src/interfaces/sovereign_core_contract.rs b/crates/l2/starknet-core-contract-client/src/interfaces/sovereign_core_contract.rs deleted file mode 100644 index 86afcfa..0000000 --- a/crates/l2/starknet-core-contract-client/src/interfaces/sovereign_core_contract.rs +++ /dev/null @@ -1,150 +0,0 @@ -use async_trait::async_trait; -use ethers::contract::ContractError; -use ethers::middleware::Middleware; -use ethers::prelude::abigen; -use ethers::types::{TransactionReceipt, I256, U256}; - -use utils::errors::Error; - -abigen!( - StarknetSovereignContract, - r#"[ - function setProgramHash(uint256 newProgramHash) external notFinalized onlyGovernance - function setConfigHash(uint256 newConfigHash) external notFinalized onlyGovernance - function setMessageCancellationDelay(uint256 delayInSeconds) external notFinalized onlyGovernance - - function programHash() public view returns (uint256) - function configHash() public view returns (uint256) - - function identify() external pure override returns (string memory) - function stateRoot() external view returns (uint256) - function stateBlockNumber() external view returns (int256) - function stateBlockHash() external view returns (uint256) - - function updateState(uint256[] calldata programOutput) external onlyOperator - - ]"#, -); - -#[async_trait] -pub trait StarknetSovereignContractTrait { - async fn set_program_hash( - &self, - new_program_hash: U256, - ) -> Result, Error>; - async fn set_config_hash( - &self, - new_config_hash: U256, - ) -> Result, Error>; - async fn set_message_cancellation_delay( - &self, - delay_in_seconds: U256, - ) -> Result, Error>; - - async fn program_hash(&self) -> Result>; - async fn config_hash(&self) -> Result>; - - async fn identify(&self) -> Result>; - async fn state_root(&self) -> Result>; - async fn state_block_number(&self) -> Result>; - async fn state_block_hash(&self) -> Result>; - /// Update the L1 state - async fn update_state( - &self, - program_output: Vec, - ) -> Result, Error>; -} - -#[async_trait] -impl StarknetSovereignContractTrait for T -where - T: AsRef> + Send + Sync, -{ - async fn set_program_hash( - &self, - new_program_hash: U256, - ) -> Result, Error> { - self.as_ref() - .set_program_hash(new_program_hash) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn set_config_hash( - &self, - new_config_hash: U256, - ) -> Result, Error> { - self.as_ref() - .set_config_hash(new_config_hash) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn set_message_cancellation_delay( - &self, - delay_in_seconds: U256, - ) -> Result, Error> { - self.as_ref() - .set_message_cancellation_delay(delay_in_seconds) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn program_hash(&self) -> Result> { - self.as_ref() - .program_hash() - .call() - .await - .map_err(Into::into) - } - - async fn config_hash(&self) -> Result> { - self.as_ref().config_hash().call().await.map_err(Into::into) - } - - async fn identify(&self) -> Result> { - self.as_ref().identify().call().await.map_err(Into::into) - } - - async fn state_root(&self) -> Result> { - self.as_ref().state_root().call().await.map_err(Into::into) - } - - async fn state_block_number(&self) -> Result> { - self.as_ref() - .state_block_number() - .call() - .await - .map_err(Into::into) - } - - async fn state_block_hash(&self) -> Result> { - self.as_ref() - .state_block_hash() - .call() - .await - .map_err(Into::into) - } - - async fn update_state( - &self, - program_output: Vec, - ) -> Result, Error> { - self.as_ref() - .update_state(program_output) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } -} diff --git a/crates/l2/starknet-core-contract-client/src/lib.rs b/crates/l2/starknet-core-contract-client/src/lib.rs index 9841d83..7638c25 100644 --- a/crates/l2/starknet-core-contract-client/src/lib.rs +++ b/crates/l2/starknet-core-contract-client/src/lib.rs @@ -1,96 +1,65 @@ use std::sync::Arc; -use crate::clients::StarknetValidityContractClient; -use clients::StarknetSovereignContractClient; +use crate::clients::{StarknetCoreContractClient, StarknetDevCoreContractClient}; use starknet_proxy_client::deploy::{deploy_contract_behind_proxy, Error, ProxyVersion}; use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; -const STARKNET_SOVEREIGN: &str = include_str!("artifacts/StarknetSovereign.json"); -const STARKNET: &str = include_str!("artifacts/Starknet.json"); +const STARKNET_CORE_CONTRACT: &str = include_str!("../../../../artifacts/cairo-lang/Starknet.json"); +const STARKNET_DEV_CORE_CONTRACT: &str = + include_str!("../../../../artifacts/StarknetDevCoreContract.json"); -/// Deploy Starknet Sovereign contract and unsafe proxy for it. -/// Cached forge artifacts are used for deployment, make sure they are up to date. -pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( - client: Arc, -) -> Result { - // Deploy the Starknet Core contract (no explicit constructor) - let core_contract = deploy_contract_behind_proxy( - client.clone(), - STARKNET_SOVEREIGN, - NO_CONSTRUCTOR_ARG, - ProxyVersion::UnsafeProxy, - ) - .await?; - - Ok(StarknetSovereignContractClient::new( - core_contract.0.address(), - client.clone(), - core_contract.1.address(), - )) +pub enum CoreContractType { + // custom contract written for testing (contains override function) + Dev, + // picked from cairo-lang repo + Production, } -/// Deploy Starknet Sovereign contract and safe proxy for it. -/// Implementation of starknet contract is added which is used in prod by starknet -pub async fn deploy_starknet_sovereign_behind_safe_proxy( - client: Arc, -) -> Result { - // Deploy the Starknet Core contract (no explicit constructor) - let (core_contract, core_contract_implementation) = deploy_contract_behind_proxy( - client.clone(), - STARKNET_SOVEREIGN, - NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxy3_0_2, - ) - .await?; - - Ok(StarknetSovereignContractClient::new( - core_contract.address(), - client.clone(), - core_contract_implementation.address(), - )) +pub enum CoreContractClientType { + Dev(StarknetDevCoreContractClient), + Production(StarknetCoreContractClient), } -/// Deploy Starknet Validity contract and unsafe proxy for it. -/// Cached forge artifacts are used for deployment, make sure they are up to date. -pub async fn deploy_starknet_validity_behind_unsafe_proxy( +pub async fn deploy_starknet_core_contract_behind_proxy( client: Arc, -) -> Result { - // Deploy the Starknet Core contract (no explicit constructor) - let core_contract = deploy_contract_behind_proxy( - client.clone(), - STARKNET, - NO_CONSTRUCTOR_ARG, - ProxyVersion::UnsafeProxy, - ) - .await?; - - Ok(StarknetValidityContractClient::new( - core_contract.0.address(), - client.clone(), - core_contract.1.address(), - )) -} - -/// Deploy Starknet Validity contract and safe proxy for it. -/// Implementation of starknet contract is added which is used in prod by starknet -pub async fn deploy_starknet_validity_behind_safe_proxy( - client: Arc, -) -> Result { - // Deploy the Starknet Core contract (no explicit constructor) - let (core_contract, core_contract_implementation) = deploy_contract_behind_proxy( - client.clone(), - STARKNET, - NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxy3_0_2, - ) - .await?; - - Ok(StarknetValidityContractClient::new( - core_contract.address(), - client.clone(), - core_contract_implementation.address(), - )) + proxy_type: ProxyVersion, + core_contract_type: CoreContractType, +) -> Result { + match core_contract_type { + CoreContractType::Dev => { + let core_contract = deploy_contract_behind_proxy( + client.clone(), + STARKNET_DEV_CORE_CONTRACT, + NO_CONSTRUCTOR_ARG, + proxy_type, + ) + .await?; + Ok(CoreContractClientType::Dev( + StarknetDevCoreContractClient::new( + core_contract.0.address(), + client.clone(), + core_contract.1.address(), + ), + )) + } + CoreContractType::Production => { + let core_contract = deploy_contract_behind_proxy( + client.clone(), + STARKNET_CORE_CONTRACT, + NO_CONSTRUCTOR_ARG, + proxy_type, + ) + .await?; + Ok(CoreContractClientType::Production( + StarknetCoreContractClient::new( + core_contract.0.address(), + client.clone(), + core_contract.1.address(), + ), + )) + } + } } diff --git a/crates/l2/starknet-erc20-client/src/artifacts/ERC20Token.json b/crates/l2/starknet-erc20-client/src/artifacts/ERC20Token.json deleted file mode 100644 index a863187..0000000 --- a/crates/l2/starknet-erc20-client/src/artifacts/ERC20Token.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "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" - }, - { - "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": [ - { - "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": [ - { "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": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "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" - } - ], - "bytecode": { - "object": "0x608060405234801562000010575f80fd5b5060408051808201825260038082526244414960e81b602080840182905284518086019095528285528401529091906200004b83826200028d565b5060046200005a82826200028d565b505050620000783368056bc75e2d631000006200007e60201b60201c565b6200037b565b6001600160a01b038216620000ad5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b620000ba5f8383620000be565b5050565b6001600160a01b038316620000ec578060025f828254620000e0919062000355565b909155506200015e9050565b6001600160a01b0383165f9081526020819052604090205481811015620001405760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000a4565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166200017c576002805482900390556200019a565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001e091815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200021657607f821691505b6020821081036200023557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000288575f81815260208120601f850160051c81016020861015620002635750805b601f850160051c820191505b8181101562000284578281556001016200026f565b5050505b505050565b81516001600160401b03811115620002a957620002a9620001ed565b620002c181620002ba845462000201565b846200023b565b602080601f831160018114620002f7575f8415620002df5750858301515b5f19600386901b1c1916600185901b17855562000284565b5f85815260208120601f198616915b82811015620003275788860151825594840194600190910190840162000306565b50858210156200034557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200037557634e487b7160e01b5f52601160045260245ffd5b92915050565b6106f880620003895f395ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c8063313ce56711610063578063313ce567146100fa57806370a082311461010957806395d89b4114610131578063a9059cbb14610139578063dd62ed3e1461014c575f80fd5b806306fdde0314610094578063095ea7b3146100b257806318160ddd146100d557806323b872dd146100e7575b5f80fd5b61009c610184565b6040516100a99190610553565b60405180910390f35b6100c56100c03660046105b9565b610214565b60405190151581526020016100a9565b6002545b6040519081526020016100a9565b6100c56100f53660046105e1565b61022d565b604051601281526020016100a9565b6100d961011736600461061a565b6001600160a01b03165f9081526020819052604090205490565b61009c610250565b6100c56101473660046105b9565b61025f565b6100d961015a36600461063a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101939061066b565b80601f01602080910402602001604051908101604052809291908181526020018280546101bf9061066b565b801561020a5780601f106101e15761010080835404028352916020019161020a565b820191905f5260205f20905b8154815290600101906020018083116101ed57829003601f168201915b5050505050905090565b5f3361022181858561026c565b60019150505b92915050565b5f3361023a85828561027e565b6102458585856102fe565b506001949350505050565b6060600480546101939061066b565b5f336102218185856102fe565b610279838383600161035b565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146102f857818110156102ea57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6102f884848484035f61035b565b50505050565b6001600160a01b03831661032757604051634b637e8f60e11b81525f60048201526024016102e1565b6001600160a01b0382166103505760405163ec442f0560e01b81525f60048201526024016102e1565b61027983838361042d565b6001600160a01b0384166103845760405163e602df0560e01b81525f60048201526024016102e1565b6001600160a01b0383166103ad57604051634a1406b160e11b81525f60048201526024016102e1565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156102f857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161041f91815260200190565b60405180910390a350505050565b6001600160a01b038316610457578060025f82825461044c91906106a3565b909155506104c79050565b6001600160a01b0383165f90815260208190526040902054818110156104a95760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016102e1565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166104e357600280548290039055610501565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161054691815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b8181101561057e57858101830151858201604001528201610562565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146105b4575f80fd5b919050565b5f80604083850312156105ca575f80fd5b6105d38361059e565b946020939093013593505050565b5f805f606084860312156105f3575f80fd5b6105fc8461059e565b925061060a6020850161059e565b9150604084013590509250925092565b5f6020828403121561062a575f80fd5b6106338261059e565b9392505050565b5f806040838503121561064b575f80fd5b6106548361059e565b91506106626020840161059e565b90509250929050565b600181811c9082168061067f57607f821691505b60208210810361069d57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561022757634e487b7160e01b5f52601160045260245ffdfea2646970667358221220ad7501d4e2e4e8e0b57900d45d00582d330a3f37cf6b79f50d34426273ce62f364736f6c63430008140033" - } -} diff --git a/crates/l2/starknet-erc20-client/src/clients/erc20.rs b/crates/l2/starknet-erc20-client/src/clients/erc20.rs index 5aa9b0d..fcb163c 100644 --- a/crates/l2/starknet-erc20-client/src/clients/erc20.rs +++ b/crates/l2/starknet-erc20-client/src/clients/erc20.rs @@ -5,6 +5,7 @@ use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; +#[derive(Clone)] pub struct ERC20ContractClient { erc20_token: ERC20Token, } diff --git a/crates/l2/starknet-erc20-client/src/interfaces/erc20.rs b/crates/l2/starknet-erc20-client/src/interfaces/erc20.rs index e6e99ef..3a88256 100644 --- a/crates/l2/starknet-erc20-client/src/interfaces/erc20.rs +++ b/crates/l2/starknet-erc20-client/src/interfaces/erc20.rs @@ -11,14 +11,7 @@ use utils::errors::Error; abigen!( ERC20Token, - r#"[ - function name() public view virtual returns (string memory) - function symbol() public view virtual returns (string memory) - function totalSupply() public view virtual returns (uint256) - function balanceOf(address account) public view virtual returns (uint256) - function allowance(address owner, address spender) public view virtual returns (uint256) - function approve(address spender, uint256 value) public virtual returns (bool) - ]"#, + "../../../artifacts/starkgate-contracts/ERC20.json", ); #[async_trait] diff --git a/crates/l2/starknet-erc20-client/src/lib.rs b/crates/l2/starknet-erc20-client/src/lib.rs index 5f1385b..f80219d 100644 --- a/crates/l2/starknet-erc20-client/src/lib.rs +++ b/crates/l2/starknet-erc20-client/src/lib.rs @@ -8,13 +8,13 @@ use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; -const DAI_ERC20_TOKEN: &str = include_str!("artifacts/ERC20Token.json"); +const ERC20_TEST_TOKEN: &str = include_str!("../../../../artifacts/starkgate-contracts/ERC20.json"); -pub async fn deploy_dai_erc20_behind_unsafe_proxy( +pub async fn deploy_dai_test_erc20_behind_unsafe_proxy( client: Arc, ) -> Result { // Deploy the Dai ERC20 Token contract (no explicit constructor) - let contract = deploy_contract(client.clone(), DAI_ERC20_TOKEN, NO_CONSTRUCTOR_ARG) + let contract = deploy_contract(client.clone(), ERC20_TEST_TOKEN, NO_CONSTRUCTOR_ARG) .await .unwrap(); diff --git a/crates/l2/starknet-eth-bridge-client/src/artifacts/StarknetLegacyBridge.json b/crates/l2/starknet-eth-bridge-client/src/artifacts/StarknetLegacyBridge.json deleted file mode 100644 index 13e8ea8..0000000 --- a/crates/l2/starknet-eth-bridge-client/src/artifacts/StarknetLegacyBridge.json +++ /dev/null @@ -1,499 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [], - "name": "LogBridgeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "LogDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "LogDepositCancelRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "LogDepositReclaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "acceptedGovernor", - "type": "address" - } - ], - "name": "LogNewGovernorAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "nominatedGovernor", - "type": "address" - } - ], - "name": "LogNominatedGovernor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "LogNominationCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "removedGovernor", - "type": "address" - } - ], - "name": "LogRemovedGovernor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetL2TokenBridge", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetMaxDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetMaxTotalBalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "LogWithdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "acceptGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "cancelNomination", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "depositCancelRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "depositReclaim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "identify", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isFrozen", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "isGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxTotalBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "name": "nominateNewGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" - } - ], - "name": "removeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2TokenBridge_", - "type": "uint256" - } - ], - "name": "setL2TokenBridge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxDeposit_", - "type": "uint256" - } - ], - "name": "setMaxDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxTotalBalance_", - "type": "uint256" - } - ], - "name": "setMaxTotalBalance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": { - "object": "60c06040523480156200001157600080fd5b5060405180606001604052806021815260200162003aab60219139806040516020018082805190602001908083835b6020831062000065578051825260208201915060208101905060208303925062000040565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012060808181525050503073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060805160a05160601c6139a5620001066000398061082052508061324752506139a56000f3fe60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146104b0578063e2bbb158146104eb578063e43581b814610523578063eeb728661461058a578063eecdac881461061a5761011e565b80637fc2ab3e1461036c57806387ebeb18146103a7578063894ecf04146103f8578063ae87381614610433578063b6b55f25146104825761011e565b80632e1a7d4d116100e75780632e1a7d4d1461020457806333eeb1471461023f578063439fab911461026c5780634c567662146102f25780636083e59a146103415761011e565b8062f714ce1461012357806310f2ec451461017e578063195340751461019557806322f3e2d4146101c0578063238efcbc146101ed575b600080fd5b34801561012f57600080fd5b5061017c6004803603604081101561014657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061066b565b005b34801561018a57600080fd5b50610193610774565b005b3480156101a157600080fd5b506101aa61077e565b6040518082815260200191505060405180910390f35b3480156101cc57600080fd5b506101d56107a6565b60405180821515815260200191505060405180910390f35b3480156101f957600080fd5b506102026107eb565b005b34801561021057600080fd5b5061023d6004803603602081101561022757600080fd5b81019080803590602001909291905050506107f5565b005b34801561024b57600080fd5b50610254610802565b60405180821515815260200191505060405180910390f35b34801561027857600080fd5b506102f06004803603602081101561028f57600080fd5b81019080803590602001906401000000008111156102ac57600080fd5b8201836020820111156102be57600080fd5b803590602001918460018302840111640100000000831117156102e057600080fd5b9091929391929390505050610807565b005b3480156102fe57600080fd5b5061033f6004803603606081101561031557600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610ae0565b005b34801561034d57600080fd5b50610356610e5a565b6040518082815260200191505060405180910390f35b34801561037857600080fd5b506103a56004803603602081101561038f57600080fd5b8101908080359060200190929190505050610e82565b005b3480156103b357600080fd5b506103f6600480360360208110156103ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611069565b005b34801561040457600080fd5b506104316004803603602081101561041b57600080fd5b8101908080359060200190929190505050611075565b005b34801561043f57600080fd5b506104806004803603606081101561045657600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611133565b005b6104ae6004803603602081101561049857600080fd5b81019080803590602001909291905050506114b7565b005b3480156104bc57600080fd5b506104e9600480360360208110156104d357600080fd5b81019080803590602001909291905050506114c4565b005b6105216004803603604081101561050157600080fd5b810190808035906020019092919080359060200190929190505050611582565b005b34801561052f57600080fd5b506105726004803603602081101561054657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061168e565b60405180821515815260200191505060405180910390f35b34801561059657600080fd5b5061059f6116a0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105df5780820151818401526020810190506105c4565b50505050905090810190601f16801561060c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561062657600080fd5b506106696004803603602081101561063d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c0565b005b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561070e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f494e56414c49445f524543495049454e5400000000000000000000000000000081525060200191505060405180910390fd5b61071882826116cc565b6107228282611909565b8073ffffffffffffffffffffffffffffffffffffffff167fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91836040518082815260200191505060405180910390a25050565b61077c611936565b565b60006107a160405180606001604052806027815260200161389260279139611a89565b905090565b60006107e66040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f41435449564500815250611b0a565b905090565b6107f3611b8b565b565b6107ff813361066b565b50565b600090565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614156108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4449524543545f43414c4c5f444953414c4c4f5745440000000000000000000081525060200191505060405180910390fd5b60006108d3611cac565b6020029050600060208201905080848490501015610959576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f494e49545f444154415f544f4f5f534d414c4c0000000000000000000000000081525060200191505060405180910390fd5b600084848490849261096d939291906137eb565b602081101561097b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050509050366000868660009087926109ba939291906137eb565b915091506109c88282611cb1565b3660008888879080926109dd939291906137eb565b91509150600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610a2c57610a20858383611cb5565b50505050505050610adc565b610a34611ffd565b15610ab75760008282905014610ab2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f554e45585045435445445f494e49545f4441544100000000000000000000000081525060200191505060405180910390fd5b610ad4565b610ac182826120c8565b610acb828261235f565b610ad36123d5565b5b505050505050505b5050565b610ae86107a6565b610b5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e4f545f4143544956455f59455400000000000000000000000000000000000081525060200191505060405180910390fd5b806000610b6561248f565b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4445504f5349545f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f4e4c595f4445504f5349544f5200000000000000000000000000000000000081525060200191505060405180910390fd5b610ce56124b7565b73ffffffffffffffffffffffffffffffffffffffff16637a98660b610d086124df565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610d338989612507565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610d98578082015181840152602081019050610d7d565b5050505090500195505050505050602060405180830381600087803b158015610dc057600080fd5b505af1158015610dd4573d6000803e3d6000fd5b505050506040513d6020811015610dea57600080fd5b810190808051906020019092919050505050833373ffffffffffffffffffffffffffffffffffffffff167fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f58786604051808381526020018281526020019250505060405180910390a35050505050565b6000610e7d60405180606001604052806021815260200161390460219139611a89565b905090565b610e8b336125b9565b610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b610f05611ffd565b610f77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000081525060200191505060405180910390fd5b610f808161261d565b610ff2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4c325f414444524553535f4f55545f4f465f52414e474500000000000000000081525060200191505060405180910390fd5b610ffb81612654565b611003612679565b7f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb8816040518082815260200191505060405180910390a17f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf60405160405180910390a150565b611072816126bb565b50565b61107e336125b9565b6110f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b7fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc816040518082815260200191505060405180910390a1611130816129bb565b50565b61113b6107a6565b6111ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e4f545f4143544956455f59455400000000000000000000000000000000000081525060200191505060405180910390fd5b8060006111b861248f565b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561128f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4445504f5349545f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f4e4c595f4445504f5349544f5200000000000000000000000000000000000081525060200191505060405180910390fd5b6113386124b7565b73ffffffffffffffffffffffffffffffffffffffff16636170ff1b61135b6124df565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56113868989612507565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156113eb5780820151818401526020810190506113d0565b5050505090500195505050505050602060405180830381600087803b15801561141357600080fd5b505af1158015611427573d6000803e3d6000fd5b505050506040513d602081101561143d57600080fd5b8101908080519060200190929190505050506114598533611909565b833373ffffffffffffffffffffffffffffffffffffffff167fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb48786604051808381526020018281526020019250505060405180910390a35050505050565b6114c13482611582565b50565b6114cd336125b9565b61153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b7faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad762651816040518082815260200191505060405180910390a161157f816129e0565b50565b813410156115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f494e53554646494349454e545f56414c5545000000000000000000000000000081525060200191505060405180910390fd5b6000823403905061160761077e565b814703111561167e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d41585f42414c414e43455f455843454544454400000000000000000000000081525060200191505060405180910390fd5b611689838383612a05565b505050565b6000611699826125b9565b9050919050565b60606040518060600160405280602281526020016138b960229139905090565b6116c981612f03565b50565b6116d46107a6565b611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e4f545f4143544956455f59455400000000000000000000000000000000000081525060200191505060405180910390fd5b6060600467ffffffffffffffff8111801561176057600080fd5b5060405190808252806020026020018201604052801561178f5781602001602082028036833780820191505090505b5090506000816000815181106117a157fe5b6020026020010181815250508173ffffffffffffffffffffffffffffffffffffffff16816001815181106117d157fe5b6020026020010181815250506001608060020a038316816002815181106117f457fe5b602002602001018181525050608083901c8160038151811061181257fe5b6020026020010181815250506118266124b7565b73ffffffffffffffffffffffffffffffffffffffff16632c9dd5c06118496124df565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156118a2578082015181840152602081019050611887565b505050509050019350505050602060405180830381600087803b1580156118c857600080fd5b505af11580156118dc573d6000803e3d6000fd5b505050506040513d60208110156118f257600080fd5b810190808051906020019092919050505050505050565b611932828273ffffffffffffffffffffffffffffffffffffffff1661315290919063ffffffff16565b5050565b61193f336125b9565b6119b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b60006119bb613242565b9050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a865760008160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f560405160405180910390a15b50565b600080826040516020018082805190602001908083835b60208310611ac35780518252602082019150602081019050602083039250611aa0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600080826040516020018082805190602001908083835b60208310611b445780518252602082019150602081019050602083039250611b21565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b6000611b95613242565b90508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c5c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f4e4c595f43414e4449444154455f474f5645524e4f5200000000000000000081525060200191505060405180910390fd5b611c653361326f565b60008160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600090565b5050565b611cd48373ffffffffffffffffffffffffffffffffffffffff166133a2565b611d46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4549435f4e4f545f415f434f4e5452414354000000000000000000000000000081525060200191505060405180910390fd5b600060608473ffffffffffffffffffffffffffffffffffffffff1663439fab9160e01b858560405160240180806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310611e365780518252602082019150602081019050602083039250611e13565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611e96576040519150601f19603f3d011682016040523d82523d6000602084013e611e9b565b606091505b5091509150818190611f48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f0d578082015181840152602081019050611ef2565b50505050905090810190601f168015611f3a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008151148190611ff5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fba578082015181840152602081019050611f9f565b50505050905090810190601f168015611fe75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050505050565b60006120076133b5565b61204a57600073ffffffffffffffffffffffffffffffffffffffff1661202b6124b7565b73ffffffffffffffffffffffffffffffffffffffff16141590506120c5565b600073ffffffffffffffffffffffffffffffffffffffff1661206a6124b7565b73ffffffffffffffffffffffffffffffffffffffff16141580156120c25750600073ffffffffffffffffffffffffffffffffffffffff166120a96133ba565b73ffffffffffffffffffffffffffffffffffffffff1614155b90505b90565b60408282905014612141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f494c4c4547414c5f444154415f53495a4500000000000000000000000000000081525060200191505060405180910390fd5b6000808383604081101561215457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050915091506121a76133b5565b15612242576121cb8273ffffffffffffffffffffffffffffffffffffffff166133a2565b61223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f494e56414c49445f4252494447455f544f4b454e5f414444524553530000000081525060200191505060405180910390fd5b6122e5565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f56494445440081525060200191505060405180910390fd5b5b6123048173ffffffffffffffffffffffffffffffffffffffff166133a2565b612359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806139256022913960400191505060405180910390fd5b50505050565b6000808383604081101561237257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050915091506123c6826133e2565b6123cf81613407565b50505050565b60006123df613242565b90508060010160149054906101000a900460ff1615612466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f414c52454144595f494e495449414c495a45440000000000000000000000000081525060200191505060405180910390fd5b60018160010160146101000a81548160ff02191690831515021790555061248c3361326f565b50565b60006124b26040518060600160405280602981526020016138db6029913961342c565b905090565b60006124da60405180606001604052806028815260200161381f602891396134ac565b905090565b600061250260405180606001604052806027815260200161386b60279139611a89565b905090565b606080600367ffffffffffffffff8111801561252257600080fd5b506040519080825280602002602001820160405280156125515781602001602082028036833780820191505090505b509050828160008151811061256257fe5b6020026020010181815250506001608060020a0384168160018151811061258557fe5b602002602001018181525050608084901c816002815181106125a357fe5b6020026020010181815250508091505092915050565b6000806125c4613242565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050919050565b6000808211801561264d57507f080000000000001100000000000000000000000000000000000000000000000182105b9050919050565b61267660405180606001604052806027815260200161386b602791398261352d565b50565b6126b96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016135b9565b565b6126c4336125b9565b612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b6000612740613242565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4241445f4144445245535300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6127ee826125b9565b15612861576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612927576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f544845525f43414e4449444154455f50454e44494e4700000000000000000081525060200191505060405180910390fd5b818160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6129dd6040518060600160405280602781526020016138926027913982613637565b50565b612a026040518060600160405280602181526020016139046021913982613637565b50565b612a0d6107a6565b612a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e4f545f4143544956455f59455400000000000000000000000000000000000081525060200191505060405180910390fd5b60008311612af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5a45524f5f4445504f534954000000000000000000000000000000000000000081525060200191505060405180910390fd5b80341015612b6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f494e53554646494349454e545f4d53475f56414c55450000000000000000000081525060200191505060405180910390fd5b612b748261261d565b612be6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4c325f414444524553535f4f55545f4f465f52414e474500000000000000000081525060200191505060405180910390fd5b612bee610e5a565b831115612c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806138476024913960400191505060405180910390fd5b6000612c506124b7565b73ffffffffffffffffffffffffffffffffffffffff16633e3aa6c583612c746124df565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5612c9f8989612507565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015612cfd578082015181840152602081019050612ce2565b5050505090500194505050505060408051808303818588803b158015612d2257600080fd5b505af1158015612d36573d6000803e3d6000fd5b50505050506040513d6040811015612d4d57600080fd5b810190808051906020019092919080519060200190929190505050915050600073ffffffffffffffffffffffffffffffffffffffff16612d8b61248f565b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4445504f5349545f414c52454144595f5245474953544552454400000000000081525060200191505060405180910390fd5b33612e4f61248f565b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550823373ffffffffffffffffffffffffffffffffffffffff167f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf86848660405180848152602001838152602001828152602001935050505060405180910390a350505050565b612f0c336125b9565b612f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f474f5645524e4f525f53454c465f52454d4f564500000000000000000000000081525060200191505060405180910390fd5b600061302a613242565b9050613035826125b9565b6130a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e4f545f474f5645524e4f52000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a2959982604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b60008114156131605761323e565b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d80600081146131c0576040519150601f19603f3d011682016040523d82523d6000602084013e6131c5565b606091505b505090508061323c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4554485f5452414e534645525f4641494c45440000000000000000000000000081525060200191505060405180910390fd5b505b5050565b6000807f000000000000000000000000000000000000000000000000000000000000000090508091505090565b613278816125b9565b156132eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b60006132f5613242565b905060018160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600080823b905060008111915050919050565b600090565b60006133dd604051806060016040528060298152602001613947602991396134ac565b905090565b61340460405180606001604052806029815260200161394760299139826136b5565b50565b61342960405180606001604052806028815260200161381f60289139826136b5565b50565b600080826040516020018082805190602001908083835b602083106134665780518252602082019150602081019050602083039250613443565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b600080826040516020018082805190602001908083835b602083106134e657805182526020820191506020810190506020830392506134c3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061353883611a89565b146135ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f414c52454144595f53455400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6135b58282613637565b5050565b6000826040516020018082805190602001908083835b602083106135f257805182526020820191506020810190506020830392506135cf565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000826040516020018082805190602001908083835b60208310613670578051825260208201915060208101905060208303925061364d565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b600073ffffffffffffffffffffffffffffffffffffffff166136d6836134ac565b73ffffffffffffffffffffffffffffffffffffffff161461375f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f414c52454144595f53455400000000000000000000000000000000000000000081525060200191505060405180910390fd5b613769828261376d565b5050565b6000826040516020018082805190602001908083835b602083106137a65780518252602082019150602081019050602083039250613783565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b600080858511156137fb57600080fd5b8386111561380857600080fd5b600185028301915084860390509450949250505056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a2646970667358221220bca480f522f3a973a108c2649b1c868a98dc4edc5331ea8b22efd80d81bca07164736f6c634300060c0033535441524b574152455f44454641554c545f474f5645524e414e43455f494e464f" - } -} diff --git a/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs b/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs index 2fd66e3..a64aa80 100644 --- a/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs +++ b/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs @@ -7,6 +7,7 @@ use ethers::types::Address; use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport3_0_2; /// Client to interact with a Starknet Eth Bridge +#[derive(Clone)] pub struct StarknetEthBridgeContractClient { eth_bridge: StarknetEthBridge, proxy_support: ProxySupport3_0_2, diff --git a/crates/l2/starknet-eth-bridge-client/src/interfaces/eth_bridge.rs b/crates/l2/starknet-eth-bridge-client/src/interfaces/eth_bridge.rs index d263b02..6cb8702 100644 --- a/crates/l2/starknet-eth-bridge-client/src/interfaces/eth_bridge.rs +++ b/crates/l2/starknet-eth-bridge-client/src/interfaces/eth_bridge.rs @@ -13,16 +13,7 @@ type Address = H160; abigen!( StarknetEthBridge, - r#"[ - function setMaxTotalBalance(uint256 maxTotalBalance_) external onlyGovernance - function setMaxDeposit(uint256 maxDeposit_) external onlyGovernance - function setL2TokenBridge(uint256 l2TokenBridge_) external onlyGovernance - - function deposit(uint256 amount, uint256 l2Recipient) public payable override - function withdraw(uint256 amount, address recipient) public - - function identify() external pure override returns (string memory) - ]"#, + "../../../artifacts/starkgate-contracts-0.9/StarknetLegacyBridge.json", ); #[async_trait] @@ -104,7 +95,7 @@ where fee: U256, ) -> Result, Error> { self.as_ref() - .deposit(amount, l2_recipient) + .deposit_with_amount(amount, l2_recipient) .value(fee) .send() .await @@ -119,7 +110,7 @@ where l1_recipient: Address, ) -> Result, Error> { self.as_ref() - .withdraw(amount, l1_recipient) + .withdraw_with_recipient(amount, l1_recipient) .send() .await .map_err(Into::>::into)? diff --git a/crates/l2/starknet-eth-bridge-client/src/lib.rs b/crates/l2/starknet-eth-bridge-client/src/lib.rs index 1a6b079..12000ec 100644 --- a/crates/l2/starknet-eth-bridge-client/src/lib.rs +++ b/crates/l2/starknet-eth-bridge-client/src/lib.rs @@ -6,7 +6,8 @@ use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; -const STARKNET_ETH_BRIDGE: &str = include_str!("artifacts/StarknetLegacyBridge.json"); +const STARKNET_ETH_BRIDGE: &str = + include_str!("../../../../artifacts/starkgate-contracts-0.9/StarknetLegacyBridge.json"); pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( client: Arc, diff --git a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_3_0_2.json b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_3_0_2.json deleted file mode 100644 index 875d193..0000000 --- a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_3_0_2.json +++ /dev/null @@ -1,723 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { - "name": "upgradeActivationDelay", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { "type": "fallback", "stateMutability": "payable" }, - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "MAX_UPGRADE_DELAY", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PROXY_GOVERNANCE_TAG", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PROXY_VERSION", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "UPGRADE_DELAY_SLOT", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addImplementation", - "inputs": [ - { - "name": "newImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "finalize", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getUpgradeActivationDelay", - "inputs": [], - "outputs": [ - { "name": "delay", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "implementation", - "inputs": [], - "outputs": [ - { - "name": "_implementation", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "isNotFinalized", - "inputs": [], - "outputs": [ - { "name": "notFinal", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "proxyAcceptGovernance", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "proxyCancelNomination", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "proxyIsGovernor", - "inputs": [ - { "name": "user", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "proxyNominateNewGovernor", - "inputs": [ - { "name": "newGovernor", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "proxyRemoveGovernor", - "inputs": [ - { - "name": "governorForRemoval", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeImplementation", - "inputs": [ - { - "name": "removedImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "finalize", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "upgradeTo", - "inputs": [ - { - "name": "newImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "finalize", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "event", - "name": "FinalizedImplementation", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ImplementationAdded", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "initializer", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "finalize", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ImplementationRemoved", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "initializer", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "finalize", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ImplementationUpgraded", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "initializer", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogNewGovernorAccepted", - "inputs": [ - { - "name": "acceptedGovernor", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogNominatedGovernor", - "inputs": [ - { - "name": "nominatedGovernor", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LogNominationCancelled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "LogRemovedGovernor", - "inputs": [ - { - "name": "removedGovernor", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60806040523480156200001157600080fd5b5060405162001ba238038062001ba2833981810160405260208110156200003757600080fd5b50516200004362000055565b6200004e81620000e9565b5062000277565b6000620000616200010d565b6001810154909150600160a01b900460ff1615620000c6576040805162461bcd60e51b815260206004820152601360248201527f414c52454144595f494e495449414c495a454400000000000000000000000000604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055620000e6336200018d565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b60008060405180606001604052806027815260200162001b7b602791396040518082805190602001908083835b602083106200015b5780518252601f1990920191602091820191016200013a565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209392505050565b620001988162000246565b15620001de576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6000620001ea6200010d565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b600080620002536200010d565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b6118f480620002876000396000f3fe6080604052600436106100f75760003560e01c80637147855d1161008a578063c5ab845311610059578063c5ab84531461059d578063d38d8d7a146105b2578063e907fa3c146105c7578063f9bcdde4146105dc57610149565b80637147855d1461048e57806372a44f071461050e5780638757653f14610523578063b449ea5d1461055657610149565b80635c60da1b116100c65780635c60da1b1461032e5780635cef2e861461035f5780635e3a97e7146103ec5780636684b1d61461047957610149565b806312f16e6d146101cd57806320cea94d14610202578063439fab911461022957806356f36dbf146102a457610149565b36610149576040805162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f52454345495645604482015290519081900360640190fd5b60006101536105f1565b90506001600160a01b0381166101a9576040805162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b604482015290519081900360640190fd5b3660008037600080366000845af43d6000803e8080156101c8573d6000f35b3d6000fd5b3480156101d957600080fd5b50610200600480360360208110156101f057600080fd5b50356001600160a01b0316610616565b005b34801561020e57600080fd5b50610217610622565b60408051918252519081900360200190f35b34801561023557600080fd5b506102006004803603602081101561024c57600080fd5b810190602081018135600160201b81111561026657600080fd5b82018360208201111561027857600080fd5b803590602001918460018302840111600160201b8311171561029957600080fd5b509092509050610646565b3480156102b057600080fd5b506102b961068c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f35781810151838201526020016102db565b50505050905090810190601f1680156103205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033a57600080fd5b506103436105f1565b604080516001600160a01b039092168252519081900360200190f35b34801561036b57600080fd5b506102006004803603606081101561038257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460018302840111600160201b831117156103df57600080fd5b91935091503515156106a8565b3480156103f857600080fd5b506102006004803603606081101561040f57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561043957600080fd5b82018360208201111561044b57600080fd5b803590602001918460018302840111600160201b8311171561046c57600080fd5b9193509150351515610866565b34801561048557600080fd5b50610200610a20565b610200600480360360608110156104a457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156104ce57600080fd5b8201836020820111156104e057600080fd5b803590602001918460018302840111600160201b8311171561050157600080fd5b9193509150351515610a2a565b34801561051a57600080fd5b506102176110ad565b34801561052f57600080fd5b506102006004803603602081101561054657600080fd5b50356001600160a01b03166110ed565b34801561056257600080fd5b506105896004803603602081101561057957600080fd5b50356001600160a01b03166110f6565b604080519115158252519081900360200190f35b3480156105a957600080fd5b506102b9611107565b3480156105be57600080fd5b50610217611128565b3480156105d357600080fd5b5061058961112f565b3480156105e857600080fd5b50610200611155565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b245490565b61061f8161115d565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040805162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b604482015290519081900360640190fd5b6040518060600160405280602781526020016118986027913981565b6106b1336112aa565b6106f4576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050604051602081830303815290604052805190602001209050600060026000838152602001908152602001600020549050600081116107d3576040805162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e0000000000604482015290519081900360640190fd5b6002600083815260200190815260200160002060009055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051808060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b61086f336112aa565b6108b2576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6108c4846001600160a01b03166112d9565b61090c576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006109886110ad565b42019050806002600084815260200190815260200160002081905550856001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b868686604051808060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b610a286112df565b565b610a33336112aa565b610a76576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610a7e61112f565b610acf576040805162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a45440000000000000000604482015290519081900360640190fd5b610ad7611369565b15610b1b576040805162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610bfa576040805162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e0000000000604482015290519081900360640190fd5b610c0c866001600160a01b03166112d9565b610c54576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b4281111580610c7357506000610c686105f1565b6001600160a01b0316145b610cc4576040805162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f594554000000000000000000604482015290519081900360640190fd5b610ccd866114cc565b60006060876001600160a01b031663439fab9160e01b88886040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610d7e5780518252601f199092019160209182019101610d5f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610dde576040519150601f19603f3d011682016040523d82523d6000602084013e610de3565b606091505b5091509150818190610e735760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e38578181015183820152602001610e20565b50505050905090810190601f168015610e655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516001600160a01b038c169382918083835b60208310610ed05780518252601f199092019160209182019101610eb1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610f30576040519150601f19603f3d011682016040523d82523d6000602084013e610f35565b606091505b50909250905081610f8d576040805162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f524556455254454400000000000000604482015290519081900360640190fd5b808060200190516020811015610fa257600080fd5b505115610ff6576040805162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e00000000000000604482015290519081900360640190fd5b876001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a284156110a35761106e6114f0565b6040516001600160a01b038916907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c90600090a25b5050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e0082106110e45762ed4e006110e6565b815b9150505b90565b61061f81611516565b6000611101826112aa565b92915050565b60405180604001604052806005815260200164199718171960d91b81525081565b62ed4e0081565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d2541590565b610a286116bc565b611166336112aa565b6111a9576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b03821614156111fe576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b6000611208611766565b9050611213826112aa565b611253576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6000806112b5611766565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b3b151590565b60006112e9611766565b60018101549091506001600160a01b0316331461134d576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b611356336117e3565b60010180546001600160a01b0319169055565b6000806113746105f1565b90506001600160a01b03811661138e5760009150506110ea565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516000936060936001600160a01b038716939092909182918083835b602083106113f45780518252601f1990920191602091820191016113d5565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b50915091508181906114ac5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e38578181015183820152602001610e20565b508080602001905160208110156114c257600080fd5b5051935050505090565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2455565b60017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b61151f336112aa565b611562576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b600061156c611766565b90506001600160a01b0382166115b7576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b6115c0826112aa565b15611605576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611665576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b6116c5336112aa565b611708576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611712611766565b60018101549091506001600160a01b03161561061f576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080604051806060016040528060278152602001611898602791396040518082805190602001908083835b602083106117b15780518252601f199092019160209182019101611792565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209392505050565b6117ec816112aa565b15611831576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b600061183b611766565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a1505056fe537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6ea26469706673582212203a19bff527d274eefeeb7dd40b1b1b143070f4c97dfdf4f31d65f9e5648f10cd64736f6c634300060c0033537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6e", - "sourceMap": "3049:10323:2:-:0;;;4007:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4007:143:2;4068:16;:14;:16::i;:::-;4094:49;4120:22;4094:25;:49::i;:::-;4007:143;3049:10323;;2294:317:4;2339:32;2374:19;:17;:19::i;:::-;2412:15;;;;;;-1:-1:-1;;;;2412:15:4;;;;2411:16;2403:48;;;;;-1:-1:-1;;;2403:48:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;2479:4;2461:15;;:22;;-1:-1:-1;;;;2461:22:4;-1:-1:-1;;;2461:22:4;;;2575:29;2593:10;2575:17;:29::i;:::-;2294:317;:::o;4336:187:2:-;2456:66:3;4479:28:2;4465:52::o;2384:151:0:-;2445:28;2492:14;2507:20;;;;;;;;;;;;;;;;;2492:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2492:36:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2492:36:0;;;;;;;;;;;;;;;;-1:-1:-1;2492:36:0;;;;;;;;;;;2384:151;-1:-1:-1;;;2384:151:0:o;3972:334:4:-;4047:24;4059:11;4047;:24::i;:::-;4046:25;4038:54;;;;;-1:-1:-1;;;4038:54:4;;;;;;;;;;;;-1:-1:-1;;;4038:54:4;;;;;;;;;;;;;;;4102:32;4137:19;:17;:19::i;:::-;-1:-1:-1;;;;;4166:35:4;;:22;:35;;;;;;;;;;;;:42;;-1:-1:-1;;4166:42:4;4204:4;4166:42;;;4264:35;;;;;;;4102:54;;-1:-1:-1;4264:35:4;;;;;;;;;3972:334;;:::o;2617:189::-;2684:4;;2735:19;:17;:19::i;:::-;-1:-1:-1;;;;;2771:28:4;;;;:22;:28;;;;;;;;-1:-1:-1;;2771:28:4;;;;;;;2617:189::o;3049:10323:2:-;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106100f75760003560e01c80637147855d1161008a578063c5ab845311610059578063c5ab84531461059d578063d38d8d7a146105b2578063e907fa3c146105c7578063f9bcdde4146105dc57610149565b80637147855d1461048e57806372a44f071461050e5780638757653f14610523578063b449ea5d1461055657610149565b80635c60da1b116100c65780635c60da1b1461032e5780635cef2e861461035f5780635e3a97e7146103ec5780636684b1d61461047957610149565b806312f16e6d146101cd57806320cea94d14610202578063439fab911461022957806356f36dbf146102a457610149565b36610149576040805162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f52454345495645604482015290519081900360640190fd5b60006101536105f1565b90506001600160a01b0381166101a9576040805162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b604482015290519081900360640190fd5b3660008037600080366000845af43d6000803e8080156101c8573d6000f35b3d6000fd5b3480156101d957600080fd5b50610200600480360360208110156101f057600080fd5b50356001600160a01b0316610616565b005b34801561020e57600080fd5b50610217610622565b60408051918252519081900360200190f35b34801561023557600080fd5b506102006004803603602081101561024c57600080fd5b810190602081018135600160201b81111561026657600080fd5b82018360208201111561027857600080fd5b803590602001918460018302840111600160201b8311171561029957600080fd5b509092509050610646565b3480156102b057600080fd5b506102b961068c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f35781810151838201526020016102db565b50505050905090810190601f1680156103205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033a57600080fd5b506103436105f1565b604080516001600160a01b039092168252519081900360200190f35b34801561036b57600080fd5b506102006004803603606081101561038257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460018302840111600160201b831117156103df57600080fd5b91935091503515156106a8565b3480156103f857600080fd5b506102006004803603606081101561040f57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561043957600080fd5b82018360208201111561044b57600080fd5b803590602001918460018302840111600160201b8311171561046c57600080fd5b9193509150351515610866565b34801561048557600080fd5b50610200610a20565b610200600480360360608110156104a457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156104ce57600080fd5b8201836020820111156104e057600080fd5b803590602001918460018302840111600160201b8311171561050157600080fd5b9193509150351515610a2a565b34801561051a57600080fd5b506102176110ad565b34801561052f57600080fd5b506102006004803603602081101561054657600080fd5b50356001600160a01b03166110ed565b34801561056257600080fd5b506105896004803603602081101561057957600080fd5b50356001600160a01b03166110f6565b604080519115158252519081900360200190f35b3480156105a957600080fd5b506102b9611107565b3480156105be57600080fd5b50610217611128565b3480156105d357600080fd5b5061058961112f565b3480156105e857600080fd5b50610200611155565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b245490565b61061f8161115d565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040805162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b604482015290519081900360640190fd5b6040518060600160405280602781526020016118986027913981565b6106b1336112aa565b6106f4576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050604051602081830303815290604052805190602001209050600060026000838152602001908152602001600020549050600081116107d3576040805162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e0000000000604482015290519081900360640190fd5b6002600083815260200190815260200160002060009055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051808060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b61086f336112aa565b6108b2576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6108c4846001600160a01b03166112d9565b61090c576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006109886110ad565b42019050806002600084815260200190815260200160002081905550856001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b868686604051808060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b610a286112df565b565b610a33336112aa565b610a76576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610a7e61112f565b610acf576040805162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a45440000000000000000604482015290519081900360640190fd5b610ad7611369565b15610b1b576040805162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610bfa576040805162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e0000000000604482015290519081900360640190fd5b610c0c866001600160a01b03166112d9565b610c54576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b4281111580610c7357506000610c686105f1565b6001600160a01b0316145b610cc4576040805162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f594554000000000000000000604482015290519081900360640190fd5b610ccd866114cc565b60006060876001600160a01b031663439fab9160e01b88886040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610d7e5780518252601f199092019160209182019101610d5f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610dde576040519150601f19603f3d011682016040523d82523d6000602084013e610de3565b606091505b5091509150818190610e735760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e38578181015183820152602001610e20565b50505050905090810190601f168015610e655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516001600160a01b038c169382918083835b60208310610ed05780518252601f199092019160209182019101610eb1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610f30576040519150601f19603f3d011682016040523d82523d6000602084013e610f35565b606091505b50909250905081610f8d576040805162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f524556455254454400000000000000604482015290519081900360640190fd5b808060200190516020811015610fa257600080fd5b505115610ff6576040805162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e00000000000000604482015290519081900360640190fd5b876001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a284156110a35761106e6114f0565b6040516001600160a01b038916907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c90600090a25b5050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e0082106110e45762ed4e006110e6565b815b9150505b90565b61061f81611516565b6000611101826112aa565b92915050565b60405180604001604052806005815260200164199718171960d91b81525081565b62ed4e0081565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d2541590565b610a286116bc565b611166336112aa565b6111a9576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b03821614156111fe576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b6000611208611766565b9050611213826112aa565b611253576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6000806112b5611766565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b3b151590565b60006112e9611766565b60018101549091506001600160a01b0316331461134d576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b611356336117e3565b60010180546001600160a01b0319169055565b6000806113746105f1565b90506001600160a01b03811661138e5760009150506110ea565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516000936060936001600160a01b038716939092909182918083835b602083106113f45780518252601f1990920191602091820191016113d5565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b50915091508181906114ac5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e38578181015183820152602001610e20565b508080602001905160208110156114c257600080fd5b5051935050505090565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2455565b60017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b61151f336112aa565b611562576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b600061156c611766565b90506001600160a01b0382166115b7576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b6115c0826112aa565b15611605576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611665576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b6116c5336112aa565b611708576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611712611766565b60018101549091506001600160a01b03161561061f576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080604051806060016040528060278152602001611898602791396040518082805190602001908083835b602083106117b15780518252601f199092019160209182019101611792565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209392505050565b6117ec816112aa565b15611831576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b600061183b611766565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a1505056fe537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6ea26469706673582212203a19bff527d274eefeeb7dd40b1b1b143070f4c97dfdf4f31d65f9e5648f10cd64736f6c634300060c0033", - "sourceMap": "3049:10323:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6981:42;;;-1:-1:-1;;;6981:42:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;3049:10323;7272:23;7298:16;:14;:16::i;:::-;7272:42;-1:-1:-1;;;;;;7332:31:2;;7324:66;;;;;-1:-1:-1;;;7324:66:2;;;;;;;;;;;;-1:-1:-1;;;7324:66:2;;;;;;;;;;;;;;;7669:14;7666:1;7663;7650:34;7989:1;7970;7938:14;7919:1;7886:15;7863:5;7833:171;8078:16;8075:1;8072;8057:38;8116:6;8183:66;;;;8298:16;8295:1;8288:27;8183:66;8218:16;8215:1;8208:27;2776:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2776:118:0;-1:-1:-1;;;;;2776:118:0;;:::i;:::-;;2403:119:3;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6264:108:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6264:108:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6264:108:2;;;;;;;;;;-1:-1:-1;6264:108:2;;-1:-1:-1;6264:108:2;-1:-1:-1;6264:108:2;:::i;2201:87:0:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5225:195:2;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;5225:195:2;;;;;;;;;;;;;;10199:583;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10199:583:2;;;;;;;;;;;;;;;-1:-1:-1;;;10199:583:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10199:583:2;;;;;;;;;;;;-1:-1:-1;10199:583:2;-1:-1:-1;10199:583:2;;;;:::i;9422:543::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9422:543:2;;;;;;;;;;;;;;;-1:-1:-1;;;9422:543:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9422:543:2;;;;;;;;;;;;-1:-1:-1;9422:543:2;-1:-1:-1;9422:543:2;;;;:::i;2900:78:0:-;;;;;;;;;;;;;:::i;11681:1689:2:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11681:1689:2;;;;;;;;;;;;;;;-1:-1:-1;;;11681:1689:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11681:1689:2;;;;;;;;;;;;-1:-1:-1;11681:1689:2;-1:-1:-1;11681:1689:2;;;;:::i;4826:281::-;;;;;;;;;;;;;:::i;2656:114:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2656:114:0;-1:-1:-1;;;;;2656:114:0;;:::i;2541:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2541:109:0;-1:-1:-1;;;;;2541:109:0;;:::i;:::-;;;;;;;;;;;;;;;;;;3954:46:2;;;;;;;;;;;;;:::i;3895:52::-;;;;;;;;;;;;;:::i;8689:244::-;;;;;;;;;;;;;:::i;2984:78:0:-;;;;;;;;;;;;;:::i;5225:195:2:-;1261:66:3;5393:11:2;;5360:54::o;2776:118:0:-;2852:35;2868:18;2852:15;:35::i;:::-;2776:118;:::o;2403:119:3:-;2456:66;2403:119;:::o;6264:108:2:-;6333:32;;;-1:-1:-1;;;6333:32:2;;;;;;;;;;;;-1:-1:-1;;;6333:32:2;;;;;;;;;;;;;;2201:87:0;;;;;;;;;;;;;;;;;;;:::o;10199:583:2:-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;10360:22:2::1;10419:21;10442:4;;10448:8;10408:49;;;;;;-1:-1:-1::0;;;;;10408:49:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10385:82;;;;;;10360:107;;10536:22;10561:11;:27;10573:14;10561:27;;;;;;;;;;;;10536:52;;10623:1;10606:14;:18;10598:58;;;::::0;;-1:-1:-1;;;10598:58:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10673:11;:27;10685:14;10673:27;;;;;;;;;;;10666:34;;;10737:21;-1:-1:-1::0;;;;;10715:60:2::1;;10760:4;;10766:8;10715:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;10715:60:2::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;10715:60:2;;-1:-1:-1;;;;;10715:60:2::1;942:1:6;;10199:583:2::0;;;;:::o;9422:543::-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;9584:30:2::1;:17;-1:-1:-1::0;;;;;9584:28:2::1;;:30::i;:::-;9576:63;;;::::0;;-1:-1:-1;;;9576:63:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9576:63:2;;;;;;;;;;;;;::::1;;9650:22;9709:17;9728:4;;9734:8;9698:45;;;;;;-1:-1:-1::0;;;;;9698:45:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9675:78;;;;;;9650:103;;9764:22;9807:27;:25;:27::i;:::-;9789:15;:45;9764:70;;9875:14;9845:11;:27;9857:14;9845:27;;;;;;;;;;;:44;;;;9924:17;-1:-1:-1::0;;;;;9904:54:2::1;;9943:4;;9949:8;9904:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;9904:54:2::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;9904:54:2;;-1:-1:-1;;;;;9904:54:2::1;942:1:6;;9422:543:2::0;;;;:::o;2900:78:0:-;2952:19;:17;:19::i;:::-;2900:78::o;11681:1689:2:-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;6420:16:2::1;:14;:16::i;:::-;6412:53;;;::::0;;-1:-1:-1;;;6412:53:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6706:24:::2;:22;:24::i;:::-;6705:25;6697:53;;;::::0;;-1:-1:-1;;;6697:53:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;6697:53:2;;;;;;;;;;;;;::::2;;11858:22:::3;11917:17;11936:4;;11942:8;11906:45;;;;;;-1:-1:-1::0;;;;;11906:45:2::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11883:78;;;;;;11858:103;;11971:22;11996:11;:27;12008:14;11996:27;;;;;;;;;;;;11971:52;;12058:1;12041:14;:18;12033:58;;;::::0;;-1:-1:-1;;;12033:58:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;12109:30;:17;-1:-1:-1::0;;;;;12109:28:2::3;;:30::i;:::-;12101:63;;;::::0;;-1:-1:-1;;;12101:63:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;12101:63:2;;;;;;;;;;;;;::::3;;12304:15;12286:14;:33;;:85;;;-1:-1:-1::0;12367:3:2::3;12339:16;:14;:16::i;:::-;-1:-1:-1::0;;;;;12339:32:2::3;;12286:85;12265:155;;;::::0;;-1:-1:-1;;;12265:155:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;12431:36;12449:17;12431;:36::i;:::-;12547:12;12561:23;12588:17;-1:-1:-1::0;;;;;12588:43:2::3;12672:24;;;12698:4;;12649:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;::::3;::::0;;::::3;::::0;;::::3;-1:-1:-1::0;;12649:54:2;;::::3;::::0;;::::3;::::0;;::::3;::::0;;;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;12649:54:2::3;-1:-1:-1::0;;;;;;12649:54:2;;::::3;::::0;;;::::3;::::0;;12588:129;;;;12649:54;;12588:129;;-1:-1:-1;12588:129:2;;-1:-1:-1;12649:54:2;-1:-1:-1;12588:129:2;;-1:-1:-1;12588:129:2;;-1:-1:-1;12588:129:2;12649:54;12588:129:::3;;;;;;::::0;;;;-1:-1:-1;;12588:129:2;;;;::::3;::::0;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12546:171;;;;12735:7;12751:10;12727:36;;;;;-1:-1:-1::0;;;12727:36:2::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12991:37:2::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;12991:37:2::3;-1:-1:-1::0;;;12991:37:2::3;::::0;;12947:91;;;;-1:-1:-1;;;;;12947:30:2;::::3;::::0;:91;;;;12991:37;12947:91:::3;;;;;;::::0;;;;-1:-1:-1;;12947:91:2;;;;::::3;::::0;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12923:115:2;;-1:-1:-1;12923:115:2;-1:-1:-1;12923:115:2;13048:45:::3;;;::::0;;-1:-1:-1;;;13048:45:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;13123:10;13112:30;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;13112:30:2;13111:31:::3;13103:69;;;::::0;;-1:-1:-1;;;13103:69:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;13211:17;-1:-1:-1::0;;;;;13188:47:2::3;;13230:4;;13188:47;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;-1:-1:-1::0;;13188:47:2::3;::::0;;::::3;::::0;;::::3;::::0;-1:-1:-1;13188:47:2;;-1:-1:-1;;;;13188:47:2::3;13250:8;13246:118;;;13274:18;:16;:18::i;:::-;13311:42;::::0;-1:-1:-1;;;;;13311:42:2;::::3;::::0;::::3;::::0;;;::::3;13246:118;6760:1;;;;11681:1689:::0;;;;:::o;4826:281::-;2456:66:3;4984:11:2;;;3939:8;5024:25;;5023:55;;3939:8;5023:55;;;5053:5;5023:55;5015:63;;5088:12;4826:281;;:::o;2656:114:0:-;2730:33;2751:11;2730:20;:33::i;2541:109::-;2603:4;2626:17;2638:4;2626:11;:17::i;:::-;2619:24;2541:109;-1:-1:-1;;2541:109:0:o;3954:46:2:-;;;;;;;;;;;;;;-1:-1:-1;;;3954:46:2;;;;:::o;3895:52::-;3939:8;3895:52;:::o;8689:244::-;2135:66:3;8869:11:2;8911:14;;8689:244::o;2984:78:0:-;3036:19;:17;:19::i;4751:416:4:-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;4860:10:4::1;-1:-1:-1::0;;;;;4860:32:4;::::1;;;4852:65;;;::::0;;-1:-1:-1;;;4852:65:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4852:65:4;;;;;;;;;;;;;::::1;;4927:32;4962:19;:17;:19::i;:::-;4927:54;;4999:31;5011:18;4999:11;:31::i;:::-;4991:56;;;::::0;;-1:-1:-1;;;4991:56:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4991:56:4;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;5057:42:4;::::1;5102:5;5057:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;5057:50:4::1;::::0;;5122:38;;;;;;;::::1;::::0;;;;;;;;::::1;942:1:6;4751:416:4::0;:::o;2617:189::-;2684:4;2700:32;2735:19;:17;:19::i;:::-;-1:-1:-1;;;;;2771:28:4;;;;:22;:28;;;;;;;;-1:-1:-1;;2771:28:4;;;;;;;2617:189::o;943:190:7:-;1072:20;1118:8;;;943:190::o;4312:382:4:-;4441:32;4476:19;:17;:19::i;:::-;4527:21;;;;;;-1:-1:-1;;;;;;4527:21:4;4513:10;:35;4505:71;;;;;-1:-1:-1;;;4505:71:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;4612:29;4630:10;4612:17;:29::i;:::-;4651:21;;:36;;-1:-1:-1;;;;;;4651:36:4;;;4312:382::o;5557:564:2:-;5608:4;5624:23;5650:16;:14;:16::i;:::-;5624:42;-1:-1:-1;;;;;;5766:31:2;;5762:74;;5820:5;5813:12;;;;;5762:74;5974:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5974:37:2;-1:-1:-1;;;5974:37:2;;;5932:89;;;;5891:12;;5905:23;;-1:-1:-1;;;;;5932:28:2;;;5974:37;;5932:89;;;;;;5974:37;5932:89;;;;;;;;;;-1:-1:-1;;5932:89:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5890:131;;;;6039:7;6055:10;6031:36;;;;;-1:-1:-1;;;6031:36:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6095:10;6084:30;;;;;;;;;;;;;;;-1:-1:-1;6084:30:2;;-1:-1:-1;;;;5557:564:2;:::o;8417:186::-;1261:66:3;8556:31:2;8542:55::o;9006:147::-;9133:3;2135:66:3;9120:17:2;9106:41::o;3166:481:4:-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;3251:32:4::1;3286:19;:17;:19::i;:::-;3251:54:::0;-1:-1:-1;;;;;;3323:27:4;::::1;3315:51;;;::::0;;-1:-1:-1;;;3315:51:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3315:51:4;;;;;;;;;;;;;::::1;;3385:24;3397:11;3385;:24::i;:::-;3384:25;3376:54;;;::::0;;-1:-1:-1;;;3376:54:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3376:54:4;;;;;;;;;;;;;::::1;;3461:21;::::0;::::1;::::0;-1:-1:-1;;;;;3461:21:4::1;:37:::0;3440:107:::1;;;::::0;;-1:-1:-1;;;3440:107:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3557:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;3557:35:4;::::1;-1:-1:-1::0;;;;;;3557:35:4;;::::1;::::0;::::1;::::0;;;3607:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;942:1:6;3166:481:4::0;:::o;2880:280::-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;2943:32:4::1;2978:19;:17;:19::i;:::-;3011:21;::::0;::::1;::::0;2943:54;;-1:-1:-1;;;;;;3011:21:4::1;:37:::0;3007:147:::1;;3064:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;3064:36:4::1;::::0;;3119:24:::1;::::0;::::1;::::0;3096:3:::1;::::0;3119:24:::1;942:1:6;2880:280:4:o:0;2384:151:0:-;2445:28;2492:14;2507:20;;;;;;;;;;;;;;;;;2492:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2492:36:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2492:36:0;;;;;;;;;;;;;;;;-1:-1:-1;2492:36:0;;;;;;;;;;;2384:151;-1:-1:-1;;;2384:151:0:o;3972:334:4:-;4047:24;4059:11;4047;:24::i;:::-;4046:25;4038:54;;;;;-1:-1:-1;;;4038:54:4;;;;;;;;;;;;-1:-1:-1;;;4038:54:4;;;;;;;;;;;;;;;4102:32;4137:19;:17;:19::i;:::-;-1:-1:-1;;;;;4166:35:4;;:22;:35;;;;;;;;;;;;:42;;-1:-1:-1;;4166:42:4;4204:4;4166:42;;;4264:35;;;;;;;4102:54;;-1:-1:-1;4264:35:4;;;;;;;;;3972:334;;:::o", - "linkReferences": {} - }, - "methodIdentifiers": { - "MAX_UPGRADE_DELAY()": "d38d8d7a", - "PROXY_GOVERNANCE_TAG()": "56f36dbf", - "PROXY_VERSION()": "c5ab8453", - "UPGRADE_DELAY_SLOT()": "20cea94d", - "addImplementation(address,bytes,bool)": "5e3a97e7", - "getUpgradeActivationDelay()": "72a44f07", - "implementation()": "5c60da1b", - "initialize(bytes)": "439fab91", - "isNotFinalized()": "e907fa3c", - "proxyAcceptGovernance()": "6684b1d6", - "proxyCancelNomination()": "f9bcdde4", - "proxyIsGovernor(address)": "b449ea5d", - "proxyNominateNewGovernor(address)": "8757653f", - "proxyRemoveGovernor(address)": "12f16e6d", - "removeImplementation(address,bytes,bool)": "5cef2e86", - "upgradeTo(address,bytes,bool)": "7147855d" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"acceptedGovernor\",\"type\":\"address\"}],\"name\":\"LogNewGovernorAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nominatedGovernor\",\"type\":\"address\"}],\"name\":\"LogNominatedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogNominationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"removedGovernor\",\"type\":\"address\"}],\"name\":\"LogRemovedGovernor\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_GOVERNANCE_TAG\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyAcceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyCancelNomination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"proxyIsGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"proxyNominateNewGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governorForRemoval\",\"type\":\"address\"}],\"name\":\"proxyRemoveGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. It is the responsibility of the implementation not to overwrite any storage belonging to the proxy (`ProxyStorage`). In addition, upon upgrade, the new implementation is assumed to be backward compatible with previous implementations with respect to the storage used until that point.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/StarknetProxy.sol\":\"Proxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"src/ProxyGovernance.sol\":{\"keccak256\":\"0x66c2371736f00304c5d0fd7dfcaf103e107bca54c8c6fe97c8ec53fd7f2eabaa\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3db37caee5de205f66727b5e095cfe51eaec7a2a9ee3c3e0b8a0322cfddaac43\",\"dweb:/ipfs/QmSjTbcNXsWWMvCXCpNtHWkBqQChh8LSpNKJoEQi9oboTg\"]},\"src/ProxyStorage.sol\":{\"keccak256\":\"0x1e75667ccf910adfaa3e6e589a58e7814d1a50e257ec3e8cca853ad84bd69f28\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://45b2503a7b59aeff88f1596d150d2ec03cd6c032ea5801e7385ed9efac02782d\",\"dweb:/ipfs/QmVmqcTmrHAZUMbaKP4ZMiuAfNaCyY5kqbryCo3rA4y35f\"]},\"src/StarknetProxy.sol\":{\"keccak256\":\"0x2bb2d0507e32a2e888c25dd643f4087a03718814fd7c2ca390a2c485f50b7eb9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://d44d033555d0e5bc926c923917dd6e77664c9b8e89c1e3f7d4e0786e607959f1\",\"dweb:/ipfs/QmSC96zSRZwMnqj9AYXMu2VbWkGhbgAhFGZPNpWVXqGdfR\"]},\"src/StorageSlots.sol\":{\"keccak256\":\"0xf8f590c04aa81b474d56d5ed8fcc5ae387c3fa1a9cfe1c347d1536c187da25d7\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://771deb6f5163f75ab295394fdf9c46943366820ed8c54d40487cf8184d78dfb0\",\"dweb:/ipfs/QmRJCiF8bA2WWYSaDUD4SAuSMaTcX6iozGHP9M2Uui6D3u\"]},\"src/components/Governance.sol\":{\"keccak256\":\"0x514f1fc43753d81ad161ea40e29b676d6d1e8863cdc3c42f34579c206ad0120a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b7f15635d973071aa069ff8023e52caa01e88f70254f0ce4dc07a337c6a5fb65\",\"dweb:/ipfs/QmTigzrPzger7oahtgYH4LUsaMfYTqyV6hdHrCZGzuyqn3\"]},\"src/components/GovernanceStorage.sol\":{\"keccak256\":\"0x7f168364dab1e83f078ed006a647c3591b2e2761ea46c44e78b2b46aee842ae2\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://54612af81c5787f7fb049dd57959466d9ffefdff832ff98c6e3fc5b6323d4c56\",\"dweb:/ipfs/QmRsjRpkLUbL2AjfQCpE3PgYXiMcnHDSRrKkThWF4H9FFT\"]},\"src/interfaces/MGovernance.sol\":{\"keccak256\":\"0x1ca5c0ee213f697063345d82d515ccb2abb8d4e9384979246b47d9781f41f84c\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4dcf13fc113e1d8c1a068949553c82042241734e4dbab5ca9e3c0ff39879ff17\",\"dweb:/ipfs/QmXNTXALNH47BLPj6YjUgsZ9Qo3HpKbtmDNsPJCZZ782hV\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.6.12+commit.27d51765" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "upgradeActivationDelay", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "FinalizedImplementation", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes", - "name": "initializer", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bool", - "name": "finalize", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "ImplementationAdded", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes", - "name": "initializer", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bool", - "name": "finalize", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "ImplementationRemoved", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes", - "name": "initializer", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ImplementationUpgraded", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "acceptedGovernor", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogNewGovernorAccepted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "nominatedGovernor", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogNominatedGovernor", - "anonymous": false - }, - { - "inputs": [], - "type": "event", - "name": "LogNominationCancelled", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "removedGovernor", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LogRemovedGovernor", - "anonymous": false - }, - { "inputs": [], "stateMutability": "payable", "type": "fallback" }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "MAX_UPGRADE_DELAY", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "PROXY_GOVERNANCE_TAG", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "PROXY_VERSION", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "UPGRADE_DELAY_SLOT", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "finalize", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addImplementation" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getUpgradeActivationDelay", - "outputs": [ - { "internalType": "uint256", "name": "delay", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ] - }, - { - "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], - "stateMutability": "pure", - "type": "function", - "name": "initialize" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isNotFinalized", - "outputs": [ - { "internalType": "bool", "name": "notFinal", "type": "bool" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "proxyAcceptGovernance" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "proxyCancelNomination" - }, - { - "inputs": [ - { "internalType": "address", "name": "user", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "proxyIsGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "proxyNominateNewGovernor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "proxyRemoveGovernor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "removedImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "finalize", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeImplementation" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "finalize", "type": "bool" } - ], - "stateMutability": "payable", - "type": "function", - "name": "upgradeTo" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "cairo-lang/=lib/cairo-lang/src/", - "forge-std/=lib/forge-std/src/", - "starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/", - "starknet-token/=lib/starknet-token/src/starkware/isd/", - "starkware/isd/=lib/starknet-token/src/starkware/isd/", - "starkware/solidity/=lib/cairo-lang/src/starkware/solidity/", - "starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "src/StarknetProxy.sol": "Proxy" }, - "evmVersion": "istanbul", - "libraries": {} - }, - "sources": { - "src/ProxyGovernance.sol": { - "keccak256": "0x66c2371736f00304c5d0fd7dfcaf103e107bca54c8c6fe97c8ec53fd7f2eabaa", - "urls": [ - "bzz-raw://3db37caee5de205f66727b5e095cfe51eaec7a2a9ee3c3e0b8a0322cfddaac43", - "dweb:/ipfs/QmSjTbcNXsWWMvCXCpNtHWkBqQChh8LSpNKJoEQi9oboTg" - ], - "license": "Apache-2.0." - }, - "src/ProxyStorage.sol": { - "keccak256": "0x1e75667ccf910adfaa3e6e589a58e7814d1a50e257ec3e8cca853ad84bd69f28", - "urls": [ - "bzz-raw://45b2503a7b59aeff88f1596d150d2ec03cd6c032ea5801e7385ed9efac02782d", - "dweb:/ipfs/QmVmqcTmrHAZUMbaKP4ZMiuAfNaCyY5kqbryCo3rA4y35f" - ], - "license": "Apache-2.0." - }, - "src/StarknetProxy.sol": { - "keccak256": "0x2bb2d0507e32a2e888c25dd643f4087a03718814fd7c2ca390a2c485f50b7eb9", - "urls": [ - "bzz-raw://d44d033555d0e5bc926c923917dd6e77664c9b8e89c1e3f7d4e0786e607959f1", - "dweb:/ipfs/QmSC96zSRZwMnqj9AYXMu2VbWkGhbgAhFGZPNpWVXqGdfR" - ], - "license": "Apache-2.0." - }, - "src/StorageSlots.sol": { - "keccak256": "0xf8f590c04aa81b474d56d5ed8fcc5ae387c3fa1a9cfe1c347d1536c187da25d7", - "urls": [ - "bzz-raw://771deb6f5163f75ab295394fdf9c46943366820ed8c54d40487cf8184d78dfb0", - "dweb:/ipfs/QmRJCiF8bA2WWYSaDUD4SAuSMaTcX6iozGHP9M2Uui6D3u" - ], - "license": "Apache-2.0." - }, - "src/components/Governance.sol": { - "keccak256": "0x514f1fc43753d81ad161ea40e29b676d6d1e8863cdc3c42f34579c206ad0120a", - "urls": [ - "bzz-raw://b7f15635d973071aa069ff8023e52caa01e88f70254f0ce4dc07a337c6a5fb65", - "dweb:/ipfs/QmTigzrPzger7oahtgYH4LUsaMfYTqyV6hdHrCZGzuyqn3" - ], - "license": "Apache-2.0." - }, - "src/components/GovernanceStorage.sol": { - "keccak256": "0x7f168364dab1e83f078ed006a647c3591b2e2761ea46c44e78b2b46aee842ae2", - "urls": [ - "bzz-raw://54612af81c5787f7fb049dd57959466d9ffefdff832ff98c6e3fc5b6323d4c56", - "dweb:/ipfs/QmRsjRpkLUbL2AjfQCpE3PgYXiMcnHDSRrKkThWF4H9FFT" - ], - "license": "Apache-2.0." - }, - "src/interfaces/MGovernance.sol": { - "keccak256": "0x1ca5c0ee213f697063345d82d515ccb2abb8d4e9384979246b47d9781f41f84c", - "urls": [ - "bzz-raw://4dcf13fc113e1d8c1a068949553c82042241734e4dbab5ca9e3c0ff39879ff17", - "dweb:/ipfs/QmXNTXALNH47BLPj6YjUgsZ9Qo3HpKbtmDNsPJCZZ782hV" - ], - "license": "Apache-2.0." - }, - "src/libraries/Addresses.sol": { - "keccak256": "0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16", - "urls": [ - "bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a", - "dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR" - ], - "license": "Apache-2.0." - } - }, - "version": 1 - }, - "id": 2 -} diff --git a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json deleted file mode 100644 index 7a3ba41..0000000 --- a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json +++ /dev/null @@ -1,1176 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { - "name": "upgradeActivationDelay", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { "type": "fallback", "stateMutability": "payable" }, - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "ENABLE_WINDOW_DURATION_SLOT", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_UPGRADE_DELAY", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PROXY_VERSION", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "UPGRADE_DELAY_SLOT", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addImplementation", - "inputs": [ - { - "name": "newImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "finalize", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getEnableWindowDuration", - "inputs": [], - "outputs": [ - { "name": "duration", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getUpgradeActivationDelay", - "inputs": [], - "outputs": [ - { "name": "delay", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "implementation", - "inputs": [], - "outputs": [ - { - "name": "_implementation", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "isAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isNotFinalized", - "inputs": [], - "outputs": [ - { "name": "notFinal", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeImplementation", - "inputs": [ - { - "name": "removedImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "finalize", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "upgradeTo", - "inputs": [ - { - "name": "newImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "finalize", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "event", - "name": "FinalizedImplementation", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ImplementationAdded", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "initializer", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "finalize", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ImplementationRemoved", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "initializer", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "finalize", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ImplementationUpgraded", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "initializer", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60a060405234801562000010575f80fd5b5060405162002631380380620026318339810160408190526200003391620005ad565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b50620005c5565b33620000ad8180620000b0565b50565b620000ba6200020f565b1562000152576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff166200014c5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b6200015d565b6200015d8262000260565b6200016762000400565b1562000204576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620002005760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840162000143565b5050565b62000200816200044f565b5f80516020620025518339815191525f9081525f80516020620025b18339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200027a5f805160206200255183398151915282620004b8565b620002a57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de0606882620004b8565b620002bf5f80516020620025d183398151915282620004b8565b620002d95f80516020620025f183398151915282620004b8565b620002f35f805160206200261183398151915282620004b8565b6200030d5f805160206200259183398151915282620004b8565b620003467ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620025d183398151915262000556565b6200036e5f80516020620025d18339815191525f805160206200255183398151915262000556565b620003885f80516020620025518339815191528062000556565b620003b05f80516020620025f18339815191525f80516020620025d183398151915262000556565b620003d85f80516020620026118339815191525f80516020620025d183398151915262000556565b620000ad5f80516020620025918339815191525f805160206200255183398151915262000556565b5f80516020620025718339815191525f9081525f80516020620025b18339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c2454819062000259565b620004695f80516020620025718339815191528062000556565b620004a37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200257183398151915262000556565b620000ad5f8051602062002571833981519152825b5f8281525f80516020620025b1833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000200575f8281525f80516020620025b1833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620025b18339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f60208284031215620005be575f80fd5b5051919050565b608051611f73620005de5f395f6108e80152611f735ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f1e8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b30565b6107f7565b348015610320575f80fd5b506102f461032f366004611b30565b610824565b34801561033f575f80fd5b506102f461034e366004611b30565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b30565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b49565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b30565b610960565b348015610401575f80fd5b506102f4610410366004611bb8565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b30565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f1e833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c04565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c04565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b30565b610ca4565b348015610512575f80fd5b50610467610521366004611b30565b610cce565b348015610531575f80fd5b50610467610540366004611b30565b610cf9565b348015610550575f80fd5b506102f461055f366004611b30565b610d24565b6102f4610572366004611c04565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b30565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b30565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b30565b611392565b3480156105f3575f80fd5b506102f4610602366004611b30565b6113bd565b348015610612575f80fd5b50610467610621366004611b30565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611c88565b34801561066e575f80fd5b5061046761067d366004611b30565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b30565b611417565b3480156106ac575f80fd5b506104676106bb366004611b30565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b30565b61146b565b348015610700575f80fd5b506102f461070f366004611b30565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b30565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b30565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b30565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b30565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261157c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261157c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261157c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611cba565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115b1565b5050565b5f80516020611ede8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb82826115e1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261157c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361165b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611cea565b5f84848484604051602001610a389493929190611d41565b6040516020818303038152906040528051906020012090505f610a59611691565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf611691565b5f8381526020919091526040812055610ad66116cc565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611d78565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611cea565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d41565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611db1565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611db1565b905081610c2b611691565b5f858152602091909152604090205580610c436116cc565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611d78565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261157c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361165b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361165b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261157c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611cea565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611703565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d41565b6040516020818303038152906040528051906020012090505f610e62611691565b5f83815260209190915260408120549150610e7b6116cc565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f1e8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f1e83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dc4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611ddf565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611c88565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611ddf565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611dfa565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb611691565b5f86815260209190915260408120556112126116cc565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dc4565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361165b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611cba565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115b1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361165b565b6108215f80516020611ede8339815191528261157c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361165b565b5f6109f55f80516020611ede8339815191528361165b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261157c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361165b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115b1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115b1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115b1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611cba565b6108cb5f80516020611ede833981519152836115b1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115b1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115b1565b5f8281525f80516020611efe83398151915260205260409020600101546115a2816117f2565b6115ac83836117fc565b505050565b5f8281525f80516020611efe83398151915260205260409020600101546115d7816117f2565b6115ac8383611870565b6001600160a01b03811633146116515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611870565b5f9182525f80516020611efe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116c76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b8152506118e2565b905090565b5f6116c76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b8152506118e2565b5f8061171a5f80516020611f1e8339815191525490565b90506001600160a01b038116611731575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161177391611ddf565b5f60405180830381855af49150503d805f81146117ab576040519150601f19603f3d011682016040523d82523d5f602084013e6117b0565b606091505b50915091508181906117d55760405162461bcd60e51b81526004016102669190611c88565b50808060200190518101906117ea9190611dfa565b935050505090565b6108218133611914565b611806828261165b565b6108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61187a828261165b565b156108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016118f59190611ddf565b60408051601f1981840301815291905280516020909101209392505050565b61191e828261165b565b6108cb57611936816001600160a01b03166014611978565b611941836020611978565b604051602001611952929190611e15565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611c88565b60605f611986836002611e89565b611991906002611db1565b67ffffffffffffffff8111156119a9576119a9611ea0565b6040519080825280601f01601f1916602001820160405280156119d3576020820181803683370190505b509050600360fc1b815f815181106119ed576119ed611eb4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a1b57611a1b611eb4565b60200101906001600160f81b03191690815f1a9053505f611a3d846002611e89565b611a48906001611db1565b90505b6001811115611abf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7c57611a7c611eb4565b1a60f81b828281518110611a9257611a92611eb4565b60200101906001600160f81b03191690815f1a90535060049490941c93611ab881611ec8565b9050611a4b565b508315611b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b80356001600160a01b0381168114611b2b575f80fd5b919050565b5f60208284031215611b40575f80fd5b611b0e82611b15565b5f8060408385031215611b5a575f80fd5b82359150611b6a60208401611b15565b90509250929050565b5f8083601f840112611b83575f80fd5b50813567ffffffffffffffff811115611b9a575f80fd5b602083019150836020828501011115611bb1575f80fd5b9250929050565b5f8060208385031215611bc9575f80fd5b823567ffffffffffffffff811115611bdf575f80fd5b611beb85828601611b73565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c17575f80fd5b611c2085611b15565b9350602085013567ffffffffffffffff811115611c3b575f80fd5b611c4787828801611b73565b9094509250506040850135611c5b81611bf7565b939692955090935050565b5f5b83811015611c80578181015183820152602001611c68565b50505f910152565b602081525f8251806020840152611ca6816040850160208701611c66565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d659083018587611d19565b9050821515604083015295945050505050565b604081525f611d8b604083018587611d19565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611d9d565b602081525f611dd7602083018486611d19565b949350505050565b5f8251611df0818460208701611c66565b9190910192915050565b5f60208284031215611e0a575f80fd5b8151611b0e81611bf7565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e4c816017850160208801611c66565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611e7d816028840160208801611c66565b01602801949350505050565b80820281158282048414176109f5576109f5611d9d565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611ed657611ed6611d9d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a26469706673582212201ac84a54ca884fecbcbc7b2c5945c83ee2e3b251730028617aa81a9286b3229364736f6c6343000818003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b30251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e", - "sourceMap": "2986:11128:11:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:6;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:11::1;4015:22:::0;2455:66:8;4416:28:11;4273:187;3989:49:::1;4048:32;4072:7;2810:66:8::0;5407:31:11;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3102:142:7;3916:10:3;3201:36:7;3916:10:3;;3201::7;:36::i;:::-;3133:111;3102:142::o;3250:1072::-;3373:28;:26;:28::i;:::-;3369:485;;;-1:-1:-1;;;;;5259:31:3;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3628:144:7;;;;-1:-1:-1;;;3628:144:7;;405:2:13;3628:144:7;;;387:21:13;444:2;424:18;;;417:30;483:27;463:18;;;456:55;528:18;;3628:144:7;;;;;;;;;3369:485;;;3803:40;3823:19;3803;:40::i;:::-;3868:26;:24;:26::i;:::-;3864:452;;;-1:-1:-1;;;;;5259:31:3;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4085:151:7;;;;-1:-1:-1;;;4085:151:7;;759:2:13;4085:151:7;;;741:21:13;798:2;778:18;;;771:30;837:34;817:18;;;810:62;-1:-1:-1;;;888:18:13;;;881:32;930:19;;4085:151:7;557:398:13;4085:151:7;3250:1072;;:::o;3864:452::-;4267:38;4285:19;4267:17;:38::i;2790:152::-;-1:-1:-1;;;;;;;;;;;2851:4:7;6680:14:3;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;:24;;2851:4:7;;2874:44;:61;;2867:68;;2790:152;:::o;4614:906::-;4690:63;-1:-1:-1;;;;;;;;;;;4733:19:7;4690:24;:63::i;:::-;4763:59;822:64;4802:19;4763:24;:59::i;:::-;4832:61;-1:-1:-1;;;;;;;;;;;4873:19:7;4832:24;:61::i;:::-;4903:55;-1:-1:-1;;;;;;;;;;;4938:19:7;4903:24;:55::i;:::-;4968:58;-1:-1:-1;;;;;;;;;;;5006:19:7;4968:24;:58::i;:::-;5036:63;-1:-1:-1;;;;;;;;;;;5079:19:7;5036:24;:63::i;:::-;5110:57;822:64;-1:-1:-1;;;;;;;;;;;5110:27:7;:57::i;:::-;5177:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5177:27:7;:61::i;:::-;5248:63;-1:-1:-1;;;;;;;;;;;1236:66:7;5248:27;:63::i;:::-;5321:53;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5321:27:7;:53::i;:::-;5384:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5384:27:7;:56::i;:::-;5450:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5450:27:7;:63::i;2948:148::-;-1:-1:-1;;;;;;;;;;;3007:4:7;6680:14:3;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;:24;;3007:4:7;;3030:42;6595:116:3;4328:280:7;4402:59;-1:-1:-1;;;;;;;;;;;1636:66:7;4402:27;:59::i;:::-;4471;1842:66;-1:-1:-1;;;;;;;;;;;4471:27:7;:59::i;:::-;4540:61;-1:-1:-1;;;;;;;;;;;4581:19:7;9592:227:3;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:3;;;;;;;;-1:-1:-1;;;;;5259:31:3;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:3;;;;;;;;-1:-1:-1;;;;;9705:31:3;;;;;;;;;;:38;;-1:-1:-1;;9705:38:3;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:13:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:13;;14:184;-1:-1:-1;14:184:13:o;557:398::-;2986:11128:11;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f1e8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b30565b6107f7565b348015610320575f80fd5b506102f461032f366004611b30565b610824565b34801561033f575f80fd5b506102f461034e366004611b30565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b30565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b49565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b30565b610960565b348015610401575f80fd5b506102f4610410366004611bb8565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b30565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f1e833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c04565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c04565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b30565b610ca4565b348015610512575f80fd5b50610467610521366004611b30565b610cce565b348015610531575f80fd5b50610467610540366004611b30565b610cf9565b348015610550575f80fd5b506102f461055f366004611b30565b610d24565b6102f4610572366004611c04565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b30565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b30565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b30565b611392565b3480156105f3575f80fd5b506102f4610602366004611b30565b6113bd565b348015610612575f80fd5b50610467610621366004611b30565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611c88565b34801561066e575f80fd5b5061046761067d366004611b30565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b30565b611417565b3480156106ac575f80fd5b506104676106bb366004611b30565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b30565b61146b565b348015610700575f80fd5b506102f461070f366004611b30565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b30565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b30565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b30565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b30565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261157c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261157c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261157c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611cba565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115b1565b5050565b5f80516020611ede8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb82826115e1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261157c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361165b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611cea565b5f84848484604051602001610a389493929190611d41565b6040516020818303038152906040528051906020012090505f610a59611691565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf611691565b5f8381526020919091526040812055610ad66116cc565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611d78565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611cea565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d41565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611db1565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611db1565b905081610c2b611691565b5f858152602091909152604090205580610c436116cc565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611d78565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261157c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361165b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361165b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261157c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611cea565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611703565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d41565b6040516020818303038152906040528051906020012090505f610e62611691565b5f83815260209190915260408120549150610e7b6116cc565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f1e8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f1e83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dc4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611ddf565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611c88565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611ddf565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611dfa565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb611691565b5f86815260209190915260408120556112126116cc565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dc4565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361165b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611cba565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115b1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361165b565b6108215f80516020611ede8339815191528261157c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361165b565b5f6109f55f80516020611ede8339815191528361165b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261157c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361165b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115b1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115b1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115b1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611cba565b6108cb5f80516020611ede833981519152836115b1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115b1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115b1565b5f8281525f80516020611efe83398151915260205260409020600101546115a2816117f2565b6115ac83836117fc565b505050565b5f8281525f80516020611efe83398151915260205260409020600101546115d7816117f2565b6115ac8383611870565b6001600160a01b03811633146116515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611870565b5f9182525f80516020611efe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116c76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b8152506118e2565b905090565b5f6116c76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b8152506118e2565b5f8061171a5f80516020611f1e8339815191525490565b90506001600160a01b038116611731575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161177391611ddf565b5f60405180830381855af49150503d805f81146117ab576040519150601f19603f3d011682016040523d82523d5f602084013e6117b0565b606091505b50915091508181906117d55760405162461bcd60e51b81526004016102669190611c88565b50808060200190518101906117ea9190611dfa565b935050505090565b6108218133611914565b611806828261165b565b6108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61187a828261165b565b156108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016118f59190611ddf565b60408051601f1981840301815291905280516020909101209392505050565b61191e828261165b565b6108cb57611936816001600160a01b03166014611978565b611941836020611978565b604051602001611952929190611e15565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611c88565b60605f611986836002611e89565b611991906002611db1565b67ffffffffffffffff8111156119a9576119a9611ea0565b6040519080825280601f01601f1916602001820160405280156119d3576020820181803683370190505b509050600360fc1b815f815181106119ed576119ed611eb4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a1b57611a1b611eb4565b60200101906001600160f81b03191690815f1a9053505f611a3d846002611e89565b611a48906001611db1565b90505b6001811115611abf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7c57611a7c611eb4565b1a60f81b828281518110611a9257611a92611eb4565b60200101906001600160f81b03191690815f1a90535060049490941c93611ab881611ec8565b9050611a4b565b508315611b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b80356001600160a01b0381168114611b2b575f80fd5b919050565b5f60208284031215611b40575f80fd5b611b0e82611b15565b5f8060408385031215611b5a575f80fd5b82359150611b6a60208401611b15565b90509250929050565b5f8083601f840112611b83575f80fd5b50813567ffffffffffffffff811115611b9a575f80fd5b602083019150836020828501011115611bb1575f80fd5b9250929050565b5f8060208385031215611bc9575f80fd5b823567ffffffffffffffff811115611bdf575f80fd5b611beb85828601611b73565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c17575f80fd5b611c2085611b15565b9350602085013567ffffffffffffffff811115611c3b575f80fd5b611c4787828801611b73565b9094509250506040850135611c5b81611bf7565b939692955090935050565b5f5b83811015611c80578181015183820152602001611c68565b50505f910152565b602081525f8251806020840152611ca6816040850160208701611c66565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d659083018587611d19565b9050821515604083015295945050505050565b604081525f611d8b604083018587611d19565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611d9d565b602081525f611dd7602083018486611d19565b949350505050565b5f8251611df0818460208701611c66565b9190910192915050565b5f60208284031215611e0a575f80fd5b8151611b0e81611bf7565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e4c816017850160208801611c66565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611e7d816028840160208801611c66565b01602801949350505050565b80820281158282048414176109f5576109f5611d9d565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611ed657611ed6611d9d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a26469706673582212201ac84a54ca884fecbcbc7b2c5945c83ee2e3b251730028617aa81a9286b3229364736f6c63430008180033", - "sourceMap": "2986:11128:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:11;;216:2:13;7342:42:11;;;198:21:13;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:11;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:11;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:11;;7685:66;;;;-1:-1:-1;;;7685:66:11;;577:2:13;7685:66:11;;;559:21:13;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:13;;;628:52;697:18;;7685:66:11;375:346:13;7685:66:11;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:6;;;;;;;;;;-1:-1:-1;3988:116:6;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:6;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:6;;;;;:::i;:::-;;:::i;2402:119:8:-;;;;;;;;;;-1:-1:-1;2402:119:8;2455:66;2402:119;;;;;1241:25:13;;;1229:2;1214:18;2402:119:8;;;;;;;;4385:137:6;;;;;;;;;;-1:-1:-1;4385:137:6;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:6;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:6;;;;;:::i;:::-;;:::i;6611:122:11:-;;;;;;;;;;-1:-1:-1;6611:122:11;;;;;:::i;:::-;;:::i;2748:128:8:-;;;;;;;;;;-1:-1:-1;2748:128:8;2810:66;2748:128;;2064:135:6;;;;;;;;;;-1:-1:-1;2064:135:6;;;;;:::i;:::-;;:::i;:::-;;;2467:14:13;;2460:22;2442:41;;2430:2;2415:18;2064:135:6;2302:187:13;5572:195:11;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:11;5572:195;;-1:-1:-1;;;;;2658:32:13;;;2640:51;;2628:2;2613:18;5572:195:11;2494:203:13;10655:619:11;;;;;;;;;;-1:-1:-1;10655:619:11;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:11;;;;;:::i;:::-;;:::i;3732:122:6:-;;;;;;;;;;-1:-1:-1;3732:122:6;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:6;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:6;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:6;;;;;:::i;:::-;;:::i;12173:1939:11:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:6:-;;;;;;;;;;-1:-1:-1;2777:139:6;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:6;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:6;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:6;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:6;;;;;:::i;:::-;;:::i;3799:46:11:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:11;;;;;;;;;;;;:::i;2349:143:6:-;;;;;;;;;;-1:-1:-1;2349:143:6;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:6;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:6;;;;;:::i;:::-;;:::i;3740:52:11:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:6;;;;;;;;;;-1:-1:-1;4936:121:6;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:6;;;;;:::i;:::-;;:::i;5050:198:11:-;;;;;;;;;;-1:-1:-1;2810:66:8;5221:11:11;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:8;9196:11:11;9238:14;9016:244;;5184:125:6;;;;;;;;;;-1:-1:-1;5184:125:6;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:6;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:6;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:6;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2042:66:7;4089:7:6;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1842:66:7;3967:7:6;3927:23;:48::i;3356:121::-;3422:48;1026:66:7;3462:7:6;3422:23;:48::i;4385:137::-;4447:7;3916:10:3;-1:-1:-1;;;;;1931:37:6;;;1910:106;;;;-1:-1:-1;;;1910:106:6;;;;;;;:::i;:::-;4466:49:::1;1026:66:7;4507:7:6::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:6;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:6;;4833:2:13;5474:42:6;;;4815:21:13;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:6;4631:356:13;5409:118:6;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1430:66:7;3711:7:6;3677:23;:42::i;6611:122:11:-;6694:32;;-1:-1:-1;;;6694:32:11;;5194:2:13;6694:32:11;;;5176:21:13;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:13;;;5245:52;5314:18;;6694:32:11;4992:346:13;2064:135:6;2125:4;2148:44;822:64:7;2184:7:6;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:6:o;10655:619:11:-;1750:45:6;3916:10:3;3061:143:6;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:6;;;;;;;:::i;:::-;10821:22:11::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:11;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:11;;6593:2:13;11039:58:11::1;::::0;::::1;6575:21:13::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:11::1;6391:351:13::0;11039:58:11::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:11::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:6;3916:10:3;3061:143:6;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:11;::::1;1072:20:12::0;9908:63:11::1;;;::::0;-1:-1:-1;;;9908:63:11;;7279:2:13;9908:63:11::1;::::0;::::1;7261:21:13::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:13;;;7330:50;7397:18;;9908:63:11::1;7077:344:13::0;9908:63:11::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:8::0;5221:11:11;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:11::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:6:-;3799:48;1636:66:7;3839:7:6;3799:23;:48::i;3061:143::-;3126:4;3149:48;2252:66:7;3189:7:6;3149:21;:48::i;2498:128::-;2556:4;2579:40;1430:66:7;2611:7:6;2579:21;:40::i;4110:126::-;4179:50;2252:66:7;4221:7:6;4179:23;:50::i;12173:1939:11:-;1750:45:6;3916:10:3;3061:143:6;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:6;;;;;;;:::i;:::-;2134:66:8;9196:11:11;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:11;;7890:2:13;6773:53:11::1;::::0;::::1;7872:21:13::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:11::1;7688:348:13::0;6773:53:11::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:11;;8243:2:13;7058:53:11::2;::::0;::::2;8225:21:13::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:13;;;8294:45;8356:18;;7058:53:11::2;8041:339:13::0;7058:53:11::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:11::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:11;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:11;;6593:2:13;12581:58:11::3;::::0;::::3;6575:21:13::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:11::3;6391:351:13::0;12581:58:11::3;-1:-1:-1::0;;;;;12657:28:11;::::3;1072:20:12::0;12649:63:11::3;;;::::0;-1:-1:-1;;;12649:63:11;;7279:2:13;12649:63:11::3;::::0;::::3;7261:21:13::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:13;;;7330:50;7397:18;;12649:63:11::3;7077:344:13::0;12649:63:11::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:11::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:11;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:11::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:11;;8587:2:13;12813:139:11::3;::::0;::::3;8569:21:13::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:11::3;8385:347:13::0;12813:139:11::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:11;;8939:2:13;12962:72:11::3;::::0;::::3;8921:21:13::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:13;;;8990:52;9059:18;;12962:72:11::3;8737:346:13::0;12962:72:11::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:11;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:11::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:11;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:11::3;-1:-1:-1::0;;;;;;13246:54:11;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:11::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:11::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:11::3;-1:-1:-1::0;;;13584:37:11::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:11;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:11;;-1:-1:-1;13516:115:11;-1:-1:-1;13516:115:11;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:11;;9831:2:13;13641:45:11::3;::::0;::::3;9813:21:13::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:11::3;9629:349:13::0;13641:45:11::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:11;;10435:2:13;13696:69:11::3;::::0;::::3;10417:21:13::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:11::3;10233:349:13::0;13696:69:11::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:11::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:8;9447:17:11;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:11;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:8;4921:11:11;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:6:-;2840:4;2863:46;1842:66:7;2901:7:6;2863:21;:46::i;4792:138::-;4855:7;3916:10:3;-1:-1:-1;;;;;1931:37:6;;;1910:106;;;;-1:-1:-1;;;1910:106:6;;;;;;;:::i;:::-;4874:49:::1;1636:66:7;4915:7:6::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1026:66:7;2328:7:6;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:6;3552:23;:50::i;2922:133::-;2982:4;3005:43;2042:66:7;3040:7:6;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:6;2437:21;:48::i;3232:118::-;3297:46;822:64:7;3335:7:6;3297:23;:46::i;2632:139::-;2695:4;2718:46;1636:66:7;2756:7:6;2718:21;:46::i;4936:121::-;5001:49;1842:66:7;5042:7:6;5001:24;:49::i;4262:117::-;4325:47;822:64:7;4364:7:6;4325:24;:47::i;5184:125::-;5251:51;2252:66:7;5294:7:6;5251:24;:51::i;4528:142::-;4593:7;3916:10:3;-1:-1:-1;;;;;1931:37:6;;;1910:106;;;;-1:-1:-1;;;1910:106:6;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:6;4612:24:::1;:51::i;5063:115::-:0;5125:46;2042:66:7;5163:7:6;5125:24;:46::i;4676:110::-;4736:43;1430:66:7;4771:7:6;4736:24;:43::i;6990:152:3:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:3;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:3;;10789:2:13;8150:117:3;;;10771:21:13;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:13;;;10911:45;10973:19;;8150:117:3;10587:411:13;8150:117:3;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:3;;;;;;;;-1:-1:-1;;;;;5259:31:3;;;;;;;;;;;;;;;5143:154::o;1160:189:5:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:5;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:5;;;1700:36;:55::i;5904:564:11:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:11;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:11;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:11;-1:-1:-1;;;6321:37:11;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:11;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:11;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:3:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:3;;;;;;;;-1:-1:-1;;;;;9705:31:3;;;;;;;;;;:38;;-1:-1:-1;;9705:38:3;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:3;;;;;;;;-1:-1:-1;;;;;10091:31:3;;;;;;;;;;:39;;-1:-1:-1;;10091:39:3;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:4:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:4;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:4:o;5941:484:3:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:3;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:3;;;;;;;;;;-1:-1:-1;;;6059:349:3;;;;;;;:::i;2248:441:9:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:9;;2348:47;;-1:-1:-1;;;2405:6:9;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:9;;;;;;;;;-1:-1:-1;;;2430:6:9;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:9;;;;;;;;-1:-1:-1;2460:9:9;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:9;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:9;;;;;;;;-1:-1:-1;2575:1:9;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:9;;2596:55;;;;-1:-1:-1;;;2596:55:9;;12894:2:13;2596:55:9;;;12876:21:13;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:9;12692:356:13;2596:55:9;2675:6;2248:441;-1:-1:-1;;;2248:441:9:o;726:173:13:-;794:20;;-1:-1:-1;;;;;843:31:13;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:13;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:13;-1:-1:-1;;;;1888:409:13:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:13;-1:-1:-1;;3366:2:13;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:13;;-1:-1:-1;;2825:612:13:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:13;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:13;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:13:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:13;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:13;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:13;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:13;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:13;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:13;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:13:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:13:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:13;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:13:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:13;;12551:136::o", - "linkReferences": {}, - "immutableReferences": { "856": [{ "start": 2280, "length": 32 }] } - }, - "methodIdentifiers": { - "ENABLE_WINDOW_DURATION_SLOT()": "52b1e35e", - "MAX_UPGRADE_DELAY()": "d38d8d7a", - "PROXY_VERSION()": "c5ab8453", - "UPGRADE_DELAY_SLOT()": "20cea94d", - "addImplementation(address,bytes,bool)": "5e3a97e7", - "getEnableWindowDuration()": "e02904c6", - "getUpgradeActivationDelay()": "72a44f07", - "implementation()": "5c60da1b", - "initialize(bytes)": "439fab91", - "isAppGovernor(address)": "5a5d1bb9", - "isAppRoleAdmin(address)": "8e5224ff", - "isGovernanceAdmin(address)": "cb1cccce", - "isNotFinalized()": "e907fa3c", - "isOperator(address)": "6d70f7ae", - "isSecurityAdmin(address)": "d08fb6cb", - "isSecurityAgent(address)": "757bd9ab", - "isTokenAdmin(address)": "a2bdde3d", - "isUpgradeGovernor(address)": "6c04d9d5", - "registerAppGovernor(address)": "cdd1f70d", - "registerAppRoleAdmin(address)": "17896383", - "registerGovernanceAdmin(address)": "9463629a", - "registerOperator(address)": "3682a450", - "registerSecurityAdmin(address)": "62a14376", - "registerSecurityAgent(address)": "0e770f23", - "registerTokenAdmin(address)": "0b3a2d21", - "registerUpgradeGovernor(address)": "6fc97cbf", - "removeImplementation(address,bytes,bool)": "5cef2e86", - "renounceRole(bytes32,address)": "36568abe", - "revokeAppGovernor(address)": "deec9c5a", - "revokeAppRoleAdmin(address)": "2f951985", - "revokeGovernanceAdmin(address)": "ee0e6807", - "revokeOperator(address)": "fad8b32a", - "revokeSecurityAdmin(address)": "8101b64c", - "revokeSecurityAgent(address)": "d9fa7091", - "revokeTokenAdmin(address)": "fa0f73ba", - "revokeUpgradeGovernor(address)": "ed9ef16a", - "upgradeTo(address,bytes,bool)": "7147855d" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0x6e7ae318b0632d639074806bb9e209ed8dd2537662812b0c4e73fbea94415f1d\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://1607f278263545b0290927979dbdd7837aa8b43c557f12ab8ab8b137c8be2473\",\"dweb:/ipfs/QmcjyDCpKtSTRABNUdRKAFstc5N5hU1ygLvke6CDDScQwW\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.24+commit.e11b9ed9" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "upgradeActivationDelay", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "FinalizedImplementation", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes", - "name": "initializer", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bool", - "name": "finalize", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "ImplementationAdded", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes", - "name": "initializer", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bool", - "name": "finalize", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "ImplementationRemoved", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes", - "name": "initializer", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ImplementationUpgraded", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "anonymous": false - }, - { "inputs": [], "stateMutability": "payable", "type": "fallback" }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "ENABLE_WINDOW_DURATION_SLOT", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "MAX_UPGRADE_DELAY", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "PROXY_VERSION", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "UPGRADE_DELAY_SLOT", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "finalize", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addImplementation" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getEnableWindowDuration", - "outputs": [ - { "internalType": "uint256", "name": "duration", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getUpgradeActivationDelay", - "outputs": [ - { "internalType": "uint256", "name": "delay", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ] - }, - { - "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], - "stateMutability": "pure", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppRoleAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isGovernanceAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isNotFinalized", - "outputs": [ - { "internalType": "bool", "name": "notFinal", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isOperator", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAgent", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isTokenAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isUpgradeGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerUpgradeGovernor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "removedImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "finalize", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeImplementation" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeUpgradeGovernor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "finalize", "type": "bool" } - ], - "stateMutability": "payable", - "type": "function", - "name": "upgradeTo" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "cairo-lang/=lib/cairo-lang/src/", - "forge-std/=lib/forge-std/src/", - "starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/", - "starknet-token/=lib/starknet-token/src/starkware/isd/", - "starkware/isd/=lib/starknet-token/src/starkware/isd/", - "starkware/solidity/=lib/cairo-lang/src/starkware/solidity/", - "starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "src/Proxy_5_0_0.sol": "Proxy" }, - "evmVersion": "cancun", - "libraries": {} - }, - "sources": { - "src/5_0_0/AccessControl.sol": { - "keccak256": "0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b", - "urls": [ - "bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333", - "dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt" - ], - "license": "MIT" - }, - "src/5_0_0/NamedStorage.sol": { - "keccak256": "0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3", - "urls": [ - "bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917", - "dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/ProxyStorage.sol": { - "keccak256": "0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03", - "urls": [ - "bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc", - "dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/Roles.sol": { - "keccak256": "0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1", - "urls": [ - "bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06", - "dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/RolesLib.sol": { - "keccak256": "0x6e7ae318b0632d639074806bb9e209ed8dd2537662812b0c4e73fbea94415f1d", - "urls": [ - "bzz-raw://1607f278263545b0290927979dbdd7837aa8b43c557f12ab8ab8b137c8be2473", - "dweb:/ipfs/QmcjyDCpKtSTRABNUdRKAFstc5N5hU1ygLvke6CDDScQwW" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/StorageSlots.sol": { - "keccak256": "0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272", - "urls": [ - "bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c", - "dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/Strings.sol": { - "keccak256": "0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2", - "urls": [ - "bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7", - "dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f" - ], - "license": "MIT" - }, - "src/Proxy_5_0_0.sol": { - "keccak256": "0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e", - "urls": [ - "bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155", - "dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW" - ], - "license": "Apache-2.0." - }, - "src/libraries/Addresses.sol": { - "keccak256": "0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16", - "urls": [ - "bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a", - "dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR" - ], - "license": "Apache-2.0." - } - }, - "version": 1 - }, - "id": 11 -} diff --git a/crates/l2/starknet-proxy-client/src/artifacts/UnsafeProxy.json b/crates/l2/starknet-proxy-client/src/artifacts/UnsafeProxy.json deleted file mode 100644 index d428a31..0000000 --- a/crates/l2/starknet-proxy-client/src/artifacts/UnsafeProxy.json +++ /dev/null @@ -1,688 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { "type": "fallback", "stateMutability": "payable" } - ], - "bytecode": { - "object": "0x608060405234801561001057600080fd5b5060405161012f38038061012f83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b609d806100926000396000f3fe6000805460a0602036601f8101829004909102820160405260808181526001600160a01b039093169392918391908190838280828437600092018290525084519495509384935091505060208401855af43d604051816000823e8280156063578282f35b8282fdfea26469706673582212204d5b20b54cc45decc224295a027d46c0605e53c658b59ea56ea1c02b352b252e64736f6c63430008100033", - "sourceMap": "495:626:0:-:0;;;601:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;642:8;:20;;-1:-1:-1;;;;;;642:20:0;-1:-1:-1;;;;;642:20:0;;;;;;;;;;495:626;;14:290:1;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:1;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:1:o;:::-;495:626:0;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6000805460a0602036601f8101829004909102820160405260808181526001600160a01b039093169392918391908190838280828437600092018290525084519495509384935091505060208401855af43d604051816000823e8280156063578282f35b8282fdfea26469706673582212204d5b20b54cc45decc224295a027d46c0605e53c658b59ea56ea1c02b352b252e64736f6c63430008100033", - "sourceMap": "713:14:0:-:0;730:8;;748:28;;768:8;748:28;;;;;;;;;;;495:626;748:28;495:626;748:28;;;-1:-1:-1;;;;;730:8:0;;;;713:14;495:626;713:14;;768:8;;;713:14;768:8;;713:14;748:28;;;;;;;;-1:-1:-1;867:11:0;;748:28;;-1:-1:-1;748:28:0;;;-1:-1:-1;867:11:0;-1:-1:-1;;860:4:0;851:14;;843:6;836:5;823:62;910:16;956:4;950:11;995:4;993:1;989:3;974:26;1020:6;1039:25;;;;1097:4;1093:3;1086:16;1039:25;1058:4;1054:3;1047:16", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/UnsafeProxy.sol\":\"UnsafeProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\"]},\"sources\":{\"src/UnsafeProxy.sol\":{\"keccak256\":\"0x6a52f2752798e54466338fff832a7bda2bb382e1e54a37919dc4bb532a190740\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://49520db72305d8b5b574d82d292df5b95af9817497e9602f3d902015e72dbee2\",\"dweb:/ipfs/QmZsGnE3AGUr5u9kDYryksbZ6v2RudsnhqH5hhtsA1CH2t\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.16+commit.07a7930e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "stateMutability": "payable", "type": "fallback" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "cairo-lang/=lib/cairo-lang/src/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/", - "starknet-token/=lib/starknet-token/src/starkware/isd/", - "starkware/isd/=lib/starknet-token/src/starkware/isd/", - "starkware/solidity/=lib/cairo-lang/src/starkware/solidity/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "src/UnsafeProxy.sol": "UnsafeProxy" }, - "libraries": {} - }, - "sources": { - "src/UnsafeProxy.sol": { - "keccak256": "0x6a52f2752798e54466338fff832a7bda2bb382e1e54a37919dc4bb532a190740", - "urls": [ - "bzz-raw://49520db72305d8b5b574d82d292df5b95af9817497e9602f3d902015e72dbee2", - "dweb:/ipfs/QmZsGnE3AGUr5u9kDYryksbZ6v2RudsnhqH5hhtsA1CH2t" - ], - "license": "Apache-2.0." - } - }, - "version": 1 - }, - "ast": { - "absolutePath": "src/UnsafeProxy.sol", - "id": 29, - "exportedSymbols": { "UnsafeProxy": [28] }, - "nodeType": "SourceUnit", - "src": "469:652:0", - "nodes": [ - { - "id": 1, - "nodeType": "PragmaDirective", - "src": "469:24:0", - "nodes": [], - "literals": ["solidity", "^", "0.8", ".12"] - }, - { - "id": 28, - "nodeType": "ContractDefinition", - "src": "495:626:0", - "nodes": [ - { - "id": 3, - "nodeType": "VariableDeclaration", - "src": "578:16:0", - "nodes": [], - "constant": false, - "mutability": "mutable", - "name": "delegate", - "nameLocation": "586:8:0", - "scope": 28, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "578:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "id": 13, - "nodeType": "FunctionDefinition", - "src": "601:68:0", - "nodes": [], - "body": { - "id": 12, - "nodeType": "Block", - "src": "632:37:0", - "nodes": [], - "statements": [ - { - "expression": { - "id": 10, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8, - "name": "delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3, - "src": "642:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5, - "src": "653:9:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "642:20:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 11, - "nodeType": "ExpressionStatement", - "src": "642:20:0" - } - ] - }, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "parameters": { - "id": 6, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "621:9:0", - "nodeType": "VariableDeclaration", - "scope": 13, - "src": "613:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "613:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "612:19:0" - }, - "returnParameters": { - "id": 7, - "nodeType": "ParameterList", - "parameters": [], - "src": "632:0:0" - }, - "scope": 28, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "id": 27, - "nodeType": "FunctionDefinition", - "src": "675:444:0", - "nodes": [], - "body": { - "id": 26, - "nodeType": "Block", - "src": "703:416:0", - "nodes": [], - "statements": [ - { - "assignments": [17], - "declarations": [ - { - "constant": false, - "id": 17, - "mutability": "mutable", - "name": "target", - "nameLocation": "721:6:0", - "nodeType": "VariableDeclaration", - "scope": 26, - "src": "713:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "713:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 19, - "initialValue": { - "id": 18, - "name": "delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3, - "src": "730:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "713:25:0" - }, - { - "assignments": [21], - "declarations": [ - { - "constant": false, - "id": 21, - "mutability": "mutable", - "name": "data", - "nameLocation": "761:4:0", - "nodeType": "VariableDeclaration", - "scope": 26, - "src": "748:17:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 20, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "748:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 24, - "initialValue": { - "expression": { - "id": 22, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "768:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 23, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "772:4:0", - "memberName": "data", - "nodeType": "MemberAccess", - "src": "768:8:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "748:28:0" - }, - { - "AST": { - "nodeType": "YulBlock", - "src": "795:318:0", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "809:76:0", - "value": { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "gas", - "nodeType": "YulIdentifier", - "src": "836:3:0" - }, - "nodeType": "YulFunctionCall", - "src": "836:5:0" - }, - { - "name": "target", - "nodeType": "YulIdentifier", - "src": "843:6:0" - }, - { - "arguments": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "855:4:0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "860:4:0", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "851:3:0" - }, - "nodeType": "YulFunctionCall", - "src": "851:14:0" - }, - { - "arguments": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "873:4:0" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "867:5:0" - }, - "nodeType": "YulFunctionCall", - "src": "867:11:0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "880:1:0", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "883:1:0", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "delegatecall", - "nodeType": "YulIdentifier", - "src": "823:12:0" - }, - "nodeType": "YulFunctionCall", - "src": "823:62:0" - }, - "variables": [ - { - "name": "result", - "nodeType": "YulTypedName", - "src": "813:6:0", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "898:28:0", - "value": { - "arguments": [], - "functionName": { - "name": "returndatasize", - "nodeType": "YulIdentifier", - "src": "910:14:0" - }, - "nodeType": "YulFunctionCall", - "src": "910:16:0" - }, - "variables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "902:4:0", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "939:22:0", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "956:4:0", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "950:5:0" - }, - "nodeType": "YulFunctionCall", - "src": "950:11:0" - }, - "variables": [ - { - "name": "ptr", - "nodeType": "YulTypedName", - "src": "943:3:0", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "989:3:0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "993:1:0", - "type": "", - "value": "0" - }, - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "995:4:0" - } - ], - "functionName": { - "name": "returndatacopy", - "nodeType": "YulIdentifier", - "src": "974:14:0" - }, - "nodeType": "YulFunctionCall", - "src": "974:26:0" - }, - "nodeType": "YulExpressionStatement", - "src": "974:26:0" - }, - { - "cases": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1046:18:0", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "1054:3:0" - }, - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1058:4:0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1047:6:0" - }, - "nodeType": "YulFunctionCall", - "src": "1047:16:0" - }, - "nodeType": "YulExpressionStatement", - "src": "1047:16:0" - } - ] - }, - "nodeType": "YulCase", - "src": "1039:25:0", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1044:1:0", - "type": "", - "value": "0" - } - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1085:18:0", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "1093:3:0" - }, - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1097:4:0" - } - ], - "functionName": { - "name": "return", - "nodeType": "YulIdentifier", - "src": "1086:6:0" - }, - "nodeType": "YulFunctionCall", - "src": "1086:16:0" - }, - "nodeType": "YulExpressionStatement", - "src": "1086:16:0" - } - ] - }, - "nodeType": "YulCase", - "src": "1077:26:0", - "value": "default" - } - ], - "expression": { - "name": "result", - "nodeType": "YulIdentifier", - "src": "1020:6:0" - }, - "nodeType": "YulSwitch", - "src": "1013:90:0" - } - ] - }, - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 21, - "isOffset": false, - "isSlot": false, - "src": "855:4:0", - "valueSize": 1 - }, - { - "declaration": 21, - "isOffset": false, - "isSlot": false, - "src": "873:4:0", - "valueSize": 1 - }, - { - "declaration": 17, - "isOffset": false, - "isSlot": false, - "src": "843:6:0", - "valueSize": 1 - } - ], - "id": 25, - "nodeType": "InlineAssembly", - "src": "786:327:0" - } - ] - }, - "implemented": true, - "kind": "fallback", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "parameters": { - "id": 14, - "nodeType": "ParameterList", - "parameters": [], - "src": "683:2:0" - }, - "returnParameters": { - "id": 15, - "nodeType": "ParameterList", - "parameters": [], - "src": "703:0:0" - }, - "scope": 28, - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - } - ], - "abstract": false, - "baseContracts": [], - "canonicalName": "UnsafeProxy", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "linearizedBaseContracts": [28], - "name": "UnsafeProxy", - "nameLocation": "504:11:0", - "scope": 29, - "usedErrors": [] - } - ], - "license": "Apache-2.0." - }, - "id": 0 -} diff --git a/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs b/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs index 777675d..9552697 100644 --- a/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs +++ b/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs @@ -8,15 +8,7 @@ use utils::errors::Error; abigen!( ProxySupport3_0_2, - r#"[ - function isFrozen() external view virtual returns (bool) - function initialize(bytes calldata data) external notCalledDirectly - function upgradeTo(address newImplementation, bytes calldata data, bool finalize) external payable onlyGovernance notFinalized notFrozen - function addImplementation(address newImplementation, bytes calldata data, bool finalize) external onlyGovernance - function proxyNominateNewGovernor(address newGovernor) external - function proxyRemoveGovernor(address governorForRemoval) external - function proxyAcceptGovernance() external - ]"#, + "../../../artifacts/starkgate-contracts-0.9/Proxy_3_0_2.json", ); #[async_trait] @@ -24,10 +16,6 @@ impl ProxySupport3_0_2Trait for T where T: AsRef> + Send + Sync, { - async fn is_frozen(&self) -> Result> { - self.as_ref().is_frozen().call().await.map_err(Into::into) - } - async fn initialize(&self, data: Bytes) -> Result, Error> { self.as_ref() .initialize(data) diff --git a/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs b/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs index daad57f..7baad19 100644 --- a/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs +++ b/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs @@ -8,24 +8,7 @@ use utils::errors::Error; abigen!( ProxySupport5_0_0, - r#"[ - function isFrozen() external view virtual returns (bool) - function initialize(bytes calldata data) external notCalledDirectly - function upgradeTo(address newImplementation, bytes calldata data, bool finalize) external payable onlyGovernance notFinalized notFrozen - function addImplementation(address newImplementation, bytes calldata data, bool finalize) external onlyGovernance - function proxyNominateNewGovernor(address newGovernor) external - function proxyRemoveGovernor(address governorForRemoval) external - function proxyAcceptGovernance() external - - function registerAppGovernor(address account) external - function registerAppRoleAdmin(address account) external - function registerGovernanceAdmin(address account) external - function registerOperator(address account) external - function registerSecurityAdmin(address account) external - function registerSecurityAgent(address account) external - function registerTokenAdmin(address account) external - function registerUpgradeGovernor(address account) external - ]"#, + "../../../artifacts/starkgate-contracts/Proxy_5_0_0.json", ); #[async_trait] @@ -33,10 +16,6 @@ impl ProxySupport5_0_0Trait for T where T: AsRef> + Send + Sync, { - async fn is_frozen(&self) -> Result> { - self.as_ref().is_frozen().call().await.map_err(Into::into) - } - async fn initialize(&self, data: Bytes) -> Result, Error> { self.as_ref() .initialize(data) @@ -89,7 +68,7 @@ where new_governor: Address, ) -> Result, Error> { self.as_ref() - .proxy_nominate_new_governor(new_governor) + .register_app_governor(new_governor) .send() .await .map_err(Into::>::into)? @@ -102,17 +81,7 @@ where governor: Address, ) -> Result, Error> { self.as_ref() - .proxy_remove_governor(governor) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn proxy_accept_governance(&self) -> Result, Error> { - self.as_ref() - .proxy_accept_governance() + .revoke_app_governor(governor) .send() .await .map_err(Into::>::into)? diff --git a/crates/l2/starknet-proxy-client/src/deploy.rs b/crates/l2/starknet-proxy-client/src/deploy.rs index 3047871..e54924b 100644 --- a/crates/l2/starknet-proxy-client/src/deploy.rs +++ b/crates/l2/starknet-proxy-client/src/deploy.rs @@ -29,9 +29,11 @@ pub enum Error { DeployContract(#[from] ethereum_instance::Error), } -const UNSAFE_PROXY: &str = include_str!("artifacts/UnsafeProxy.json"); -const SAFE_PROXY_3_0_2: &str = include_str!("artifacts/Proxy_3_0_2.json"); -const SAFE_PROXY_5_0_0: &str = include_str!("artifacts/Proxy_5_0_0.json"); +const UNSAFE_PROXY: &str = include_str!("../../../../artifacts/UnsafeProxy.json"); +const SAFE_PROXY_3_0_2: &str = + include_str!("../../../../artifacts/starkgate-contracts-0.9/Proxy_3_0_2.json"); +const SAFE_PROXY_5_0_0: &str = + include_str!("../../../../artifacts/starkgate-contracts/Proxy_5_0_0.json"); #[derive(PartialEq)] pub enum ProxyVersion { diff --git a/crates/l2/starknet-proxy-client/src/interfaces/proxy.rs b/crates/l2/starknet-proxy-client/src/interfaces/proxy.rs index 6251451..3839f1b 100644 --- a/crates/l2/starknet-proxy-client/src/interfaces/proxy.rs +++ b/crates/l2/starknet-proxy-client/src/interfaces/proxy.rs @@ -8,7 +8,6 @@ use utils::errors::Error; #[async_trait] pub trait ProxySupport3_0_2Trait { - async fn is_frozen(&self) -> Result>; async fn initialize(&self, data: Bytes) -> Result, Error>; async fn initialize_with( &self, @@ -39,7 +38,6 @@ pub trait ProxySupport3_0_2Trait { #[async_trait] pub trait ProxySupport5_0_0Trait { - async fn is_frozen(&self) -> Result>; async fn initialize(&self, data: Bytes) -> Result, Error>; async fn initialize_with( &self, @@ -65,7 +63,6 @@ pub trait ProxySupport5_0_0Trait { &self, governor: Address, ) -> Result, Error>; - async fn proxy_accept_governance(&self) -> Result, Error>; async fn register_app_governor( &self, account: Address, @@ -110,6 +107,7 @@ pub struct CoreContractState { #[derive(Debug, Clone, Default, PartialEq, EthAbiType, EthAbiCodec)] pub struct CoreContractInitData { pub program_hash: U256, + pub aggregate_program_hash: U256, pub verifier_address: Address, pub config_hash: U256, pub initial_state: CoreContractState, @@ -139,6 +137,7 @@ impl Into> for CoreContractInitData { fn into(self) -> Vec { [ self.program_hash.encode(), + self.aggregate_program_hash.encode(), self.verifier_address.encode(), self.config_hash.encode(), self.initial_state.into(), diff --git a/crates/l2/starknet-token-bridge-client/src/artifacts/StarknetTokenBridge.json b/crates/l2/starknet-token-bridge-client/src/artifacts/StarknetTokenBridge.json deleted file mode 100644 index 4a44027..0000000 --- a/crates/l2/starknet-token-bridge-client/src/artifacts/StarknetTokenBridge.json +++ /dev/null @@ -1,2237 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "checkDeploymentStatus", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "deactivate", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "deposit", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" }, - { "name": "l2Recipient", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "depositCancelRequest", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" }, - { "name": "l2Recipient", "type": "uint256", "internalType": "uint256" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "depositReclaim", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" }, - { "name": "l2Recipient", "type": "uint256", "internalType": "uint256" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "depositWithMessage", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" }, - { "name": "l2Recipient", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "uint256[]", "internalType": "uint256[]" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "depositWithMessageCancelRequest", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" }, - { "name": "l2Recipient", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "uint256[]", "internalType": "uint256[]" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "depositWithMessageReclaim", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" }, - { "name": "l2Recipient", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "uint256[]", "internalType": "uint256[]" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "disableWithdrawalLimit", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "enableWithdrawalLimit", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "enrollToken", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "estimateDepositFeeWei", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "estimateEnrollmentFeeWei", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "getMaxTotalBalance", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRemainingIntradayAllowance", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getStatus", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "enum StarknetTokenStorage.TokenStatus" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "identify", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "initialize", - "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isFrozen", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isServicingToken", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "maxDeposit", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "registerAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setL2TokenBridge", - "inputs": [ - { - "name": "l2TokenBridge_", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMaxTotalBalance", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { - "name": "maxTotalBalance_", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdraw", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" }, - { "name": "recipient", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdraw", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Deposit", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "l2Recipient", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "fee", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DepositCancelRequest", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "l2Recipient", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DepositReclaimed", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "l2Recipient", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DepositWithMessage", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "l2Recipient", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "message", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "fee", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DepositWithMessageCancelRequest", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "l2Recipient", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "message", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DepositWithMessageReclaimed", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "l2Recipient", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "message", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - }, - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetL2TokenBridge", - "inputs": [ - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetMaxTotalBalance", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TokenDeactivated", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TokenEnrollmentInitiated", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "deploymentMsgHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Withdrawal", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "WithdrawalLimitDisabled", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "WithdrawalLimitEnabled", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60e060405246600114620000155760016200001c565b64e8d4a510005b64ffffffffff166080523480156200003357600080fd5b503060a052600160c08190526200004962000050565b5062000519565b336200005d818062000060565b50565b6200006a620001c1565b1562000103576001600160a01b03821660009081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000fd5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b6200010e565b6200010e8262000215565b6200011862000360565b15620001b6576001600160a01b03811660009081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001b25760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000f4565b5050565b620001b281620003b2565b60008051602062004e84833981519152600090815260008051602062004ec48339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200023060008051602062004e84833981519152826200041e565b6200026a7ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de0606860008051602062004ee4833981519152620004c0565b6200029460008051602062004ee483398151915260008051602062004e84833981519152620004c0565b620002af60008051602062004e8483398151915280620004c0565b620002ea7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da760008051602062004ee4833981519152620004c0565b620003257f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e60008051602062004ee4833981519152620004c0565b6200005d7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22860008051602062004e84833981519152620004c0565b60008051602062004ea4833981519152600090815260008051602062004ec48339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c245481906200020e565b620003cd60008051602062004ea483398151915280620004c0565b620004087f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9660008051602062004ea4833981519152620004c0565b6200005d60008051602062004ea4833981519152825b600082815260008051602062004ec4833981519152602090815260408083206001600160a01b038516845290915290205460ff16620001b257600082815260008051602062004ec4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600082815260008051602062004ec48339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a05160c05161493b620005496000396000610c7901526000610e3901526000612d59015261493b6000f3fe6080604052600436106102c95760003560e01c8063757bd9ab11610175578063cdd1f70d116100dc578063deec9c5a11610095578063eeb728661161006f578063eeb7286614610892578063f3fef3a3146108b4578063fa0f73ba146108d4578063fad8b32a146108f457600080fd5b8063deec9c5a14610832578063ed9ef16a14610852578063ee0e68071461087257600080fd5b8063cdd1f70d14610772578063cf50fd1c14610792578063d08fb6cb146107b2578063d12fc182146107d2578063d2b51eea146107f2578063d9fa70911461081257600080fd5b8063a6d1d6c61161012e578063a6d1d6c6146106d7578063ad8b92b4146106f7578063af8bc15e1461070a578063b5cd0c3c1461071f578063be58b18e1461073f578063cb1cccce1461075257600080fd5b8063757bd9ab146106175780637fc2ab3e146106375780638101b64c146106575780638e5224ff146106775780639463629a14610697578063a2bdde3d146106b757600080fd5b80633ea053eb116102345780635a72af89116101ed57806369328dec116101c757806369328dec146105975780636c04d9d5146105b75780636d70f7ae146105d75780636fc97cbf146105f757600080fd5b80635a72af89146105425780636083e59a1461056257806362a143761461057757600080fd5b80633ea053eb1461047f578063439fab911461049f578063496ae54c146104bf5780634baf43da146104ed5780634d8b92a51461050d5780635a5d1bb91461052257600080fd5b806323205c521161028657806323205c52146103985780632f951985146103b857806330ccebb5146103d857806333eeb1471461042b57806336568abe1461043f5780633682a4501461045f57600080fd5b80630b3a2d21146102ce5780630c6f8664146102f05780630e770f23146103255780630efe6a8b1461034557806314af98b3146103585780631789638314610378575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004613db6565b610914565b005b3480156102fc57600080fd5b5061031061030b366004613db6565b61092f565b60405190151581526020015b60405180910390f35b34801561033157600080fd5b506102ee610340366004613db6565b610990565b6102ee610353366004613dd3565b6109a8565b34801561036457600080fd5b506102ee610373366004613db6565b610a64565b34801561038457600080fd5b506102ee610393366004613db6565b610b0c565b3480156103a457600080fd5b506102ee6103b3366004613e08565b610b24565b3480156103c457600080fd5b506102ee6103d3366004613db6565b610c1a565b3480156103e457600080fd5b5061041e6103f3366004613db6565b6001600160a01b031660009081526000805160206148a6833981519152602052604090205460ff1690565b60405161031c9190613e59565b34801561043757600080fd5b506000610310565b34801561044b57600080fd5b506102ee61045a366004613e81565b610c5f565b34801561046b57600080fd5b506102ee61047a366004613db6565b610cf1565b34801561048b57600080fd5b506102ee61049a366004613db6565b610d09565b3480156104ab57600080fd5b506102ee6104ba366004613eb1565b610e36565b3480156104cb57600080fd5b506104df6104da366004613db6565b610fe7565b60405190815260200161031c565b3480156104f957600080fd5b506104df610508366004613db6565b61102e565b34801561051957600080fd5b506104df61106d565b34801561052e57600080fd5b5061031061053d366004613db6565b61107c565b34801561054e57600080fd5b506102ee61055d366004613db6565b611096565b34801561056e57600080fd5b506000196104df565b34801561058357600080fd5b506102ee610592366004613db6565b61113b565b3480156105a357600080fd5b506102ee6105b2366004613f23565b611153565b3480156105c357600080fd5b506103106105d2366004613db6565b611240565b3480156105e357600080fd5b506103106105f2366004613db6565b61125a565b34801561060357600080fd5b506102ee610612366004613db6565b611274565b34801561062357600080fd5b50610310610632366004613db6565b61128c565b34801561064357600080fd5b506102ee610652366004613f65565b6112a6565b34801561066357600080fd5b506102ee610672366004613db6565b6113cb565b34801561068357600080fd5b50610310610692366004613db6565b61140c565b3480156106a357600080fd5b506102ee6106b2366004613db6565b611426565b3480156106c357600080fd5b506103106106d2366004613db6565b61143e565b3480156106e357600080fd5b506102ee6106f2366004613e08565b611458565b6102ee610705366004613db6565b611539565b34801561071657600080fd5b506104df611786565b34801561072b57600080fd5b506102ee61073a366004613fca565b611790565b6102ee61074d36600461403c565b6118c7565b34801561075e57600080fd5b5061031061076d366004613db6565b6119da565b34801561077e57600080fd5b506102ee61078d366004613db6565b6119f4565b34801561079e57600080fd5b506102ee6107ad366004613fca565b611a0c565b3480156107be57600080fd5b506103106107cd366004613db6565b611b28565b3480156107de57600080fd5b506102ee6107ed366004613db6565b611b42565b3480156107fe57600080fd5b506102ee61080d3660046140a6565b611d67565b34801561081e57600080fd5b506102ee61082d366004613db6565b611e70565b34801561083e57600080fd5b506102ee61084d366004613db6565b611e88565b34801561085e57600080fd5b506102ee61086d366004613db6565b611ea0565b34801561087e57600080fd5b506102ee61088d366004613db6565b611eb8565b34801561089e57600080fd5b506108a7611ef9565b60405161031c91906140f6565b3480156108c057600080fd5b506102ee6108cf3660046140a6565b611f19565b3480156108e057600080fd5b506102ee6108ef366004613db6565b611f24565b34801561090057600080fd5b506102ee61090f366004613db6565b611f3c565b61092c6000805160206148e683398151915282611f54565b50565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff16600181600381111561096c5761096c613e43565b14806109895750600281600381111561098757610987613e43565b145b9392505050565b61092c6000805160206147d283398151915282611f54565b826109b28161092f565b6109f85760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b6040805160008082526020820190925290610a138686611f75565b90506000610a338787878660008051602061488683398151915287612059565b9050610a528787878660008051602061488683398151915286886121be565b610a5b87611b42565b50505050505050565b610a6d3361128c565b610aaf5760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b61092c6000805160206147f283398151915282611f54565b610b2c6122d3565b6001600160a01b0316636170ff1b610b426122f6565b600080516020614886833981519152610b5c888888612319565b856040518563ffffffff1660e01b8152600401610b7c949392919061417b565b6020604051808303816000875af1158015610b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbf91906141ab565b50610bcb848433612344565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610c435760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206147f28339815191528361234f565b5050565b6000805160206146c483398151915282148015610c9a57507f0000000000000000000000000000000000000000000000000000000000000000155b15610ce75760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ef565b610c5b828261236b565b61092c6000805160206148c683398151915282611f54565b33610d126123e5565b6001600160a01b031614610d575760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ef565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff166003811115610d9157610d91613e43565b03610dce5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610ea75760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ef565b6000610eb481602061420a565b90506000610ec3826020614221565b905080831015610f0b5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ef565b6000610f1982848688614234565b810190610f269190613db6565b9050366000610f378582888a614234565b91509150366000610f4a8887818c614234565b90925090506001600160a01b03851615610f7457610f69858383612408565b505050505050505050565b610f7c61254a565b15610fcb578015610fc65760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ef565b610f69565b610fd58282612565565b610fdf828261267d565b610f696126ac565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081206004015460ff1661101f57600019611028565b611028826126b7565b92915050565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081206003015480156110635780610989565b6000199392505050565b60006110776126d8565b905090565b600061102860008051602061472b833981519152836126ec565b61109f33611b28565b6110e15760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b61092c6000805160206146e483398151915282611f54565b6001600160a01b03811661119d5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ef565b6111a8838383612724565b6001600160a01b03831660009081526000805160206148a6833981519152602052604090206004015460ff16156111e3576111e383836128c3565b6111ee838383612344565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63988460405161123391815260200190565b60405180910390a3505050565b600061102860008051602061474b833981519152836126ec565b60006110286000805160206148c6833981519152836126ec565b61092c60008051602061474b83398151915282611f54565b60006110286000805160206147d2833981519152836126ec565b6112af3361107c565b6112ef5760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ef565b6112f761254a565b6113435760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ef565b61134c81612933565b6113925760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ef565b61139b81612956565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610e2b565b80336001600160a01b038216036113f45760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206146e48339815191528361234f565b60006110286000805160206147f2833981519152836126ec565b61092c6000805160206146c483398151915282611f54565b60006110286000805160206148e6833981519152836126ec565b6114606122d3565b6001600160a01b0316637a98660b6114766122f6565b600080516020614886833981519152611490888888612319565b856040518563ffffffff1660e01b81526004016114b0949392919061417b565b6020604051808303816000875af11580156114cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f391906141ab565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610c0c565b336115426123e5565b6001600160a01b0316146115875760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ef565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff1660038111156115c1576115c1613e43565b146116075760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ef565b600061161282612978565b9050600061161e6122d3565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b815260040161164b91815260200190565b602060405180830381865afa158015611668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168c91906141ab565b116116d95760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ef565b6001600160a01b03821660009081526000805160206148a683398151915260205260409020805460ff1916600190811782550181905561171c6206978042614221565b6000805160206148a68339815191526001600160a01b038416600081815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b6000611077612a5d565b6117986122d3565b6001600160a01b0316636170ff1b6117ae6122f6565b6000805160206147b28339815191526117fe8a8a8a60018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7092505050565b856040518563ffffffff1660e01b815260040161181e949392919061417b565b6020604051808303816000875af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186191906141ab565b5061186d868633612344565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f73888787876040516118b7949392919061425e565b60405180910390a4505050505050565b846118d18161092f565b6119125760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ef565b600061191e8787611f75565b905060006119738888888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206147b283398151915292508991506120599050565b90506119c78888888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206147b283398151915292508891508990506121be565b6119d088611b42565b5050505050505050565b60006110286000805160206146c4833981519152836126ec565b61092c60008051602061472b83398151915282611f54565b611a146122d3565b6001600160a01b0316637a98660b611a2a6122f6565b6000805160206147b2833981519152611a7a8a8a8a60018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7092505050565b856040518563ffffffff1660e01b8152600401611a9a949392919061417b565b6020604051808303816000875af1158015611ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611add91906141ab565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd5057603860888787876040516118b7949392919061425e565b60006110286000805160206146e4833981519152836126ec565b6001600160a01b03811660009081526000805160206148a68339815191526020526040902054819060019060ff166003811115611b8157611b81613e43565b14611b8a575050565b6001600160a01b03821660009081526000805160206148a6833981519152602052604090206001810154611bbc6122d3565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611be991815260200190565b602060405180830381865afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a91906141ab565b600003611c4157815460ff19166002178255611d61565b8160020154421115611d61576001600160a01b03841660009081526000805160206148a683398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611ca56123e5565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0691906142a4565b604051630caca05160e31b81526001600160a01b03878116600483015291925090821690636565028890602401600060405180830381600087803b158015611d4d57600080fd5b505af1158015610f69573d6000803e3d6000fd5b50505050565b611d703361107c565b611db05760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ef565b80600003611e005760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ef565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611e3b91815260200190565b60405180910390a26001600160a01b039190911660009081526000805160206148a68339815191526020526040902060030155565b61092c6000805160206147d28339815191528261234f565b61092c60008051602061472b8339815191528261234f565b61092c60008051602061474b8339815191528261234f565b80336001600160a01b03821603611ee15760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206146c48339815191528361234f565b606060405180606001604052806023815260200161483860239139905090565b610c5b828233611153565b61092c6000805160206148e68339815191528261234f565b61092c6000805160206148c68339815191528261234f565b611f5d82612cb5565b611f6681612cd7565b611f708383612ce1565b505050565b6000611f8034612d57565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611feb91906141ab565b9050611ff68461102e565b6120008483614221565b11156120455760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ef565b612050843385612e0c565b50349392505050565b60006120636122f6565b6000036120825760405162461bcd60e51b81526004016109ef906142c1565b600086116120c15760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ef565b6120ca85612933565b6121105760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ef565b6000805160206147b28339815191528314600061212b6122d3565b6001600160a01b0316633e3aa6c5856121426122f6565b886121508e8e8e8a8f612a70565b6040518563ffffffff1660e01b815260040161216e939291906142ec565b604080518083038185885af115801561218b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121b0919061430b565b9a9950505050505050505050565b600080516020614886833981519152830361222857604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a5b565b6000805160206147b283398151915283146122785760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ef565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f1898887876040516122c2949392919061432f565b60405180910390a450505050505050565b600061107760405180606001604052806028815260200161469c60289139613003565b600061107760405180606001604052806027815260200161478b60279139613003565b604080516000808252602082019092526060915061233b858585600085612a70565b95945050505050565b611f70838284613037565b61235882612cb5565b61236181612cd7565b611f708383613174565b6001600160a01b03811633146123db5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ef565b610c5b8282613174565b600061107760405180606001604052806026815260200161481260269139613003565b6001600160a01b0383163b6124545760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ef565b600080846001600160a01b031663439fab9160e01b858560405160240161247c92919061435b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516124ba919061438a565b600060405180830381855af49150503d80600081146124f5576040519150601f19603f3d011682016040523d82523d6000602084013e6124fa565b606091505b509150915081819061251f5760405162461bcd60e51b81526004016109ef91906140f6565b5080518190156125425760405162461bcd60e51b81526004016109ef91906140f6565b505050505050565b6000806125556122d3565b6001600160a01b03161415905090565b604081146125a95760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ef565b6000806125b8838501856143a6565b915091506125cf816001600160a01b03163b151590565b6126265760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ef565b6001600160a01b0382163b611d615760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ef565b60008061268c838501856143a6565b91509150612699816131e8565b6126a28261320a565b611d61600561322c565b3361092c818061324e565b60006126c282613352565b6126cf5761102882613381565b61102882613434565b600061107764012a05f200620186a061420a565b600091825260008051602061476b833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61272c6122f6565b60000361274b5760405162461bcd60e51b81526004016109ef906142c1565b60408051600580825260c082019092526000916020820160a080368337019050509050600081600081518110612783576127836143d4565b602002602001018181525050816001600160a01b0316816001815181106127ac576127ac6143d4565b602002602001018181525050836001600160a01b0316816002815181106127d5576127d56143d4565b602090810291909101015260016127ee608060026144ce565b6127f891906144da565b83168160038151811061280d5761280d6143d4565b602002602001018181525050608083901c81600481518110612831576128316143d4565b6020026020010181815250506128456122d3565b6001600160a01b0316632c9dd5c061285b6122f6565b836040518363ffffffff1660e01b81526004016128799291906144ed565b6020604051808303816000875af1158015612898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bc91906141ab565b5050505050565b60006128ce836126b7565b9050818110156129205760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ef565b611f708361292e84846144da565b613464565b60008115801590611028575061102882600167080000000000001160c01b011190565b61092c60405180606001604052806027815260200161478b6027913982613497565b60006129826122f6565b6000036129a15760405162461bcd60e51b81526004016109ef906142c1565b6129aa34612d57565b60006129b46122d3565b6001600160a01b0316633e3aa6c5346129cb6122f6565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc6129f5886134e5565b6040518563ffffffff1660e01b8152600401612a13939291906142ec565b604080518083038185885af1158015612a30573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a55919061430b565b509392505050565b600061107764012a05f200614e2061420a565b6060600083612a80576005612a8c565b612a8c60016005614221565b90506000835182612a9d9190614221565b67ffffffffffffffff811115612ab557612ab5614129565b604051908082528060200260200182016040528015612ade578160200160208202803683370190505b509050876001600160a01b031681600081518110612afe57612afe6143d4565b602002602001018181525050336001600160a01b031681600181518110612b2757612b276143d4565b6020026020010181815250508581600281518110612b4757612b476143d4565b60209081029190910101526001612b60608060026144ce565b612b6a91906144da565b871681600381518110612b7f57612b7f6143d4565b602002602001018181525050608087901c81600481518110612ba357612ba36143d4565b6020026020010181815250508415612caa57835181612bc36001856144da565b81518110612bd357612bd36143d4565b60200260200101818152505060005b8451811015612ca857612c1b858281518110612c0057612c006143d4565b6020026020010151600167080000000000001160c01b011190565b612c5e5760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ef565b848181518110612c7057612c706143d4565b6020026020010151828483612c859190614221565b81518110612c9557612c956143d4565b6020908102919091010152600101612be2565b505b979650505050505050565b600090815260008051602061476b833981519152602052604090206001015490565b61092c81336136ad565b612ceb82826126ec565b610c5b57600082815260008051602061476b833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b7f0000000000000000000000000000000000000000000000000000000000000000811015612dc05760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ef565b662386f26fc1000081111561092c5760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ef565b80600003612e1957505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8691906141ab565b90506000612e948483614221565b905081811015612ed15760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ef565b6040516001600160a01b0386166024820152306044820152606481018590526000906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612f476001600160a01b03881682613711565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015612f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb291906141ab565b90508281146119d05760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ef565b60008082604051602001613017919061438a565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b0382166130815760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ef565b8060000361308e57505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156130d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fb91906141ab565b9050600061310984836144da565b9050818111156131475760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ef565b6040516001600160a01b03861660248201526044810185905260009063a9059cbb60e01b90606401612f00565b61317e82826126ec565b15610c5b57600082815260008051602061476b833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61092c60405180606001604052806028815260200161469c6028913982613836565b61092c6040518060600160405280602681526020016148126026913982613836565b61092c6040518060600160405280602b815260200161485b602b913982613885565b6132566138b8565b156132c4576132736000805160206146c4833981519152836126ec565b6132bf5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ef565b6132cd565b6132cd826138d9565b6132d56139c7565b15613349576132f26000805160206146e4833981519152826126ec565b610c5b5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ef565b610c5b816139e1565b600061335c613a37565b600061336784613a5a565b815260200190815260200160002054600014159050919050565b60008062455447196001600160a01b0384160161339f57504761340a565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156133e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340791906141ab565b90505b6000613414613aa7565b90506064613422828461420a565b61342c9190614506565b949350505050565b60006001613440613a37565b600061344b85613a5a565b81526020019081526020016000205461102891906144da565b61346f600182614221565b613477613a37565b600061348285613a5a565b81526020810191909152604001600020555050565b6134a082613003565b156134db5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ef565b610c5b8282613885565b60408051600480825260a08201909252606091839160009160208201608080368337019050509050836001600160a01b03168160008151811061352a5761352a6143d4565b6020026020010181815250506135a4826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015613577573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261359f9190810190614528565b613aca565b816001815181106135b7576135b76143d4565b602002602001018181525050613604826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015613577573d6000803e3d6000fd5b81600281518110613617576136176143d4565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368591906145ca565b60ff168160038151811061369b5761369b6143d4565b60209081029190910101529392505050565b6136b782826126ec565b610c5b576136cf816001600160a01b03166014613aeb565b6136da836020613aeb565b6040516020016136eb9291906145ed565b60408051601f198184030181529082905262461bcd60e51b82526109ef916004016140f6565b813b6137535760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ef565b600080836001600160a01b03168360405161376e919061438a565b6000604051808303816000865af19150503d80600081146137ab576040519150601f19603f3d011682016040523d82523d6000602084013e6137b0565b606091505b50915091508181906137d55760405162461bcd60e51b81526004016109ef91906140f6565b50805115611d6157808060200190518101906137f19190614662565b611d615760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ef565b600061384183613003565b6001600160a01b0316146134db5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ef565b600082604051602001613898919061438a565b604051602081830303815290604052805190602001209050818155505050565b6000806138d26000805160206146c4833981519152612cb5565b1415905090565b6138f16000805160206146c483398151915282612ce1565b61391760008051602061472b8339815191526000805160206147f2833981519152613c87565b61393d6000805160206147f28339815191526000805160206146c4833981519152613c87565b6139556000805160206146c483398151915280613c87565b61397b6000805160206148c68339815191526000805160206147f2833981519152613c87565b6139a16000805160206148e68339815191526000805160206147f2833981519152613c87565b61092c60008051602061474b8339815191526000805160206146c4833981519152613c87565b6000806138d26000805160206146e4833981519152612cb5565b6139f96000805160206146e483398151915280613c87565b613a1f6000805160206147d28339815191526000805160206146e4833981519152613c87565b61092c6000805160206146e483398151915282612ce1565b600061107760405180606001604052806027815260200161470460279139613ce7565b600080613a6a6201518042614506565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b60006110776040518060600160405280602b815260200161485b602b9139613003565b600080613adf601f613ada855190565b613d1a565b90506109898382613d30565b60606000613afa83600261420a565b613b05906002614221565b67ffffffffffffffff811115613b1d57613b1d614129565b6040519080825280601f01601f191660200182016040528015613b47576020820181803683370190505b509050600360fc1b81600081518110613b6257613b626143d4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613b9157613b916143d4565b60200101906001600160f81b031916908160001a9053506000613bb584600261420a565b613bc0906001614221565b90505b6001811115613c38576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613bf457613bf46143d4565b1a60f81b828281518110613c0a57613c0a6143d4565b60200101906001600160f81b031916908160001a90535060049490941c93613c3181614684565b9050613bc3565b5083156109895760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ef565b6000613c9283612cb5565b600084815260008051602061476b8339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60008082604051602001613cfb919061438a565b60408051601f1981840301815291905280516020909101209392505050565b6000818310613d295781610989565b5090919050565b6000601f821115613d755760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ef565b60208381015190600090613d8a9085906144da565b613d9590600861420a565b9190911c949350505050565b6001600160a01b038116811461092c57600080fd5b600060208284031215613dc857600080fd5b813561098981613da1565b600080600060608486031215613de857600080fd5b8335613df381613da1565b95602085013595506040909401359392505050565b60008060008060808587031215613e1e57600080fd5b8435613e2981613da1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310613e7b57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613e9457600080fd5b823591506020830135613ea681613da1565b809150509250929050565b60008060208385031215613ec457600080fd5b823567ffffffffffffffff80821115613edc57600080fd5b818501915085601f830112613ef057600080fd5b813581811115613eff57600080fd5b866020828501011115613f1157600080fd5b60209290920196919550909350505050565b600080600060608486031215613f3857600080fd5b8335613f4381613da1565b9250602084013591506040840135613f5a81613da1565b809150509250925092565b600060208284031215613f7757600080fd5b5035919050565b60008083601f840112613f9057600080fd5b50813567ffffffffffffffff811115613fa857600080fd5b6020830191508360208260051b8501011115613fc357600080fd5b9250929050565b60008060008060008060a08789031215613fe357600080fd5b8635613fee81613da1565b95506020870135945060408701359350606087013567ffffffffffffffff81111561401857600080fd5b61402489828a01613f7e565b979a9699509497949695608090950135949350505050565b60008060008060006080868803121561405457600080fd5b853561405f81613da1565b94506020860135935060408601359250606086013567ffffffffffffffff81111561408957600080fd5b61409588828901613f7e565b969995985093965092949392505050565b600080604083850312156140b957600080fd5b82356140c481613da1565b946020939093013593505050565b60005b838110156140ed5781810151838201526020016140d5565b50506000910152565b60208152600082518060208401526141158160408501602087016140d2565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b60008151808452602080850194506020840160005b8381101561417057815187529582019590820190600101614154565b509495945050505050565b84815283602082015260806040820152600061419a608083018561413f565b905082606083015295945050505050565b6000602082840312156141bd57600080fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611028576110286141f4565b80820180821115611028576110286141f4565b6000808585111561424457600080fd5b8386111561425157600080fd5b5050820193919092039150565b848152606060208201819052810183905260006001600160fb1b0384111561428557600080fd5b8360051b80866080850137604083019390935250016080019392505050565b6000602082840312156142b657600080fd5b815161098981613da1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b83815282602082015260606040820152600061233b606083018461413f565b6000806040838503121561431e57600080fd5b505080516020909101519092909150565b848152608060208201526000614348608083018661413f565b6040830194909452506060015292915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000825161439c8184602087016140d2565b9190910192915050565b600080604083850312156143b957600080fd5b82356143c481613da1565b91506020830135613ea681613da1565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561442557816000190482111561440b5761440b6141f4565b8085161561441857918102915b93841c93908002906143ef565b509250929050565b60008261443c57506001611028565b8161444957506000611028565b816001811461445f576002811461446957614485565b6001915050611028565b60ff84111561447a5761447a6141f4565b50506001821b611028565b5060208310610133831016604e8410600b84101617156144a8575081810a611028565b6144b283836143ea565b80600019048211156144c6576144c66141f4565b029392505050565b6000610989838361442d565b81810381811115611028576110286141f4565b82815260406020820152600061342c604083018461413f565b60008261452357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561453a57600080fd5b815167ffffffffffffffff8082111561455257600080fd5b818401915084601f83011261456657600080fd5b81518181111561457857614578614129565b604051601f8201601f19908116603f011681019083821181831017156145a0576145a0614129565b816040528281528760208487010111156145b957600080fd5b612caa8360208301602088016140d2565b6000602082840312156145dc57600080fd5b815160ff8116811461098957600080fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516146258160178501602088016140d2565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516146568160288401602088016140d2565b01602801949350505050565b60006020828403121561467457600080fd5b8151801515811461098957600080fd5b600081614693576146936141f4565b50600019019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f544147537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3457495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212205f9a5b9db6c38b24b13e0fc52789c3e207f0c1feb121b54ab7d98ecaa02daa4964736f6c6343000817003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99", - "sourceMap": "948:21044:36:-:0;;;442:13:20;459:1;442:18;441:33;;473:1;441:33;;;464:6;441:33;413:61;;;;948:21044:36;;;;;;;;;-1:-1:-1;479:4:45;463:21;;628:4:49;299:31:44;;;;340:21;:19;:21::i;:::-;258:110;948:21044:36;;2533:142:53;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;:::-;2564:111;2533:142::o;2681:1050::-;2782:28;:26;:28::i;:::-;2778:485;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3037:144:53;;;;-1:-1:-1;;;3037:144:53;;216:2:60;3037:144:53;;;198:21:60;255:2;235:18;;;228:30;294:27;274:18;;;267:55;339:18;;3037:144:53;;;;;;;;;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3494:151:53;;;;-1:-1:-1;;;3494:151:53;;570:2:60;3494:151:53;;;552:21:60;609:2;589:18;;;582:30;648:34;628:18;;;621:62;-1:-1:-1;;;699:18:60;;;692:32;741:19;;3494:151:53;368:398:60;3494:151:53;2681:1050;;:::o;3273:452::-;3676:38;3694:19;3676:17;:38::i;2221:152::-;-1:-1:-1;;;;;;;;;;;2282:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2282:4:53;;2305:44;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;253:64;-1:-1:-1;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;861:66;-1:-1:-1;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;1473:66;-1:-1:-1;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;1683:66;-1:-1:-1;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;-1:-1:-1;;;;;;;;;;;2438:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2438:4:53;;2461:42;5911:116:50;3737:280:53;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;1273:66;-1:-1:-1;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;8830:227:50;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;8433:241::-;8508:25;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;;:24;;;;8564:36;;;;8615:52;;5996:24;;8564:36;;5996:24;;:14;;8615:52;;8508:25;8615:52;8498:176;8433:241;;:::o;368:398:60:-;948:21044:36;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106102c95760003560e01c8063757bd9ab11610175578063cdd1f70d116100dc578063deec9c5a11610095578063eeb728661161006f578063eeb7286614610892578063f3fef3a3146108b4578063fa0f73ba146108d4578063fad8b32a146108f457600080fd5b8063deec9c5a14610832578063ed9ef16a14610852578063ee0e68071461087257600080fd5b8063cdd1f70d14610772578063cf50fd1c14610792578063d08fb6cb146107b2578063d12fc182146107d2578063d2b51eea146107f2578063d9fa70911461081257600080fd5b8063a6d1d6c61161012e578063a6d1d6c6146106d7578063ad8b92b4146106f7578063af8bc15e1461070a578063b5cd0c3c1461071f578063be58b18e1461073f578063cb1cccce1461075257600080fd5b8063757bd9ab146106175780637fc2ab3e146106375780638101b64c146106575780638e5224ff146106775780639463629a14610697578063a2bdde3d146106b757600080fd5b80633ea053eb116102345780635a72af89116101ed57806369328dec116101c757806369328dec146105975780636c04d9d5146105b75780636d70f7ae146105d75780636fc97cbf146105f757600080fd5b80635a72af89146105425780636083e59a1461056257806362a143761461057757600080fd5b80633ea053eb1461047f578063439fab911461049f578063496ae54c146104bf5780634baf43da146104ed5780634d8b92a51461050d5780635a5d1bb91461052257600080fd5b806323205c521161028657806323205c52146103985780632f951985146103b857806330ccebb5146103d857806333eeb1471461042b57806336568abe1461043f5780633682a4501461045f57600080fd5b80630b3a2d21146102ce5780630c6f8664146102f05780630e770f23146103255780630efe6a8b1461034557806314af98b3146103585780631789638314610378575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004613db6565b610914565b005b3480156102fc57600080fd5b5061031061030b366004613db6565b61092f565b60405190151581526020015b60405180910390f35b34801561033157600080fd5b506102ee610340366004613db6565b610990565b6102ee610353366004613dd3565b6109a8565b34801561036457600080fd5b506102ee610373366004613db6565b610a64565b34801561038457600080fd5b506102ee610393366004613db6565b610b0c565b3480156103a457600080fd5b506102ee6103b3366004613e08565b610b24565b3480156103c457600080fd5b506102ee6103d3366004613db6565b610c1a565b3480156103e457600080fd5b5061041e6103f3366004613db6565b6001600160a01b031660009081526000805160206148a6833981519152602052604090205460ff1690565b60405161031c9190613e59565b34801561043757600080fd5b506000610310565b34801561044b57600080fd5b506102ee61045a366004613e81565b610c5f565b34801561046b57600080fd5b506102ee61047a366004613db6565b610cf1565b34801561048b57600080fd5b506102ee61049a366004613db6565b610d09565b3480156104ab57600080fd5b506102ee6104ba366004613eb1565b610e36565b3480156104cb57600080fd5b506104df6104da366004613db6565b610fe7565b60405190815260200161031c565b3480156104f957600080fd5b506104df610508366004613db6565b61102e565b34801561051957600080fd5b506104df61106d565b34801561052e57600080fd5b5061031061053d366004613db6565b61107c565b34801561054e57600080fd5b506102ee61055d366004613db6565b611096565b34801561056e57600080fd5b506000196104df565b34801561058357600080fd5b506102ee610592366004613db6565b61113b565b3480156105a357600080fd5b506102ee6105b2366004613f23565b611153565b3480156105c357600080fd5b506103106105d2366004613db6565b611240565b3480156105e357600080fd5b506103106105f2366004613db6565b61125a565b34801561060357600080fd5b506102ee610612366004613db6565b611274565b34801561062357600080fd5b50610310610632366004613db6565b61128c565b34801561064357600080fd5b506102ee610652366004613f65565b6112a6565b34801561066357600080fd5b506102ee610672366004613db6565b6113cb565b34801561068357600080fd5b50610310610692366004613db6565b61140c565b3480156106a357600080fd5b506102ee6106b2366004613db6565b611426565b3480156106c357600080fd5b506103106106d2366004613db6565b61143e565b3480156106e357600080fd5b506102ee6106f2366004613e08565b611458565b6102ee610705366004613db6565b611539565b34801561071657600080fd5b506104df611786565b34801561072b57600080fd5b506102ee61073a366004613fca565b611790565b6102ee61074d36600461403c565b6118c7565b34801561075e57600080fd5b5061031061076d366004613db6565b6119da565b34801561077e57600080fd5b506102ee61078d366004613db6565b6119f4565b34801561079e57600080fd5b506102ee6107ad366004613fca565b611a0c565b3480156107be57600080fd5b506103106107cd366004613db6565b611b28565b3480156107de57600080fd5b506102ee6107ed366004613db6565b611b42565b3480156107fe57600080fd5b506102ee61080d3660046140a6565b611d67565b34801561081e57600080fd5b506102ee61082d366004613db6565b611e70565b34801561083e57600080fd5b506102ee61084d366004613db6565b611e88565b34801561085e57600080fd5b506102ee61086d366004613db6565b611ea0565b34801561087e57600080fd5b506102ee61088d366004613db6565b611eb8565b34801561089e57600080fd5b506108a7611ef9565b60405161031c91906140f6565b3480156108c057600080fd5b506102ee6108cf3660046140a6565b611f19565b3480156108e057600080fd5b506102ee6108ef366004613db6565b611f24565b34801561090057600080fd5b506102ee61090f366004613db6565b611f3c565b61092c6000805160206148e683398151915282611f54565b50565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff16600181600381111561096c5761096c613e43565b14806109895750600281600381111561098757610987613e43565b145b9392505050565b61092c6000805160206147d283398151915282611f54565b826109b28161092f565b6109f85760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b6040805160008082526020820190925290610a138686611f75565b90506000610a338787878660008051602061488683398151915287612059565b9050610a528787878660008051602061488683398151915286886121be565b610a5b87611b42565b50505050505050565b610a6d3361128c565b610aaf5760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b61092c6000805160206147f283398151915282611f54565b610b2c6122d3565b6001600160a01b0316636170ff1b610b426122f6565b600080516020614886833981519152610b5c888888612319565b856040518563ffffffff1660e01b8152600401610b7c949392919061417b565b6020604051808303816000875af1158015610b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbf91906141ab565b50610bcb848433612344565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610c435760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206147f28339815191528361234f565b5050565b6000805160206146c483398151915282148015610c9a57507f0000000000000000000000000000000000000000000000000000000000000000155b15610ce75760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ef565b610c5b828261236b565b61092c6000805160206148c683398151915282611f54565b33610d126123e5565b6001600160a01b031614610d575760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ef565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff166003811115610d9157610d91613e43565b03610dce5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610ea75760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ef565b6000610eb481602061420a565b90506000610ec3826020614221565b905080831015610f0b5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ef565b6000610f1982848688614234565b810190610f269190613db6565b9050366000610f378582888a614234565b91509150366000610f4a8887818c614234565b90925090506001600160a01b03851615610f7457610f69858383612408565b505050505050505050565b610f7c61254a565b15610fcb578015610fc65760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ef565b610f69565b610fd58282612565565b610fdf828261267d565b610f696126ac565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081206004015460ff1661101f57600019611028565b611028826126b7565b92915050565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081206003015480156110635780610989565b6000199392505050565b60006110776126d8565b905090565b600061102860008051602061472b833981519152836126ec565b61109f33611b28565b6110e15760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b61092c6000805160206146e483398151915282611f54565b6001600160a01b03811661119d5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ef565b6111a8838383612724565b6001600160a01b03831660009081526000805160206148a6833981519152602052604090206004015460ff16156111e3576111e383836128c3565b6111ee838383612344565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63988460405161123391815260200190565b60405180910390a3505050565b600061102860008051602061474b833981519152836126ec565b60006110286000805160206148c6833981519152836126ec565b61092c60008051602061474b83398151915282611f54565b60006110286000805160206147d2833981519152836126ec565b6112af3361107c565b6112ef5760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ef565b6112f761254a565b6113435760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ef565b61134c81612933565b6113925760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ef565b61139b81612956565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610e2b565b80336001600160a01b038216036113f45760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206146e48339815191528361234f565b60006110286000805160206147f2833981519152836126ec565b61092c6000805160206146c483398151915282611f54565b60006110286000805160206148e6833981519152836126ec565b6114606122d3565b6001600160a01b0316637a98660b6114766122f6565b600080516020614886833981519152611490888888612319565b856040518563ffffffff1660e01b81526004016114b0949392919061417b565b6020604051808303816000875af11580156114cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f391906141ab565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610c0c565b336115426123e5565b6001600160a01b0316146115875760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ef565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff1660038111156115c1576115c1613e43565b146116075760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ef565b600061161282612978565b9050600061161e6122d3565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b815260040161164b91815260200190565b602060405180830381865afa158015611668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168c91906141ab565b116116d95760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ef565b6001600160a01b03821660009081526000805160206148a683398151915260205260409020805460ff1916600190811782550181905561171c6206978042614221565b6000805160206148a68339815191526001600160a01b038416600081815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b6000611077612a5d565b6117986122d3565b6001600160a01b0316636170ff1b6117ae6122f6565b6000805160206147b28339815191526117fe8a8a8a60018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7092505050565b856040518563ffffffff1660e01b815260040161181e949392919061417b565b6020604051808303816000875af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186191906141ab565b5061186d868633612344565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f73888787876040516118b7949392919061425e565b60405180910390a4505050505050565b846118d18161092f565b6119125760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ef565b600061191e8787611f75565b905060006119738888888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206147b283398151915292508991506120599050565b90506119c78888888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206147b283398151915292508891508990506121be565b6119d088611b42565b5050505050505050565b60006110286000805160206146c4833981519152836126ec565b61092c60008051602061472b83398151915282611f54565b611a146122d3565b6001600160a01b0316637a98660b611a2a6122f6565b6000805160206147b2833981519152611a7a8a8a8a60018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7092505050565b856040518563ffffffff1660e01b8152600401611a9a949392919061417b565b6020604051808303816000875af1158015611ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611add91906141ab565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd5057603860888787876040516118b7949392919061425e565b60006110286000805160206146e4833981519152836126ec565b6001600160a01b03811660009081526000805160206148a68339815191526020526040902054819060019060ff166003811115611b8157611b81613e43565b14611b8a575050565b6001600160a01b03821660009081526000805160206148a6833981519152602052604090206001810154611bbc6122d3565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611be991815260200190565b602060405180830381865afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a91906141ab565b600003611c4157815460ff19166002178255611d61565b8160020154421115611d61576001600160a01b03841660009081526000805160206148a683398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611ca56123e5565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0691906142a4565b604051630caca05160e31b81526001600160a01b03878116600483015291925090821690636565028890602401600060405180830381600087803b158015611d4d57600080fd5b505af1158015610f69573d6000803e3d6000fd5b50505050565b611d703361107c565b611db05760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ef565b80600003611e005760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ef565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611e3b91815260200190565b60405180910390a26001600160a01b039190911660009081526000805160206148a68339815191526020526040902060030155565b61092c6000805160206147d28339815191528261234f565b61092c60008051602061472b8339815191528261234f565b61092c60008051602061474b8339815191528261234f565b80336001600160a01b03821603611ee15760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206146c48339815191528361234f565b606060405180606001604052806023815260200161483860239139905090565b610c5b828233611153565b61092c6000805160206148e68339815191528261234f565b61092c6000805160206148c68339815191528261234f565b611f5d82612cb5565b611f6681612cd7565b611f708383612ce1565b505050565b6000611f8034612d57565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611feb91906141ab565b9050611ff68461102e565b6120008483614221565b11156120455760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ef565b612050843385612e0c565b50349392505050565b60006120636122f6565b6000036120825760405162461bcd60e51b81526004016109ef906142c1565b600086116120c15760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ef565b6120ca85612933565b6121105760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ef565b6000805160206147b28339815191528314600061212b6122d3565b6001600160a01b0316633e3aa6c5856121426122f6565b886121508e8e8e8a8f612a70565b6040518563ffffffff1660e01b815260040161216e939291906142ec565b604080518083038185885af115801561218b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121b0919061430b565b9a9950505050505050505050565b600080516020614886833981519152830361222857604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a5b565b6000805160206147b283398151915283146122785760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ef565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f1898887876040516122c2949392919061432f565b60405180910390a450505050505050565b600061107760405180606001604052806028815260200161469c60289139613003565b600061107760405180606001604052806027815260200161478b60279139613003565b604080516000808252602082019092526060915061233b858585600085612a70565b95945050505050565b611f70838284613037565b61235882612cb5565b61236181612cd7565b611f708383613174565b6001600160a01b03811633146123db5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ef565b610c5b8282613174565b600061107760405180606001604052806026815260200161481260269139613003565b6001600160a01b0383163b6124545760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ef565b600080846001600160a01b031663439fab9160e01b858560405160240161247c92919061435b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516124ba919061438a565b600060405180830381855af49150503d80600081146124f5576040519150601f19603f3d011682016040523d82523d6000602084013e6124fa565b606091505b509150915081819061251f5760405162461bcd60e51b81526004016109ef91906140f6565b5080518190156125425760405162461bcd60e51b81526004016109ef91906140f6565b505050505050565b6000806125556122d3565b6001600160a01b03161415905090565b604081146125a95760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ef565b6000806125b8838501856143a6565b915091506125cf816001600160a01b03163b151590565b6126265760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ef565b6001600160a01b0382163b611d615760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ef565b60008061268c838501856143a6565b91509150612699816131e8565b6126a28261320a565b611d61600561322c565b3361092c818061324e565b60006126c282613352565b6126cf5761102882613381565b61102882613434565b600061107764012a05f200620186a061420a565b600091825260008051602061476b833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61272c6122f6565b60000361274b5760405162461bcd60e51b81526004016109ef906142c1565b60408051600580825260c082019092526000916020820160a080368337019050509050600081600081518110612783576127836143d4565b602002602001018181525050816001600160a01b0316816001815181106127ac576127ac6143d4565b602002602001018181525050836001600160a01b0316816002815181106127d5576127d56143d4565b602090810291909101015260016127ee608060026144ce565b6127f891906144da565b83168160038151811061280d5761280d6143d4565b602002602001018181525050608083901c81600481518110612831576128316143d4565b6020026020010181815250506128456122d3565b6001600160a01b0316632c9dd5c061285b6122f6565b836040518363ffffffff1660e01b81526004016128799291906144ed565b6020604051808303816000875af1158015612898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bc91906141ab565b5050505050565b60006128ce836126b7565b9050818110156129205760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ef565b611f708361292e84846144da565b613464565b60008115801590611028575061102882600167080000000000001160c01b011190565b61092c60405180606001604052806027815260200161478b6027913982613497565b60006129826122f6565b6000036129a15760405162461bcd60e51b81526004016109ef906142c1565b6129aa34612d57565b60006129b46122d3565b6001600160a01b0316633e3aa6c5346129cb6122f6565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc6129f5886134e5565b6040518563ffffffff1660e01b8152600401612a13939291906142ec565b604080518083038185885af1158015612a30573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a55919061430b565b509392505050565b600061107764012a05f200614e2061420a565b6060600083612a80576005612a8c565b612a8c60016005614221565b90506000835182612a9d9190614221565b67ffffffffffffffff811115612ab557612ab5614129565b604051908082528060200260200182016040528015612ade578160200160208202803683370190505b509050876001600160a01b031681600081518110612afe57612afe6143d4565b602002602001018181525050336001600160a01b031681600181518110612b2757612b276143d4565b6020026020010181815250508581600281518110612b4757612b476143d4565b60209081029190910101526001612b60608060026144ce565b612b6a91906144da565b871681600381518110612b7f57612b7f6143d4565b602002602001018181525050608087901c81600481518110612ba357612ba36143d4565b6020026020010181815250508415612caa57835181612bc36001856144da565b81518110612bd357612bd36143d4565b60200260200101818152505060005b8451811015612ca857612c1b858281518110612c0057612c006143d4565b6020026020010151600167080000000000001160c01b011190565b612c5e5760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ef565b848181518110612c7057612c706143d4565b6020026020010151828483612c859190614221565b81518110612c9557612c956143d4565b6020908102919091010152600101612be2565b505b979650505050505050565b600090815260008051602061476b833981519152602052604090206001015490565b61092c81336136ad565b612ceb82826126ec565b610c5b57600082815260008051602061476b833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b7f0000000000000000000000000000000000000000000000000000000000000000811015612dc05760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ef565b662386f26fc1000081111561092c5760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ef565b80600003612e1957505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8691906141ab565b90506000612e948483614221565b905081811015612ed15760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ef565b6040516001600160a01b0386166024820152306044820152606481018590526000906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612f476001600160a01b03881682613711565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015612f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb291906141ab565b90508281146119d05760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ef565b60008082604051602001613017919061438a565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b0382166130815760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ef565b8060000361308e57505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156130d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fb91906141ab565b9050600061310984836144da565b9050818111156131475760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ef565b6040516001600160a01b03861660248201526044810185905260009063a9059cbb60e01b90606401612f00565b61317e82826126ec565b15610c5b57600082815260008051602061476b833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61092c60405180606001604052806028815260200161469c6028913982613836565b61092c6040518060600160405280602681526020016148126026913982613836565b61092c6040518060600160405280602b815260200161485b602b913982613885565b6132566138b8565b156132c4576132736000805160206146c4833981519152836126ec565b6132bf5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ef565b6132cd565b6132cd826138d9565b6132d56139c7565b15613349576132f26000805160206146e4833981519152826126ec565b610c5b5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ef565b610c5b816139e1565b600061335c613a37565b600061336784613a5a565b815260200190815260200160002054600014159050919050565b60008062455447196001600160a01b0384160161339f57504761340a565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156133e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340791906141ab565b90505b6000613414613aa7565b90506064613422828461420a565b61342c9190614506565b949350505050565b60006001613440613a37565b600061344b85613a5a565b81526020019081526020016000205461102891906144da565b61346f600182614221565b613477613a37565b600061348285613a5a565b81526020810191909152604001600020555050565b6134a082613003565b156134db5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ef565b610c5b8282613885565b60408051600480825260a08201909252606091839160009160208201608080368337019050509050836001600160a01b03168160008151811061352a5761352a6143d4565b6020026020010181815250506135a4826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015613577573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261359f9190810190614528565b613aca565b816001815181106135b7576135b76143d4565b602002602001018181525050613604826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015613577573d6000803e3d6000fd5b81600281518110613617576136176143d4565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368591906145ca565b60ff168160038151811061369b5761369b6143d4565b60209081029190910101529392505050565b6136b782826126ec565b610c5b576136cf816001600160a01b03166014613aeb565b6136da836020613aeb565b6040516020016136eb9291906145ed565b60408051601f198184030181529082905262461bcd60e51b82526109ef916004016140f6565b813b6137535760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ef565b600080836001600160a01b03168360405161376e919061438a565b6000604051808303816000865af19150503d80600081146137ab576040519150601f19603f3d011682016040523d82523d6000602084013e6137b0565b606091505b50915091508181906137d55760405162461bcd60e51b81526004016109ef91906140f6565b50805115611d6157808060200190518101906137f19190614662565b611d615760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ef565b600061384183613003565b6001600160a01b0316146134db5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ef565b600082604051602001613898919061438a565b604051602081830303815290604052805190602001209050818155505050565b6000806138d26000805160206146c4833981519152612cb5565b1415905090565b6138f16000805160206146c483398151915282612ce1565b61391760008051602061472b8339815191526000805160206147f2833981519152613c87565b61393d6000805160206147f28339815191526000805160206146c4833981519152613c87565b6139556000805160206146c483398151915280613c87565b61397b6000805160206148c68339815191526000805160206147f2833981519152613c87565b6139a16000805160206148e68339815191526000805160206147f2833981519152613c87565b61092c60008051602061474b8339815191526000805160206146c4833981519152613c87565b6000806138d26000805160206146e4833981519152612cb5565b6139f96000805160206146e483398151915280613c87565b613a1f6000805160206147d28339815191526000805160206146e4833981519152613c87565b61092c6000805160206146e483398151915282612ce1565b600061107760405180606001604052806027815260200161470460279139613ce7565b600080613a6a6201518042614506565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b60006110776040518060600160405280602b815260200161485b602b9139613003565b600080613adf601f613ada855190565b613d1a565b90506109898382613d30565b60606000613afa83600261420a565b613b05906002614221565b67ffffffffffffffff811115613b1d57613b1d614129565b6040519080825280601f01601f191660200182016040528015613b47576020820181803683370190505b509050600360fc1b81600081518110613b6257613b626143d4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613b9157613b916143d4565b60200101906001600160f81b031916908160001a9053506000613bb584600261420a565b613bc0906001614221565b90505b6001811115613c38576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613bf457613bf46143d4565b1a60f81b828281518110613c0a57613c0a6143d4565b60200101906001600160f81b031916908160001a90535060049490941c93613c3181614684565b9050613bc3565b5083156109895760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ef565b6000613c9283612cb5565b600084815260008051602061476b8339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60008082604051602001613cfb919061438a565b60408051601f1981840301815291905280516020909101209392505050565b6000818310613d295781610989565b5090919050565b6000601f821115613d755760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ef565b60208381015190600090613d8a9085906144da565b613d9590600861420a565b9190911c949350505050565b6001600160a01b038116811461092c57600080fd5b600060208284031215613dc857600080fd5b813561098981613da1565b600080600060608486031215613de857600080fd5b8335613df381613da1565b95602085013595506040909401359392505050565b60008060008060808587031215613e1e57600080fd5b8435613e2981613da1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310613e7b57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613e9457600080fd5b823591506020830135613ea681613da1565b809150509250929050565b60008060208385031215613ec457600080fd5b823567ffffffffffffffff80821115613edc57600080fd5b818501915085601f830112613ef057600080fd5b813581811115613eff57600080fd5b866020828501011115613f1157600080fd5b60209290920196919550909350505050565b600080600060608486031215613f3857600080fd5b8335613f4381613da1565b9250602084013591506040840135613f5a81613da1565b809150509250925092565b600060208284031215613f7757600080fd5b5035919050565b60008083601f840112613f9057600080fd5b50813567ffffffffffffffff811115613fa857600080fd5b6020830191508360208260051b8501011115613fc357600080fd5b9250929050565b60008060008060008060a08789031215613fe357600080fd5b8635613fee81613da1565b95506020870135945060408701359350606087013567ffffffffffffffff81111561401857600080fd5b61402489828a01613f7e565b979a9699509497949695608090950135949350505050565b60008060008060006080868803121561405457600080fd5b853561405f81613da1565b94506020860135935060408601359250606086013567ffffffffffffffff81111561408957600080fd5b61409588828901613f7e565b969995985093965092949392505050565b600080604083850312156140b957600080fd5b82356140c481613da1565b946020939093013593505050565b60005b838110156140ed5781810151838201526020016140d5565b50506000910152565b60208152600082518060208401526141158160408501602087016140d2565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b60008151808452602080850194506020840160005b8381101561417057815187529582019590820190600101614154565b509495945050505050565b84815283602082015260806040820152600061419a608083018561413f565b905082606083015295945050505050565b6000602082840312156141bd57600080fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611028576110286141f4565b80820180821115611028576110286141f4565b6000808585111561424457600080fd5b8386111561425157600080fd5b5050820193919092039150565b848152606060208201819052810183905260006001600160fb1b0384111561428557600080fd5b8360051b80866080850137604083019390935250016080019392505050565b6000602082840312156142b657600080fd5b815161098981613da1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b83815282602082015260606040820152600061233b606083018461413f565b6000806040838503121561431e57600080fd5b505080516020909101519092909150565b848152608060208201526000614348608083018661413f565b6040830194909452506060015292915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000825161439c8184602087016140d2565b9190910192915050565b600080604083850312156143b957600080fd5b82356143c481613da1565b91506020830135613ea681613da1565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561442557816000190482111561440b5761440b6141f4565b8085161561441857918102915b93841c93908002906143ef565b509250929050565b60008261443c57506001611028565b8161444957506000611028565b816001811461445f576002811461446957614485565b6001915050611028565b60ff84111561447a5761447a6141f4565b50506001821b611028565b5060208310610133831016604e8410600b84101617156144a8575081810a611028565b6144b283836143ea565b80600019048211156144c6576144c66141f4565b029392505050565b6000610989838361442d565b81810381811115611028576110286141f4565b82815260406020820152600061342c604083018461413f565b60008261452357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561453a57600080fd5b815167ffffffffffffffff8082111561455257600080fd5b818401915084601f83011261456657600080fd5b81518181111561457857614578614129565b604051601f8201601f19908116603f011681019083821181831017156145a0576145a0614129565b816040528281528760208487010111156145b957600080fd5b612caa8360208301602088016140d2565b6000602082840312156145dc57600080fd5b815160ff8116811461098957600080fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516146258160178501602088016140d2565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516146568160288401602088016140d2565b01602801949350505050565b60006020828403121561467457600080fd5b8151801515811461098957600080fd5b600081614693576146936141f4565b50600019019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f544147537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3457495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212205f9a5b9db6c38b24b13e0fc52789c3e207f0c1feb121b54ab7d98ecaa02daa4964736f6c63430008170033", - "sourceMap": "948:21044:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:116:44;;;;;;;;;;-1:-1:-1;3283:116:44;;;;;:::i;:::-;;:::i;:::-;;7546:220:36;;;;;;;;;;-1:-1:-1;7546:220:36;;;;;:::i;:::-;;:::i;:::-;;;567:14:60;;560:22;542:41;;530:2;515:18;7546:220:36;;;;;;;;3155:122:44;;;;;;;;;;-1:-1:-1;3155:122:44;;;;;:::i;:::-;;:::i;10855:794:36:-;;;;;;:::i;:::-;;:::i;12613:198::-;;;;;;;;;;-1:-1:-1;12613:198:36;;;;;:::i;:::-;;:::i;2651:121:44:-;;;;;;;;;;-1:-1:-1;2651:121:44;;;;;:::i;:::-;;:::i;21500:490:36:-;;;;;;;;;;-1:-1:-1;21500:490:36;;;;;:::i;:::-;;:::i;3680:137:44:-;;;;;;;;;;-1:-1:-1;3680:137:44;;;;;:::i;:::-;;:::i;7412:128:36:-;;;;;;;;;;-1:-1:-1;7412:128:36;;;;;:::i;:::-;-1:-1:-1;;;;;7499:22:36;7469:11;7499:22;;;-1:-1:-1;;;;;;;;;;;7499:22:36;;;;;:34;;;;7412:128;;;;;;;;:::i;757:86:49:-;;;;;;;;;;-1:-1:-1;808:4:49;757:86;;4632:247:44;;;;;;;;;;-1:-1:-1;4632:247:44;;;;;:::i;:::-;;:::i;2910:111::-;;;;;;;;;;-1:-1:-1;2910:111:44;;;;;:::i;:::-;;:::i;8853:272:36:-;;;;;;;;;;-1:-1:-1;8853:272:36;;;;;:::i;:::-;;:::i;1465:1033:49:-;;;;;;;;;;-1:-1:-1;1465:1033:49;;;;;:::i;:::-;;:::i;8031:274:36:-;;;;;;;;;;-1:-1:-1;8031:274:36;;;;;:::i;:::-;;:::i;:::-;;;2983:25:60;;;2971:2;2956:18;8031:274:36;2837:177:60;13793:229:36;;;;;;;;;;-1:-1:-1;13793:229:36;;;;;:::i;:::-;;:::i;4993:120::-;;;;;;;;;;;;;:::i;1359:135:44:-;;;;;;;;;;-1:-1:-1;1359:135:44;;;;;:::i;:::-;;:::i;12877:201:36:-;;;;;;;;;;-1:-1:-1;12877:201:36;;;;;:::i;:::-;;:::i;14161:95::-;;;;;;;;;;-1:-1:-1;;;14161:95:36;;3027:122:44;;;;;;;;;;-1:-1:-1;3027:122:44;;;;;:::i;:::-;;:::i;18032:793:36:-;;;;;;;;;;-1:-1:-1;18032:793:36;;;;;:::i;:::-;;:::i;2356:143:44:-;;;;;;;;;;-1:-1:-1;2356:143:44;;;;;:::i;:::-;;:::i;1793:128::-;;;;;;;;;;-1:-1:-1;1793:128:44;;;;;:::i;:::-;;:::i;3405:126::-;;;;;;;;;;-1:-1:-1;3405:126:44;;;;;:::i;:::-;;:::i;2072:139::-;;;;;;;;;;-1:-1:-1;2072:139:44;;;;;:::i;:::-;;:::i;12240:309:36:-;;;;;;;;;;-1:-1:-1;12240:309:36;;;;;:::i;:::-;;:::i;4087:138:44:-;;;;;;;;;;-1:-1:-1;4087:138:44;;;;;:::i;:::-;;:::i;1500:::-;;;;;;;;;;-1:-1:-1;1500:138:44;;;;;:::i;:::-;;:::i;2778:126::-;;;;;;;;;;-1:-1:-1;2778:126:44;;;;;:::i;:::-;;:::i;2217:133::-;;;;;;;;;;-1:-1:-1;2217:133:44;;;;;:::i;:::-;;:::i;19535:458:36:-;;;;;;;;;;-1:-1:-1;19535:458:36;;;;;:::i;:::-;;:::i;6658:748::-;;;;;;:::i;:::-;;:::i;4873:114::-;;;;;;;;;;;;;:::i;20804:690::-;;;;;;;;;;-1:-1:-1;20804:690:36;;;;;:::i;:::-;;:::i;10053:796::-;;;;;;:::i;:::-;;:::i;1644:143:44:-;;;;;;;;;;-1:-1:-1;1644:143:44;;;;;:::i;:::-;;:::i;2527:118::-;;;;;;;;;;-1:-1:-1;2527:118:44;;;;;:::i;:::-;;:::i;20058:740:36:-;;;;;;;;;;-1:-1:-1;20058:740:36;;;;;:::i;:::-;;:::i;1927:139:44:-;;;;;;;;;;-1:-1:-1;1927:139:44;;;;;:::i;:::-;;:::i;9458:589:36:-;;;;;;;;;;-1:-1:-1;9458:589:36;;;;;:::i;:::-;;:::i;13376:295::-;;;;;;;;;;-1:-1:-1;13376:295:36;;;;;:::i;:::-;;:::i;4231:121:44:-;;;;;;;;;;-1:-1:-1;4231:121:44;;;;;:::i;:::-;;:::i;3557:117::-;;;;;;;;;;-1:-1:-1;3557:117:44;;;;;:::i;:::-;;:::i;4479:125::-;;;;;;;;;;-1:-1:-1;4479:125:44;;;;;:::i;:::-;;:::i;3823:142::-;;;;;;;;;;-1:-1:-1;3823:142:44;;;;;:::i;:::-;;:::i;3016:127:36:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18831:110::-;;;;;;;;;;-1:-1:-1;18831:110:36;;;;;:::i;:::-;;:::i;4358:115:44:-;;;;;;;;;;-1:-1:-1;4358:115:44;;;;;:::i;:::-;;:::i;3971:110::-;;;;;;;;;;-1:-1:-1;3971:110:44;;;;;:::i;:::-;;:::i;3283:116::-;3347:45;-1:-1:-1;;;;;;;;;;;3384:7:44;3347:23;:45::i;:::-;3283:116;:::o;7546:220:36:-;-1:-1:-1;;;;;7645:22:36;;7608:4;7645:22;;;-1:-1:-1;;;;;;;;;;;7645:22:36;;;;;:34;;;;;7697:29;;;;;;;;:::i;:::-;;:61;;;-1:-1:-1;7740:18:36;7730:6;:28;;;;;;;;:::i;:::-;;7697:61;7689:70;7546:220;-1:-1:-1;;;7546:220:36:o;3155:122:44:-;3222:48;-1:-1:-1;;;;;;;;;;;3262:7:44;3222:23;:48::i;10855:794:36:-;10990:5;4803:23;4820:5;4803:16;:23::i;:::-;4795:54;;;;-1:-1:-1;;;4795:54:36;;6712:2:60;4795:54:36;;;6694:21:60;6751:2;6731:18;;;6724:30;-1:-1:-1;;;6770:18:60;;;6763:48;6828:18;;4795:54:36;;;;;;;;;11036:16:::1;::::0;;11007:26:::1;11036:16:::0;;;::::1;::::0;::::1;::::0;;;;11076:28:::1;11090:5:::0;11097:6;11076:13:::1;:28::i;:::-;11062:42;;11114:13;11130:175;11162:5;11181:6;11201:11;11226:9;-1:-1:-1::0;;;;;;;;;;;11292:3:36::1;11130:18;:175::i;:::-;11114:191;;11315:192;11345:5;11364:6;11384:11;11409:9;-1:-1:-1::0;;;;;;;;;;;11475:5:36::1;11494:3;11315:16;:192::i;:::-;11614:28;11636:5;11614:21;:28::i;:::-;10997:652;;;10855:794:::0;;;;:::o;12613:198::-;831:43:44;3290:10:50;2072:139:44;:::i;831:43::-;823:75;;;;-1:-1:-1;;;823:75:44;;7191:2:60;823:75:44;;;7173:21:60;7230:2;7210:18;;;7203:30;-1:-1:-1;;;7249:18:60;;;7242:49;7308:18;;823:75:44;6989:343:60;823:75:44;-1:-1:-1;;;;;12696:22:36;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;12696:22:36::1;::::0;;;;;:45:::1;;:52:::0;;-1:-1:-1;;12696:52:36::1;12744:4;12696:52;::::0;;12763:41;12786:10:::1;::::0;12763:41:::1;::::0;::::1;12613:198:::0;:::o;2651:121:44:-;2717:48;-1:-1:-1;;;;;;;;;;;2757:7:44;2717:23;:48::i;21500:490:36:-;21648:19;:17;:19::i;:::-;-1:-1:-1;;;;;21648:39:36;;21701:15;:13;:15::i;:::-;-1:-1:-1;;;;;;;;;;;21773:49:36;21795:5;21802:6;21810:11;21773:21;:49::i;:::-;21836:5;21648:203;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21862:43;21879:5;21886:6;21894:10;21862:16;:43::i;:::-;21920:63;;;8625:25:60;;;8681:2;8666:18;;8659:34;;;21964:11:36;;-1:-1:-1;;;;;21920:63:36;;;21937:10;;21920:63;;8598:18:60;21920:63:36;;;;;;;;21500:490;;;;:::o;3680:137:44:-;3742:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;3761:49:::1;-1:-1:-1::0;;;;;;;;;;;3802:7:44;3761:24:::1;:49::i;:::-;3680:137:::0;;:::o;4632:247::-;-1:-1:-1;;;;;;;;;;;4708:24:44;;:45;;;;;4737:16;4736:17;4708:45;4704:118;;;4769:42;;-1:-1:-1;;;4769:42:44;;9257:2:60;4769:42:44;;;9239:21:60;;;9276:18;;;9269:30;9335:34;9315:18;;;9308:62;9387:18;;4769:42:44;9055:356:60;4704:118:44;4831:41;4858:4;4864:7;4831:26;:41::i;2910:111::-;2972:42;-1:-1:-1;;;;;;;;;;;3006:7:44;2972:23;:42::i;8853:272:36:-;4546:10;4533:9;:7;:9::i;:::-;-1:-1:-1;;;;;4533:23:36;;4525:48;;;;-1:-1:-1;;;4525:48:36;;9618:2:60;4525:48:36;;;9600:21:60;9657:2;9637:18;;;9630:30;-1:-1:-1;;;9676:18:60;;;9669:42;9728:18;;4525:48:36;9416:336:60;4525:48:36;-1:-1:-1;;;;;8935:22:36;::::1;8973:19;8935:22:::0;;;-1:-1:-1;;;;;;;;;;;8935:22:36::1;::::0;;;;:34;::::1;;:57;::::0;::::1;;;;;;:::i;:::-;::::0;8927:83:::1;;;::::0;-1:-1:-1;;;8927:83:36;;9959:2:60;8927:83:36::1;::::0;::::1;9941:21:60::0;9998:2;9978:18;;;9971:30;-1:-1:-1;;;10017:18:60;;;10010:43;10070:18;;8927:83:36::1;9757:337:60::0;8927:83:36::1;-1:-1:-1::0;;;;;9020:22:36;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;9020:22:36::1;::::0;;;;;;;;:60;;-1:-1:-1;;9020:60:36::1;9057:23;9020:60;::::0;;9095:23;;10245:51:60;;;9095:23:36::1;::::0;10218:18:60;9095:23:36::1;;;;;;;;8853:272:::0;:::o;1465:1033:49:-;561:4:45;544:5;-1:-1:-1;;;;;544:22:45;;536:57;;;;-1:-1:-1;;;536:57:45;;10509:2:60;536:57:45;;;10491:21:60;10548:2;10528:18;;;10521:30;-1:-1:-1;;;10567:18:60;;;10560:52;10629:18;;536:57:45;10307:346:60;536:57:45;1543:17:49::1;1563:24;1543:17:::0;1563:2:::1;:24;:::i;:::-;1543:44:::0;-1:-1:-1;1597:24:49::1;1624:14;1543:44:::0;1636:2:::1;1624:14;:::i;:::-;1597:41:::0;-1:-1:-1;1656:31:49;;::::1;;1648:63;;;::::0;-1:-1:-1;;;1648:63:49;;11295:2:60;1648:63:49::1;::::0;::::1;11277:21:60::0;11334:2;11314:18;;;11307:30;-1:-1:-1;;;11353:18:60;;;11346:49;11412:18;;1648:63:49::1;11093:343:60::0;1648:63:49::1;1721:18;1753:32;1768:16:::0;1758:9;1753:4;;:32:::1;:::i;:::-;1742:55;;;;;;;:::i;:::-;1721:76:::0;-1:-1:-1;1808:35:49::1;;1846:16;1852:9:::0;1808:35;1846:4;;:16:::1;:::i;:::-;1808:54;;;;1933:23;;1959;:4:::0;1964:16;1959:4;;:23:::1;:::i;:::-;1933:49:::0;;-1:-1:-1;1933:49:49;-1:-1:-1;;;;;;2077:26:49;::::1;::::0;2073:122:::1;;2119:45;2143:10;2155:8;;2119:23;:45::i;:::-;2178:7;;;;;;;3680:137:44::0;;:::o;2073:122:49:-:1;2209:15;:13;:15::i;:::-;2205:287;;;2248:20:::0;;2240:53:::1;;;::::0;-1:-1:-1;;;2240:53:49;;12239:2:60;2240:53:49::1;::::0;::::1;12221:21:60::0;12278:2;12258:18;;;12251:30;-1:-1:-1;;;12297:18:60;;;12290:50;12357:18;;2240:53:49::1;12037:344:60::0;2240:53:49::1;2205:287;;;2373:26;2390:8;;2373:16;:26::i;:::-;2413:33;2437:8;;2413:23;:33::i;:::-;2460:21;:19;:21::i;8031:274:36:-:0;-1:-1:-1;;;;;8146:22:36;;8108:7;8146:22;;;-1:-1:-1;;;;;;;;;;;8146:22:36;;;;;:45;;;;;:152;;-1:-1:-1;;8146:152:36;;;8210:52;8256:5;8210:45;:52::i;:::-;8127:171;8031:274;-1:-1:-1;;8031:274:36:o;13793:229::-;-1:-1:-1;;;;;13902:22:36;;13857:7;13902:22;;;-1:-1:-1;;;;;;;;;;;13902:22:36;;;;;:38;;;13957:20;;:58;;14000:15;13957:58;;;-1:-1:-1;;13950:65:36;13793:229;-1:-1:-1;;;13793:229:36:o;4993:120::-;5052:7;5078:28;:26;:28::i;:::-;5071:35;;4993:120;:::o;1359:135:44:-;1420:4;1443:44;-1:-1:-1;;;;;;;;;;;1479:7:44;1443:21;:44::i;12877:201:36:-;693:43:44;3290:10:50;1927:139:44;:::i;693:43::-;685:75;;;;-1:-1:-1;;;685:75:44;;12588:2:60;685:75:44;;;12570:21:60;12627:2;12607:18;;;12600:30;-1:-1:-1;;;12646:18:60;;;12639:49;12705:18;;685:75:44;12386:343:60;685:75:44;-1:-1:-1;;;;;12961:22:36;::::1;13009:5;12961:22:::0;;;-1:-1:-1;;;;;;;;;;;12961:22:36::1;::::0;;;;;:45:::1;;:53:::0;;-1:-1:-1;;12961:53:36::1;::::0;;13029:42;13053:10:::1;::::0;13029:42:::1;::::0;::::1;12877:201:::0;:::o;3027:122:44:-;3094:48;-1:-1:-1;;;;;;;;;;;3134:7:44;3094:23;:48::i;18032:793:36:-;-1:-1:-1;;;;;18210:25:36;;18202:55;;;;-1:-1:-1;;;18202:55:36;;12936:2:60;18202:55:36;;;12918:21:60;12975:2;12955:18;;;12948:30;-1:-1:-1;;;12994:18:60;;;12987:47;13051:18;;18202:55:36;12734:341:60;18202:55:36;18401:40;18416:5;18423:6;18431:9;18401:14;:40::i;:::-;-1:-1:-1;;;;;18523:22:36;;;;;;-1:-1:-1;;;;;;;;;;;18523:22:36;;;;;:45;;;;;18519:197;;;18654:51;18691:5;18698:6;18654:36;:51::i;:::-;18725:42;18742:5;18749:6;18757:9;18725:16;:42::i;:::-;18804:5;-1:-1:-1;;;;;18782:36:36;18793:9;-1:-1:-1;;;;;18782:36:36;;18811:6;18782:36;;;;2983:25:60;;2971:2;2956:18;;2837:177;18782:36:36;;;;;;;;18032:793;;;:::o;2356:143:44:-;2421:4;2444:48;-1:-1:-1;;;;;;;;;;;2484:7:44;2444:21;:48::i;1793:128::-;1851:4;1874:40;-1:-1:-1;;;;;;;;;;;1906:7:44;1874:21;:40::i;3405:126::-;3474:50;-1:-1:-1;;;;;;;;;;;3516:7:44;3474:23;:50::i;2072:139::-;2135:4;2158:46;-1:-1:-1;;;;;;;;;;;2196:7:44;2158:21;:46::i;12240:309:36:-;437:41:44;3290:10:50;1359:135:44;:::i;437:41::-;429:71;;;;-1:-1:-1;;;429:71:44;;13282:2:60;429:71:44;;;13264:21:60;13321:2;13301:18;;;13294:30;-1:-1:-1;;;13340:18:60;;;13333:47;13397:18;;429:71:44;13080:341:60;429:71:44;12333:15:36::1;:13;:15::i;:::-;12325:52;;;::::0;-1:-1:-1;;;12325:52:36;;13628:2:60;12325:52:36::1;::::0;::::1;13610:21:60::0;13667:2;13647:18;;;13640:30;13706:26;13686:18;;;13679:54;13750:18;;12325:52:36::1;13426:348:60::0;12325:52:36::1;12395:33;:14;:31;:33::i;:::-;12387:69;;;::::0;-1:-1:-1;;;12387:69:36;;13981:2:60;12387:69:36::1;::::0;::::1;13963:21:60::0;14020:2;14000:18;;;13993:30;-1:-1:-1;;;14039:18:60;;;14032:53;14102:18;;12387:69:36::1;13779:347:60::0;12387:69:36::1;12466:29;12480:14;12466:13;:29::i;:::-;12510:32;::::0;2983:25:60;;;12510:32:36::1;::::0;2971:2:60;2956:18;12510:32:36::1;2837:177:60::0;4087:138:44;4150:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;4169:49:::1;-1:-1:-1::0;;;;;;;;;;;4210:7:44;4169:24:::1;:49::i;1500:138::-:0;1562:4;1585:46;-1:-1:-1;;;;;;;;;;;1623:7:44;1585:21;:46::i;2778:126::-;2847:50;-1:-1:-1;;;;;;;;;;;2889:7:44;2847:23;:50::i;2217:133::-;2277:4;2300:43;-1:-1:-1;;;;;;;;;;;2335:7:44;2300:21;:43::i;19535:458:36:-;19689:19;:17;:19::i;:::-;-1:-1:-1;;;;;19689:50:36;;19753:15;:13;:15::i;:::-;-1:-1:-1;;;;;;;;;;;19825:49:36;19847:5;19854:6;19862:11;19825:21;:49::i;:::-;19888:5;19689:214;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19919:67:36;;;8625:25:60;;;8681:2;8666:18;;8659:34;;;19967:11:36;;-1:-1:-1;;;;;19919:67:36;;;19940:10;;19919:67;;8598:18:60;19919:67:36;8451:248:60;6658:748:36;4546:10;4533:9;:7;:9::i;:::-;-1:-1:-1;;;;;4533:23:36;;4525:48;;;;-1:-1:-1;;;4525:48:36;;9618:2:60;4525:48:36;;;9600:21:60;9657:2;9637:18;;;9630:30;-1:-1:-1;;;9676:18:60;;;9669:42;9728:18;;4525:48:36;9416:336:60;4525:48:36;-1:-1:-1;;;;;6762:22:36;::::1;6800:19;6762:22:::0;;;-1:-1:-1;;;;;;;;;;;6762:22:36::1;::::0;;;;:34;::::1;;:57;::::0;::::1;;;;;;:::i;:::-;;6741:126;;;::::0;-1:-1:-1;;;6741:126:36;;14333:2:60;6741:126:36::1;::::0;::::1;14315:21:60::0;14372:2;14352:18;;;14345:30;-1:-1:-1;;;14391:18:60;;;14384:52;14453:18;;6741:126:36::1;14131:346:60::0;6741:126:36::1;6902:25;6930:24;6948:5;6930:17;:24::i;:::-;6902:52;;7042:1;6986:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;6986:34:36::1;;7021:17;6986:53;;;;;;;;;;;;;2983:25:60::0;;2971:2;2956:18;;2837:177;6986:53:36::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;6965:132;;;::::0;-1:-1:-1;;;6965:132:36;;15055:2:60;6965:132:36::1;::::0;::::1;15037:21:60::0;15094:2;15074:18;;;15067:30;15133;15113:18;;;15106:58;15181:18;;6965:132:36::1;14853:352:60::0;6965:132:36::1;-1:-1:-1::0;;;;;7107:22:36;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;7107:22:36::1;::::0;;;;:56;;-1:-1:-1;;7107:56:36::1;7144:19;7107:56:::0;;::::1;::::0;;7173:40:::1;:60:::0;;;7296:38:::1;809:6:28;7296:15:36;:38;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;;;;;;7243:22:36;::::1;;::::0;;;::::1;::::0;;;;;;;;:50:::1;;:91:::0;;;;7349:50;;15384:51:60;;;15451:18;;;15444:34;;;7349:50:36::1;::::0;15357:18:60;7349:50:36::1;;;;;;;6731:675;6658:748:::0;:::o;4873:114::-;4929:7;4955:25;:23;:25::i;20804:690::-;20999:19;:17;:19::i;:::-;-1:-1:-1;;;;;20999:39:36;;21052:15;:13;:15::i;:::-;-1:-1:-1;;;;;;;;;;;21131:175:36;21170:5;21193:6;21217:11;21246:4;21285:7;;21131:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21131:21:36;;-1:-1:-1;;;21131:175:36:i;:::-;21320:5;20999:336;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21346:43;21363:5;21370:6;21378:10;21346:16;:43::i;:::-;21459:11;21444:5;-1:-1:-1;;;;;21404:83:36;21432:10;-1:-1:-1;;;;;21404:83:36;;21451:6;21472:7;;21481:5;21404:83;;;;;;;;;:::i;:::-;;;;;;;;20804:690;;;;;;:::o;10053:796::-;10235:5;4803:23;4820:5;4803:16;:23::i;:::-;4795:54;;;;-1:-1:-1;;;4795:54:36;;6712:2:60;4795:54:36;;;6694:21:60;6751:2;6731:18;;;6724:30;-1:-1:-1;;;6770:18:60;;;6763:48;6828:18;;4795:54:36;6510:342:60;4795:54:36;10252:11:::1;10266:28;10280:5;10287:6;10266:13;:28::i;:::-;10252:42;;10304:13;10320:180;10352:5;10371:6;10391:11;10416:7;;10320:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;;404:75:28;-1:-1:-1;10487:3:36;;-1:-1:-1;10320:18:36::1;::::0;-1:-1:-1;10320:180:36:i:1;:::-;10304:196;;10510:197;10540:5;10559:6;10579:11;10604:7;;10510:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;;404:75:28;-1:-1:-1;10675:5:36;;-1:-1:-1;10694:3:36;;-1:-1:-1;10510:16:36::1;:197::i;:::-;10814:28;10836:5;10814:21;:28::i;:::-;10242:607;;10053:796:::0;;;;;;:::o;1644:143:44:-;1709:4;1732:48;-1:-1:-1;;;;;;;;;;;1772:7:44;1732:21;:48::i;2527:118::-;2592:46;-1:-1:-1;;;;;;;;;;;2630:7:44;2592:23;:46::i;20058:740:36:-;20259:19;:17;:19::i;:::-;-1:-1:-1;;;;;20259:50:36;;20323:15;:13;:15::i;:::-;-1:-1:-1;;;;;;;;;;;20402:175:36;20441:5;20464:6;20488:11;20517:4;20556:7;;20402:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20402:21:36;;-1:-1:-1;;;20402:175:36:i;:::-;20591:5;20259:347;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20730:11;20691:5;-1:-1:-1;;;;;20622:169:36;20667:10;-1:-1:-1;;;;;20622:169:36;;20710:6;20755:7;;20776:5;20622:169;;;;;;;;;:::i;1927:139:44:-;1990:4;2013:46;-1:-1:-1;;;;;;;;;;;2051:7:44;2013:21;:46::i;9458:589:36:-;-1:-1:-1;;;;;4653:22:36;;;;;;-1:-1:-1;;;;;;;;;;;4653:22:36;;;;;:34;9529:5;;4691:19;;4653:34;;:57;;;;;;;;:::i;:::-;;4649:70;;9458:589;;:::o;4649:70::-;-1:-1:-1;;;;;9579:22:36;::::1;9546:30;9579:22:::0;;;-1:-1:-1;;;;;;;;;;;9579:22:36::1;::::0;;;;9629:26:::1;::::0;::::1;::::0;9670:19:::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;9670:34:36::1;;9705:7;9670:43;;;;;;;;;;;;;2983:25:60::0;;2971:2;2956:18;;2837:177;9670:43:36::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9717:1;9670:48:::0;9666:375:::1;;9734:41:::0;;-1:-1:-1;;9734:41:36::1;9757:18;9734:41;::::0;;9666:375:::1;;;9814:8;:36;;;9796:15;:54;9792:249;;;-1:-1:-1::0;;;;;9873:22:36;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;9873:22:36::1;::::0;;;;9866:29;;-1:-1:-1;;9866:29:36;;::::1;::::0;;-1:-1:-1;9866:29:36;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;9946:9:::1;:7;:9::i;:::-;-1:-1:-1::0;;;;;9928:40:36::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9984:46;::::0;-1:-1:-1;;;9984:46:36;;-1:-1:-1;;;;;10263:32:60;;;9984:46:36::1;::::0;::::1;10245:51:60::0;9909:61:36;;-1:-1:-1;9984:39:36;;::::1;::::0;::::1;::::0;10218:18:60;;9984:46:36::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;9792:249;9536:511;;9458:589:::0;;:::o;13376:295::-;437:41:44;3290:10:50;1359:135:44;:::i;437:41::-;429:71;;;;-1:-1:-1;;;429:71:44;;13282:2:60;429:71:44;;;13264:21:60;13321:2;13301:18;;;13294:30;-1:-1:-1;;;13340:18:60;;;13333:47;13397:18;;429:71:44;13080:341:60;429:71:44;13488:16:36::1;13508:1;13488:21:::0;13480:59:::1;;;::::0;-1:-1:-1;;;13480:59:36;;16539:2:60;13480:59:36::1;::::0;::::1;16521:21:60::0;16578:2;16558:18;;;16551:30;16617:27;16597:18;;;16590:55;16662:18;;13480:59:36::1;16337:349:60::0;13480:59:36::1;13573:5;-1:-1:-1::0;;;;;13554:43:36::1;;13580:16;13554:43;;;;2983:25:60::0;;2971:2;2956:18;;2837:177;13554:43:36::1;;;;;;;;-1:-1:-1::0;;;;;13607:22:36;;;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;13607:22:36::1;::::0;;;;:38:::1;;:57:::0;13376:295::o;4231:121:44:-;4296:49;-1:-1:-1;;;;;;;;;;;4337:7:44;4296:24;:49::i;3557:117::-;3620:47;-1:-1:-1;;;;;;;;;;;3659:7:44;3620:24;:47::i;4479:125::-;4546:51;-1:-1:-1;;;;;;;;;;;4589:7:44;4546:24;:51::i;3823:142::-;3888:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;3907:51:::1;-1:-1:-1::0;;;;;;;;;;;3950:7:44;3907:24:::1;:51::i;3016:127:36:-:0;3067:13;3092:44;;;;;;;;;;;;;;;;;;;3016:127;:::o;18831:110::-;18899:35;18908:5;18915:6;18923:10;18899:8;:35::i;4358:115:44:-;4420:46;-1:-1:-1;;;;;;;;;;;4458:7:44;4420:24;:46::i;3971:110::-;4031:43;-1:-1:-1;;;;;;;;;;;4066:7:44;4031:24;:43::i;6306:130:50:-;6374:18;6387:4;6374:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6404:25:::1;6415:4;6421:7;6404:10;:25::i;:::-;6306:130:::0;;;:::o;5145:381:36:-;5225:7;5244:24;5258:9;5244:13;:24::i;:::-;5303:38;;-1:-1:-1;;;5303:38:36;;5335:4;5303:38;;;10245:51:60;5278:22:36;;-1:-1:-1;;;;;5303:23:36;;;;;10218:18:60;;5303:38:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5278:63;;5386:25;5405:5;5386:18;:25::i;:::-;5359:23;5376:6;5359:14;:23;:::i;:::-;:52;;5351:85;;;;-1:-1:-1;;;5351:85:36;;16893:2:60;5351:85:36;;;16875:21:60;16932:2;16912:18;;;16905:30;-1:-1:-1;;;16951:18:60;;;16944:50;17011:18;;5351:85:36;16691:344:60;5351:85:36;5446:47;5467:5;5474:10;5486:6;5446:20;:47::i;:::-;-1:-1:-1;5510:9:36;;5145:381;-1:-1:-1;;;5145:381:36:o;16565:887::-;16774:7;16801:15;:13;:15::i;:::-;16820:1;16801:20;16793:50;;;;-1:-1:-1;;;16793:50:36;;;;;;;:::i;:::-;16870:1;16861:6;:10;16853:35;;;;-1:-1:-1;;;16853:35:36;;17588:2:60;16853:35:36;;;17570:21:60;17627:2;17607:18;;;17600:30;-1:-1:-1;;;17646:18:60;;;17639:42;17698:18;;16853:35:36;17386:336:60;16853:35:36;16906:30;:11;:28;:30::i;:::-;16898:66;;;;-1:-1:-1;;;16898:66:36;;13981:2:60;16898:66:36;;;13963:21:60;14020:2;14000:18;;;13993:30;-1:-1:-1;;;14039:18:60;;;14032:53;14102:18;;16898:66:36;13779:347:60;16898:66:36;-1:-1:-1;;;;;;;;;;;16992:48:36;;16975:14;17070:19;:17;:19::i;:::-;-1:-1:-1;;;;;17070:35:36;;17113:3;17131:15;:13;:15::i;:::-;17160:8;17182:69;17204:5;17211:6;17219:11;17232:9;17243:7;17182:21;:69::i;:::-;17070:191;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17050:211;16565:887;-1:-1:-1;;;;;;;;;;16565:887:36:o;11655:579::-;-1:-1:-1;;;;;;;;;;;11890:8:36;:41;11886:342;;11952:59;;;18587:25:60;;;18643:2;18628:18;;18621:34;;;18671:18;;;18664:34;;;11987:11:36;;-1:-1:-1;;;;;11952:59:36;;;11960:10;;11952:59;;18575:2:60;18560:18;11952:59:36;;;;;;;11886:342;;;-1:-1:-1;;;;;;;;;;;12050:8:36;:48;12042:77;;;;-1:-1:-1;;;12042:77:36;;18911:2:60;12042:77:36;;;18893:21:60;18950:2;18930:18;;;18923:30;-1:-1:-1;;;18969:18:60;;;18962:46;19025:18;;12042:77:36;18709:340:60;12042:77:36;12184:11;12169:5;-1:-1:-1;;;;;12138:79:36;12157:10;-1:-1:-1;;;;;12138:79:36;;12176:6;12197:7;12206:5;12213:3;12138:79;;;;;;;;;:::i;:::-;;;;;;;;11655:579;;;;;;;:::o;1726:168:38:-;1778:18;1834:52;1863:22;;;;;;;;;;;;;;;;;1834:28;:52::i;1599:121::-;1647:7;1673:40;1699:13;;;;;;;;;;;;;;;;;1673:25;:40::i;15702:425:36:-;15894:16;;;15865:26;15894:16;;;;;;;;;15837;;15865:45;15939:181;15978:5;16001:6;16025:11;16054:5;16097:9;15939:21;:181::i;:::-;15920:200;15702:425;-1:-1:-1;;;;;15702:425:36:o;5532:187::-;5665:47;5687:5;5694:9;5705:6;5665:21;:47::i;6702:132:50:-;6771:18;6784:4;6771:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6801:26:::1;6813:4;6819:7;6801:11;:26::i;7350:199::-:0;-1:-1:-1;;;;;7430:23:50;;3290:10;7430:23;7422:83;;;;-1:-1:-1;;;7422:83:50;;19737:2:60;7422:83:50;;;19719:21:60;19776:2;19756:18;;;19749:30;19815:34;19795:18;;;19788:62;-1:-1:-1;;;19866:18:60;;;19859:45;19921:19;;7422:83:50;19535:411:60;7422:83:50;7516:26;7528:4;7534:7;7516:11;:26::i;1477:116:38:-;1519:7;1545:41;1574:11;;;;;;;;;;;;;;;;;1545:28;:41::i;2504:540:49:-;-1:-1:-1;;;;;2632:34:49;;474:20:51;2624:67:49;;;;-1:-1:-1;;;2624:67:49;;20153:2:60;2624:67:49;;;20135:21:60;20192:2;20172:18;;;20165:30;-1:-1:-1;;;20211:18:60;;;20204:48;20269:18;;2624:67:49;19951:342:60;2624:67:49;2772:12;2786:23;2813;-1:-1:-1;;;;;2813:36:49;2886:24;;;2912:7;;2863:57;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2863:57:49;;;;;;;;;;;;;;-1:-1:-1;;;;;2863:57:49;-1:-1:-1;;;;;;2863:57:49;;;;;;;;;;2813:117;;;;2863:57;2813:117;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2771:159;;;;2948:7;2964:10;2940:36;;;;;-1:-1:-1;;;2940:36:49;;;;;;;;:::i;:::-;-1:-1:-1;2994:17:49;;:10;;:22;2986:51;;;;-1:-1:-1;;;2986:51:49;;;;;;;;:::i;:::-;;2614:430;;2504:540;;;:::o;4058:137:36:-;4123:4;;4154:19;:17;:19::i;:::-;-1:-1:-1;;;;;4146:42:36;;;4139:49;;4058:137;:::o;3149:401::-;3260:2;3245:17;;3237:47;;;;-1:-1:-1;;;3237:47:36;;21185:2:60;3237:47:36;;;21167:21:60;21224:2;21204:18;;;21197:30;-1:-1:-1;;;21243:18:60;;;21236:47;21300:18;;3237:47:36;20983:341:60;3237:47:36;3295:16;;3343:36;;;;3354:4;3343:36;:::i;:::-;3294:85;;;;3397:31;:18;-1:-1:-1;;;;;3397:29:36;474:20:51;520:8;;;345:190;3397:31:36;3389:78;;;;-1:-1:-1;;;3389:78:36;;21940:2:60;3389:78:36;;;21922:21:60;21979:2;21959:18;;;21952:30;22018:34;21998:18;;;21991:62;-1:-1:-1;;;22069:18:60;;;22062:32;22111:19;;3389:78:36;21738:398:60;3389:78:36;-1:-1:-1;;;;;3485:19:36;;474:20:51;3477:66:36;;;;-1:-1:-1;;;3477:66:36;;22343:2:60;3477:66:36;;;22325:21:60;;;22362:18;;;22355:30;22421:34;22401:18;;;22394:62;22473:18;;3477:66:36;22141:356:60;3712:340:36;3795:16;;3843:36;;;;3854:4;3843:36;:::i;:::-;3794:85;;;;3889:37;3907:18;3889:17;:37::i;:::-;3936:20;3947:8;3936:10;:20::i;:::-;3966:79;362:1:39;3966:35:36;:79::i;2533:142:53:-;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;2699:247:39:-;2776:7;2800:33;2827:5;2800:26;:33::i;:::-;2795:105;;2856:33;2883:5;2856:26;:33::i;2795:105::-;2916:23;2933:5;2916:16;:23::i;649:129:20:-;705:7;731:40;326:9;189:6;731:40;:::i;4481:132:50:-;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;;;;4481:132::o;17458:568:36:-;17597:15;:13;:15::i;:::-;17616:1;17597:20;17589:50;;;;-1:-1:-1;;;17589:50:36;;;;;;;:::i;:::-;17676:16;;;17690:1;17676:16;;;;;;;;;17649:24;;17676:16;;;;;;;;;;-1:-1:-1;17676:16:36;17649:43;;655:1:28;17702:7:36;17710:1;17702:10;;;;;;;;:::i;:::-;;;;;;:35;;;;;17776:9;-1:-1:-1;;;;;17760:27:36;17747:7;17755:1;17747:10;;;;;;;;:::i;:::-;;;;;;:40;;;;;17826:5;-1:-1:-1;;;;;17810:23:36;17797:7;17805:1;17797:10;;;;;;;;:::i;:::-;;;;;;;;;;:36;17886:1;742:25:28;700:3;742:1;:25;:::i;:::-;17866:21:36;;;;:::i;:::-;17856:6;:32;17843:7;17851:1;17843:10;;;;;;;;:::i;:::-;;;;;;:45;;;;;700:3:28;17911:6:36;:32;;17898:7;17906:1;17898:10;;;;;;;;:::i;:::-;;;;;;:45;;;;;17953:19;:17;:19::i;:::-;-1:-1:-1;;;;;17953:40:36;;17994:15;:13;:15::i;:::-;18011:7;17953:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17579:447;17458:568;;;:::o;3107:291:39:-;3187:25;3215:36;3245:5;3215:29;:36::i;:::-;3187:64;;3290:6;3269:17;:27;;3261:69;;;;-1:-1:-1;;;3261:69:39;;24674:2:60;3261:69:39;;;24656:21:60;24713:2;24693:18;;;24686:30;24752:31;24732:18;;;24725:59;24801:18;;3261:69:39;24472:353:60;3261:69:39;3340:51;3357:5;3364:26;3384:6;3364:17;:26;:::i;:::-;3340:16;:51::i;2539:135:41:-;2607:4;2631:14;;;;;:35;;;2649:17;2656:9;-1:-1:-1;;;;;;2762:38:41;2680:128;2051:115:38;2108:51;2138:13;;;;;;;;;;;;;;;;;2153:5;2108:29;:51::i;16133:426:36:-;16193:7;16220:15;:13;:15::i;:::-;16239:1;16220:20;16212:50;;;;-1:-1:-1;;;16212:50:36;;;;;;;:::i;:::-;16272:24;16286:9;16272:13;:24::i;:::-;16308:25;16339:19;:17;:19::i;:::-;-1:-1:-1;;;;;16339:35:36;;16382:9;16406:15;:13;:15::i;:::-;534:76:28;16481:27:36;16502:5;16481:20;:27::i;:::-;16339:179;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16307:211:36;16133:426;-1:-1:-1;;;16133:426:36:o;520:123:20:-;573:7;599:37;326:9;144:5;599:37;:::i;14683:1013:36:-;14878:16;14906:22;14931:11;:114;;2955:1;14931:114;;;14957:51;3008:1;2955;14957:51;:::i;:::-;14906:139;;15055:24;15113:7;:14;15096;:31;;;;:::i;:::-;15082:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15082:46:36;;15055:73;;15167:5;-1:-1:-1;;;;;15151:23:36;15138:7;15146:1;15138:10;;;;;;;;:::i;:::-;;;;;;:36;;;;;15213:10;-1:-1:-1;;;;;15197:28:36;15184:7;15192:1;15184:10;;;;;;;;:::i;:::-;;;;;;:41;;;;;15248:11;15235:7;15243:1;15235:10;;;;;;;;:::i;:::-;;;;;;;;;;:24;15312:1;742:25:28;700:3;742:1;:25;:::i;:::-;15292:21:36;;;;:::i;:::-;15282:6;:32;15269:7;15277:1;15269:10;;;;;;;;:::i;:::-;;;;;;:45;;;;;700:3:28;15337:6:36;:32;;15324:7;15332:1;15324:10;;;;;;;;:::i;:::-;;;;;;:45;;;;;15383:11;15379:287;;;15440:14;;15410:7;15418:18;15435:1;15418:14;:18;:::i;:::-;15410:27;;;;;;;;:::i;:::-;;;;;;:44;;;;;15473:9;15468:188;15492:7;:14;15488:1;:18;15468:188;;;15539:19;:7;15547:1;15539:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;;2762:38:41;2680:128;15539:19:36;15531:52;;;;-1:-1:-1;;;15531:52:36;;25032:2:60;15531:52:36;;;25014:21:60;25071:2;25051:18;;;25044:30;-1:-1:-1;;;25090:18:60;;;25083:50;25150:18;;15531:52:36;24830:344:60;15531:52:36;15631:7;15639:1;15631:10;;;;;;;;:::i;:::-;;;;;;;15601:7;15613:14;15609:1;:18;;;;:::i;:::-;15601:27;;;;;;;;:::i;:::-;;;;;;;;;;:40;15508:3;;15468:188;;;;15379:287;15682:7;14683:1013;-1:-1:-1;;;;;;;14683:1013:36:o;5911:116:50:-;5970:7;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;:24;;;;5911:116::o;4892:95::-;4950:30;4961:4;3290:10;4950;:30::i;8830:227::-;8905:22;8913:4;8919:7;8905;:22::i;:::-;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;784:175:20:-;860:7;850:6;:17;;842:52;;;;-1:-1:-1;;;842:52:20;;25381:2:60;842:52:20;;;25363:21:60;25420:2;25400:18;;;25393:30;-1:-1:-1;;;25439:18:60;;;25432:52;25501:18;;842:52:20;25179:346:60;842:52:20;507:6;912;:17;;904:48;;;;-1:-1:-1;;;904:48:20;;25732:2:60;904:48:20;;;25714:21:60;25771:2;25751:18;;;25744:30;-1:-1:-1;;;25790:18:60;;;25783:48;25848:18;;904:48:20;25530:342:60;296:751:54;416:6;426:1;416:11;412:24;;296:751;;;:::o;412:24::-;512:35;;-1:-1:-1;;;512:35:54;;541:4;512:35;;;10245:51:60;472:5:54;;445:17;;-1:-1:-1;;;;;512:20:54;;;;;10218:18:60;;512:35:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;488:59;-1:-1:-1;557:21:54;581:22;597:6;488:59;581:22;:::i;:::-;557:46;;638:13;621;:30;;613:51;;;;-1:-1:-1;;;613:51:54;;26079:2:60;613:51:54;;;26061:21:60;26118:1;26098:18;;;26091:29;-1:-1:-1;;;26136:18:60;;;26129:38;26184:18;;613:51:54;25877:331:60;613:51:54;699:145;;-1:-1:-1;;;;;26471:15:60;;699:145:54;;;26453:34:60;809:4:54;26503:18:60;;;26496:43;26555:18;;;26548:34;;;675:21:54;;-1:-1:-1;;;735:32:54;26388:18:60;;699:145:54;;;;-1:-1:-1;;699:145:54;;;;;;;;;;;;;;-1:-1:-1;;;;;699:145:54;-1:-1:-1;;;;;;699:145:54;;;;;;;;;;;-1:-1:-1;854:37:54;-1:-1:-1;;;;;854:27:54;;699:145;854:27;:37::i;:::-;925:35;;-1:-1:-1;;;925:35:54;;954:4;925:35;;;10245:51:60;902:20:54;;-1:-1:-1;;;;;925:20:54;;;;;10218:18:60;;925:35:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;902:58;;994:13;978:12;:29;970:70;;;;-1:-1:-1;;;970:70:54;;26795:2:60;970:70:54;;;26777:21:60;26834:2;26814:18;;;26807:30;26873;26853:18;;;26846:58;26921:18;;970:70:54;26593:352:60;3268:212:52;3336:14;3362:12;3404:4;3387:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3387:22:52;;;;;;;;;3377:33;;3387:22;3377:33;;;;3453:11;;3268:212;-1:-1:-1;;;3268:212:52:o;1122:848:54:-;-1:-1:-1;;;;;1305:25:54;;1297:55;;;;-1:-1:-1;;;1297:55:54;;12936:2:60;1297:55:54;;;12918:21:60;12975:2;12955:18;;;12948:30;-1:-1:-1;;;12994:18:60;;;12987:47;13051:18;;1297:55:54;12734:341:60;1297:55:54;1366:6;1376:1;1366:11;1362:24;;1122:848;;;:::o;1362:24::-;1462:35;;-1:-1:-1;;;1462:35:54;;1491:4;1462:35;;;10245:51:60;1422:5:54;;1395:17;;-1:-1:-1;;;;;1462:20:54;;;;;10218:18:60;;1462:35:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1438:59;-1:-1:-1;1507:21:54;1531:22;1547:6;1438:59;1531:22;:::i;:::-;1507:46;;1588:13;1571;:30;;1563:52;;;;-1:-1:-1;;;1563:52:54;;27446:2:60;1563:52:54;;;27428:21:60;27485:1;27465:18;;;27458:29;-1:-1:-1;;;27503:18:60;;;27496:39;27552:18;;1563:52:54;27244:332:60;1563:52:54;1650:117;;-1:-1:-1;;;;;15402:32:60;;1650:117:54;;;15384:51:60;15451:18;;;15444:34;;;1626:21:54;;-1:-1:-1;;;1686:28:54;15357:18:60;;1650:117:54;15210:274:60;9216:228:50;9291:22;9299:4;9305:7;9291;:22::i;:::-;9287:151;;;9363:5;9329:14;;;-1:-1:-1;;;;;;;;;;;9329:14:50;;;;;;;;-1:-1:-1;;;;;9329:31:50;;;;;;;;;;:39;;-1:-1:-1;;9329:39:50;;;9387:40;3290:10;;9329:14;;9387:40;;9363:5;9387:40;9216:228;;:::o;2172:139:38:-;2237:67;2270:22;;;;;;;;;;;;;;;;;2294:9;2237:32;:67::i;1924:121::-;1982:56;2015:11;;;;;;;;;;;;;;;;;2028:9;1982:32;:56::i;706:126:39:-;769:56;795:22;;;;;;;;;;;;;;;;;819:5;769:25;:56::i;2681:1050:53:-;2782:28;:26;:28::i;:::-;2778:485;;;3062:60;-1:-1:-1;;;;;;;;;;;3102:19:53;3062:21;:60::i;:::-;3037:144;;;;-1:-1:-1;;;3037:144:53;;28062:2:60;3037:144:53;;;28044:21:60;28101:2;28081:18;;;28074:30;28140:27;28120:18;;;28113:55;28185:18;;3037:144:53;27860:349:60;3037:144:53;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;3519:58;-1:-1:-1;;;;;;;;;;;3557:19:53;3519:21;:58::i;:::-;3494:151;;;;-1:-1:-1;;;3494:151:53;;28416:2:60;3494:151:53;;;28398:21:60;28455:2;28435:18;;;28428:30;28494:34;28474:18;;;28467:62;-1:-1:-1;;;28545:18:60;;;28538:32;28587:19;;3494:151:53;28214:398:60;3273:452:53;3676:38;3694:19;3676:17;:38::i;2081:148:39:-;2154:4;2177:15;:13;:15::i;:::-;:40;2193:23;2210:5;2193:16;:23::i;:::-;2177:40;;;;;;;;;;;;2221:1;2177:45;;2170:52;;2081:148;;;:::o;1233:495::-;1307:7;;-1:-1:-1;;;;;;;1443:12:39;;;1439:167;;-1:-1:-1;1488:21:39;1439:167;;;1557:38;;-1:-1:-1;;;1557:38:39;;1589:4;1557:38;;;10245:51:60;-1:-1:-1;;;;;1557:23:39;;;;;10218:18:60;;1557:38:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1540:55;;1439:167;1615:24;1642:21;:19;:21::i;:::-;1615:48;-1:-1:-1;1718:3:39;1681:33;1615:48;1681:14;:33;:::i;:::-;1680:41;;;;:::i;:::-;1673:48;1233:495;-1:-1:-1;;;;1233:495:39:o;2235:146::-;2299:7;2073:1;2325:15;:13;:15::i;:::-;:40;2341:23;2358:5;2341:16;:23::i;:::-;2325:40;;;;;;;;;;;;:49;;;;:::i;2387:138::-;2504:14;2073:1;2504:5;:14;:::i;:::-;2461:15;:13;:15::i;:::-;:40;2477:23;2494:5;2477:16;:23::i;:::-;2461:40;;;;;;;;;;;-1:-1:-1;2461:40:39;:57;-1:-1:-1;;2387:138:39:o;3093:169:52:-;3181:18;3194:4;3181:12;:18::i;:::-;:23;3173:47;;;;-1:-1:-1;;;3173:47:52;;29041:2:60;3173:47:52;;;29023:21:60;29080:2;29060:18;;;29053:30;-1:-1:-1;;;29099:18:60;;;29092:41;29150:18;;3173:47:52;28839:335:60;3173:47:52;3230:25;3243:4;3249:5;3230:12;:25::i;14262:415:36:-;14438:16;;;14452:1;14438:16;;;;;;;;;14329;;14395:5;;14357:20;;14438:16;;;;;;;;;;-1:-1:-1;14438:16:36;14411:43;;14493:5;-1:-1:-1;;;;;14477:23:36;14464:7;14472:1;14464:10;;;;;;;;:::i;:::-;;;;;;:36;;;;;14523:25;:5;-1:-1:-1;;;;;14523:10:36;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14523:12:36;;;;;;;;;;;;:::i;:::-;:23;:25::i;:::-;14510:7;14518:1;14510:10;;;;;;;;:::i;:::-;;;;;;:38;;;;;14571:27;:5;-1:-1:-1;;;;;14571:12:36;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;14558:7;14566:1;14558:10;;;;;;;;:::i;:::-;;;;;;:40;;;;;14629:5;-1:-1:-1;;;;;14629:14:36;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14621:25;;14608:7;14616:1;14608:10;;;;;;;;:::i;:::-;;;;;;;;;;:38;14663:7;14262:415;-1:-1:-1;;;14262:415:36:o;5257:484:50:-;5337:22;5345:4;5351:7;5337;:22::i;:::-;5332:403;;5520:41;5548:7;-1:-1:-1;;;;;5520:41:50;5558:2;5520:19;:41::i;:::-;5632:38;5660:4;5667:2;5632:19;:38::i;:::-;5427:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5427:265:50;;;;;;;;;;-1:-1:-1;;;5375:349:50;;;;;;;:::i;1001:452:51:-;474:20;;1096:54;;;;-1:-1:-1;;;1096:54:51;;31378:2:60;1096:54:51;;;31360:21:60;31417:2;31397:18;;;31390:30;-1:-1:-1;;;31436:18:60;;;31429:47;31493:18;;1096:54:51;31176:341:60;1096:54:51;1205:12;1219:23;1246:12;-1:-1:-1;;;;;1246:17:51;1264:8;1246:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1204:69;;;;1291:7;1307:10;1283:36;;;;;-1:-1:-1;;;1283:36:51;;;;;;;;:::i;:::-;-1:-1:-1;1334:17:51;;:21;1330:117;;1390:10;1379:30;;;;;;;;;;;;:::i;:::-;1371:65;;;;-1:-1:-1;;;1371:65:51;;32006:2:60;1371:65:51;;;31988:21:60;32045:2;32025:18;;;32018:30;-1:-1:-1;;;32064:18:60;;;32057:52;32126:18;;1371:65:51;31804:346:60;3687:189:52;3811:3;3778:21;3794:4;3778:15;:21::i;:::-;-1:-1:-1;;;;;3778:37:52;;3770:61;;;;-1:-1:-1;;;3770:61:52;;29041:2:60;3770:61:52;;;29023:21:60;29080:2;29060:18;;;29053:30;-1:-1:-1;;;29099:18:60;;;29092:41;29150:18;;3770:61:52;28839:335:60;2895:192:52;2971:12;3013:4;2996:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;2986:33;;;;;;2971:48;;3065:5;3059:4;3052:19;3038:43;2895:192;;:::o;2221:152:53:-;2282:4;;2305:44;-1:-1:-1;;;;;;;;;;;2305:26:53;:44::i;:::-;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;2438:4;;2461:42;-1:-1:-1;;;;;;;;;;;2461:26:53;:42::i;3737:280::-;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;3949:24;:61::i;1794:165:39:-;1842:35;1896:56;1933:18;;;;;;;;;;;;;;;;;1896:36;:56::i;897:177::-;961:7;;994:23;1012:5;994:15;:23;:::i;:::-;1044:22;;;-1:-1:-1;;;;;15402:32:60;;1044:22:39;;;15384:51:60;15451:18;;;15444:34;;;980:37:39;;-1:-1:-1;15357:18:60;;1044:22:39;;;;;;;;;;;;1034:33;;;;;;1027:40;;;897:177;;;:::o;564:136::-;618:7;644:49;670:22;;;;;;;;;;;;;;;;;644:25;:49::i;1251:191:41:-;1317:7;1336:11;1350:45;716:2;1379:15;1386:7;2380:13;;2205:195;1379:15;1350:3;:45::i;:::-;1336:59;;1412:23;1422:7;1431:3;1412:9;:23::i;1652:441:59:-;1727:13;1752:19;1784:10;1788:6;1784:1;:10;:::i;:::-;:14;;1797:1;1784:14;:::i;:::-;1774:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1774:25:59;;1752:47;;-1:-1:-1;;;1809:6:59;1816:1;1809:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1809:15:59;;;;;;;;;-1:-1:-1;;;1834:6:59;1841:1;1834:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1834:15:59;;;;;;;;-1:-1:-1;1864:9:59;1876:10;1880:6;1876:1;:10;:::i;:::-;:14;;1889:1;1876:14;:::i;:::-;1864:26;;1859:132;1896:1;1892;:5;1859:132;;;-1:-1:-1;;;1943:5:59;1951:3;1943:11;1930:25;;;;;;;:::i;:::-;;;;1918:6;1925:1;1918:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1918:37:59;;;;;;;;-1:-1:-1;1979:1:59;1969:11;;;;;1899:3;;;:::i;:::-;;;1859:132;;;-1:-1:-1;2008:10:59;;2000:55;;;;-1:-1:-1;;;2000:55:59;;32498:2:60;2000:55:59;;;32480:21:60;;;32517:18;;;32510:30;32576:34;32556:18;;;32549:62;32628:18;;2000:55:59;32296:356:60;8433:241:50;8508:25;8536:18;8549:4;8536:12;:18::i;:::-;8564:14;;;;-1:-1:-1;;;;;;;;;;;8564:14:50;;;;;;:24;;:36;;;8615:52;8508:46;;-1:-1:-1;8591:9:50;;8508:46;;8564:14;;8615:52;;8564:14;8615:52;8498:176;8433:241;;:::o;555:298:52:-;655:50;721:16;767:4;750:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;750:22:52;;;;;;;;;740:33;;750:22;740:33;;;;;555:298;-1:-1:-1;;;555:298:52:o;2406:103:41:-;2463:7;2493:1;2489;:5;:13;;2501:1;2489:13;;;-1:-1:-1;2497:1:41;;2482:20;-1:-1:-1;2406:103:41:o;1448:706::-;1528:7;716:2;1555:6;:33;;1547:61;;;;-1:-1:-1;;;1547:61:41;;32859:2:60;1547:61:41;;;32841:21:60;32898:2;32878:18;;;32871:30;-1:-1:-1;;;32917:18:60;;;32910:45;32972:18;;1547:61:41;32657:339:60;1547:61:41;1888:2;1875:16;;;1869:23;;1618:14;;2110:11;;2115:6;;2110:11;:::i;:::-;2105:17;;:1;:17;:::i;:::-;2094:29;;;;;1448:706;-1:-1:-1;;;;1448:706:41:o;14:131:60:-;-1:-1:-1;;;;;89:31:60;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:383::-;671:6;679;687;740:2;728:9;719:7;715:23;711:32;708:52;;;756:1;753;746:12;708:52;795:9;782:23;814:31;839:5;814:31;:::i;:::-;864:5;916:2;901:18;;888:32;;-1:-1:-1;967:2:60;952:18;;;939:32;;594:383;-1:-1:-1;;;594:383:60:o;982:452::-;1068:6;1076;1084;1092;1145:3;1133:9;1124:7;1120:23;1116:33;1113:53;;;1162:1;1159;1152:12;1113:53;1201:9;1188:23;1220:31;1245:5;1220:31;:::i;:::-;1270:5;1322:2;1307:18;;1294:32;;-1:-1:-1;1373:2:60;1358:18;;1345:32;;1424:2;1409:18;1396:32;;-1:-1:-1;982:452:60;-1:-1:-1;;;982:452:60:o;1439:127::-;1500:10;1495:3;1491:20;1488:1;1481:31;1531:4;1528:1;1521:15;1555:4;1552:1;1545:15;1571:345;1720:2;1705:18;;1753:1;1742:13;;1732:144;;1798:10;1793:3;1789:20;1786:1;1779:31;1833:4;1830:1;1823:15;1861:4;1858:1;1851:15;1732:144;1885:25;;;1571:345;:::o;1921:315::-;1989:6;1997;2050:2;2038:9;2029:7;2025:23;2021:32;2018:52;;;2066:1;2063;2056:12;2018:52;2102:9;2089:23;2079:33;;2162:2;2151:9;2147:18;2134:32;2175:31;2200:5;2175:31;:::i;:::-;2225:5;2215:15;;;1921:315;;;;;:::o;2241:591::-;2311:6;2319;2372:2;2360:9;2351:7;2347:23;2343:32;2340:52;;;2388:1;2385;2378:12;2340:52;2428:9;2415:23;2457:18;2498:2;2490:6;2487:14;2484:34;;;2514:1;2511;2504:12;2484:34;2552:6;2541:9;2537:22;2527:32;;2597:7;2590:4;2586:2;2582:13;2578:27;2568:55;;2619:1;2616;2609:12;2568:55;2659:2;2646:16;2685:2;2677:6;2674:14;2671:34;;;2701:1;2698;2691:12;2671:34;2746:7;2741:2;2732:6;2728:2;2724:15;2720:24;2717:37;2714:57;;;2767:1;2764;2757:12;2714:57;2798:2;2790:11;;;;;2820:6;;-1:-1:-1;2241:591:60;;-1:-1:-1;;;;2241:591:60:o;3019:456::-;3096:6;3104;3112;3165:2;3153:9;3144:7;3140:23;3136:32;3133:52;;;3181:1;3178;3171:12;3133:52;3220:9;3207:23;3239:31;3264:5;3239:31;:::i;:::-;3289:5;-1:-1:-1;3341:2:60;3326:18;;3313:32;;-1:-1:-1;3397:2:60;3382:18;;3369:32;3410:33;3369:32;3410:33;:::i;:::-;3462:7;3452:17;;;3019:456;;;;;:::o;3480:180::-;3539:6;3592:2;3580:9;3571:7;3567:23;3563:32;3560:52;;;3608:1;3605;3598:12;3560:52;-1:-1:-1;3631:23:60;;3480:180;-1:-1:-1;3480:180:60:o;3665:367::-;3728:8;3738:6;3792:3;3785:4;3777:6;3773:17;3769:27;3759:55;;3810:1;3807;3800:12;3759:55;-1:-1:-1;3833:20:60;;3876:18;3865:30;;3862:50;;;3908:1;3905;3898:12;3862:50;3945:4;3937:6;3933:17;3921:29;;4005:3;3998:4;3988:6;3985:1;3981:14;3973:6;3969:27;3965:38;3962:47;3959:67;;;4022:1;4019;4012:12;3959:67;3665:367;;;;;:::o;4037:778::-;4159:6;4167;4175;4183;4191;4199;4252:3;4240:9;4231:7;4227:23;4223:33;4220:53;;;4269:1;4266;4259:12;4220:53;4308:9;4295:23;4327:31;4352:5;4327:31;:::i;:::-;4377:5;-1:-1:-1;4429:2:60;4414:18;;4401:32;;-1:-1:-1;4480:2:60;4465:18;;4452:32;;-1:-1:-1;4535:2:60;4520:18;;4507:32;4562:18;4551:30;;4548:50;;;4594:1;4591;4584:12;4548:50;4633:70;4695:7;4686:6;4675:9;4671:22;4633:70;:::i;:::-;4037:778;;;;-1:-1:-1;4037:778:60;;;;;4804:3;4789:19;;;4776:33;;4037:778;-1:-1:-1;;;;4037:778:60:o;4820:709::-;4933:6;4941;4949;4957;4965;5018:3;5006:9;4997:7;4993:23;4989:33;4986:53;;;5035:1;5032;5025:12;4986:53;5074:9;5061:23;5093:31;5118:5;5093:31;:::i;:::-;5143:5;-1:-1:-1;5195:2:60;5180:18;;5167:32;;-1:-1:-1;5246:2:60;5231:18;;5218:32;;-1:-1:-1;5301:2:60;5286:18;;5273:32;5328:18;5317:30;;5314:50;;;5360:1;5357;5350:12;5314:50;5399:70;5461:7;5452:6;5441:9;5437:22;5399:70;:::i;:::-;4820:709;;;;-1:-1:-1;4820:709:60;;-1:-1:-1;5488:8:60;;5373:96;4820:709;-1:-1:-1;;;4820:709:60:o;5534:315::-;5602:6;5610;5663:2;5651:9;5642:7;5638:23;5634:32;5631:52;;;5679:1;5676;5669:12;5631:52;5718:9;5705:23;5737:31;5762:5;5737:31;:::i;:::-;5787:5;5839:2;5824:18;;;;5811:32;;-1:-1:-1;;;5534:315:60:o;5854:250::-;5939:1;5949:113;5963:6;5960:1;5957:13;5949:113;;;6039:11;;;6033:18;6020:11;;;6013:39;5985:2;5978:10;5949:113;;;-1:-1:-1;;6096:1:60;6078:16;;6071:27;5854:250::o;6109:396::-;6258:2;6247:9;6240:21;6221:4;6290:6;6284:13;6333:6;6328:2;6317:9;6313:18;6306:34;6349:79;6421:6;6416:2;6405:9;6401:18;6396:2;6388:6;6384:15;6349:79;:::i;:::-;6489:2;6468:15;-1:-1:-1;;6464:29:60;6449:45;;;;6496:2;6445:54;;6109:396;-1:-1:-1;;6109:396:60:o;6857:127::-;6918:10;6913:3;6909:20;6906:1;6899:31;6949:4;6946:1;6939:15;6973:4;6970:1;6963:15;7337:439;7390:3;7428:5;7422:12;7455:6;7450:3;7443:19;7481:4;7510;7505:3;7501:14;7494:21;;7549:4;7542:5;7538:16;7572:1;7582:169;7596:6;7593:1;7590:13;7582:169;;;7657:13;;7645:26;;7691:12;;;;7726:15;;;;7618:1;7611:9;7582:169;;;-1:-1:-1;7767:3:60;;7337:439;-1:-1:-1;;;;;7337:439:60:o;7781:476::-;8044:6;8033:9;8026:25;8087:6;8082:2;8071:9;8067:18;8060:34;8130:3;8125:2;8114:9;8110:18;8103:31;8007:4;8151:57;8203:3;8192:9;8188:19;8180:6;8151:57;:::i;:::-;8143:65;;8244:6;8239:2;8228:9;8224:18;8217:34;7781:476;;;;;;;:::o;8262:184::-;8332:6;8385:2;8373:9;8364:7;8360:23;8356:32;8353:52;;;8401:1;8398;8391:12;8353:52;-1:-1:-1;8424:16:60;;8262:184;-1:-1:-1;8262:184:60:o;8704:346::-;8906:2;8888:21;;;8945:2;8925:18;;;8918:30;-1:-1:-1;;;8979:2:60;8964:18;;8957:52;9041:2;9026:18;;8704:346::o;10658:127::-;10719:10;10714:3;10710:20;10707:1;10700:31;10750:4;10747:1;10740:15;10774:4;10771:1;10764:15;10790:168;10863:9;;;10894;;10911:15;;;10905:22;;10891:37;10881:71;;10932:18;;:::i;10963:125::-;11028:9;;;11049:10;;;11046:36;;;11062:18;;:::i;11441:331::-;11546:9;11557;11599:8;11587:10;11584:24;11581:44;;;11621:1;11618;11611:12;11581:44;11650:6;11640:8;11637:20;11634:40;;;11670:1;11667;11660:12;11634:40;-1:-1:-1;;11696:23:60;;;11741:25;;;;;-1:-1:-1;11441:331:60:o;15489:587::-;15716:25;;;15777:2;15772;15757:18;;15750:30;;;15796:18;;15789:34;;;-1:-1:-1;;;;;;15835:31:60;;15832:51;;;15879:1;15876;15869:12;15832:51;15913:6;15910:1;15906:14;15971:6;15963;15957:3;15946:9;15942:19;15929:49;16058:2;16043:18;;16036:34;;;;-1:-1:-1;15999:22:60;16023:3;15995:32;;15489:587;-1:-1:-1;;;15489:587:60:o;16081:251::-;16151:6;16204:2;16192:9;16183:7;16179:23;16175:32;16172:52;;;16220:1;16217;16210:12;16172:52;16252:9;16246:16;16271:31;16296:5;16271:31;:::i;17040:341::-;17242:2;17224:21;;;17281:2;17261:18;;;17254:30;-1:-1:-1;;;17315:2:60;17300:18;;17293:47;17372:2;17357:18;;17040:341::o;17727:403::-;17962:6;17951:9;17944:25;18005:6;18000:2;17989:9;17985:18;17978:34;18048:2;18043;18032:9;18028:18;18021:30;17925:4;18068:56;18120:2;18109:9;18105:18;18097:6;18068:56;:::i;18135:245::-;18214:6;18222;18275:2;18263:9;18254:7;18250:23;18246:32;18243:52;;;18291:1;18288;18281:12;18243:52;-1:-1:-1;;18314:16:60;;18370:2;18355:18;;;18349:25;18314:16;;18349:25;;-1:-1:-1;18135:245:60:o;19054:476::-;19317:6;19306:9;19299:25;19360:3;19355:2;19344:9;19340:18;19333:31;19280:4;19381:57;19433:3;19422:9;19418:19;19410:6;19381:57;:::i;:::-;19469:2;19454:18;;19447:34;;;;-1:-1:-1;19512:2:60;19497:18;19490:34;19373:65;19054:476;-1:-1:-1;;19054:476:60:o;20298:388::-;20455:2;20444:9;20437:21;20494:6;20489:2;20478:9;20474:18;20467:34;20551:6;20543;20538:2;20527:9;20523:18;20510:48;20607:1;20578:22;;;20602:2;20574:31;;;20567:42;;;;20670:2;20649:15;;;-1:-1:-1;;20645:29:60;20630:45;20626:54;;20298:388;-1:-1:-1;20298:388:60:o;20691:287::-;20820:3;20858:6;20852:13;20874:66;20933:6;20928:3;20921:4;20913:6;20909:17;20874:66;:::i;:::-;20956:16;;;;;20691:287;-1:-1:-1;;20691:287:60:o;21329:404::-;21413:6;21421;21474:2;21462:9;21453:7;21449:23;21445:32;21442:52;;;21490:1;21487;21480:12;21442:52;21529:9;21516:23;21548:31;21573:5;21548:31;:::i;:::-;21598:5;-1:-1:-1;21655:2:60;21640:18;;21627:32;21668:33;21627:32;21668:33;:::i;22502:127::-;22563:10;22558:3;22554:20;22551:1;22544:31;22594:4;22591:1;22584:15;22618:4;22615:1;22608:15;22634:416;22723:1;22760:5;22723:1;22774:270;22795:7;22785:8;22782:21;22774:270;;;22854:4;22850:1;22846:6;22842:17;22836:4;22833:27;22830:53;;;22863:18;;:::i;:::-;22913:7;22903:8;22899:22;22896:55;;;22933:16;;;;22896:55;23012:22;;;;22972:15;;;;22774:270;;;22778:3;22634:416;;;;;:::o;23055:806::-;23104:5;23134:8;23124:80;;-1:-1:-1;23175:1:60;23189:5;;23124:80;23223:4;23213:76;;-1:-1:-1;23260:1:60;23274:5;;23213:76;23305:4;23323:1;23318:59;;;;23391:1;23386:130;;;;23298:218;;23318:59;23348:1;23339:10;;23362:5;;;23386:130;23423:3;23413:8;23410:17;23407:43;;;23430:18;;:::i;:::-;-1:-1:-1;;23486:1:60;23472:16;;23501:5;;23298:218;;23600:2;23590:8;23587:16;23581:3;23575:4;23572:13;23568:36;23562:2;23552:8;23549:16;23544:2;23538:4;23535:12;23531:35;23528:77;23525:159;;;-1:-1:-1;23637:19:60;;;23669:5;;23525:159;23716:34;23741:8;23735:4;23716:34;:::i;:::-;23786:6;23782:1;23778:6;23774:19;23765:7;23762:32;23759:58;;;23797:18;;:::i;:::-;23835:20;;23055:806;-1:-1:-1;;;23055:806:60:o;23866:131::-;23926:5;23955:36;23982:8;23976:4;23955:36;:::i;24002:128::-;24069:9;;;24090:11;;;24087:37;;;24104:18;;:::i;24135:332::-;24342:6;24331:9;24324:25;24385:2;24380;24369:9;24365:18;24358:30;24305:4;24405:56;24457:2;24446:9;24442:18;24434:6;24405:56;:::i;28617:217::-;28657:1;28683;28673:132;;28727:10;28722:3;28718:20;28715:1;28708:31;28762:4;28759:1;28752:15;28790:4;28787:1;28780:15;28673:132;-1:-1:-1;28819:9:60;;28617:217::o;29179:897::-;29259:6;29312:2;29300:9;29291:7;29287:23;29283:32;29280:52;;;29328:1;29325;29318:12;29280:52;29361:9;29355:16;29390:18;29431:2;29423:6;29420:14;29417:34;;;29447:1;29444;29437:12;29417:34;29485:6;29474:9;29470:22;29460:32;;29530:7;29523:4;29519:2;29515:13;29511:27;29501:55;;29552:1;29549;29542:12;29501:55;29581:2;29575:9;29603:2;29599;29596:10;29593:36;;;29609:18;;:::i;:::-;29684:2;29678:9;29652:2;29738:13;;-1:-1:-1;;29734:22:60;;;29758:2;29730:31;29726:40;29714:53;;;29782:18;;;29802:22;;;29779:46;29776:72;;;29828:18;;:::i;:::-;29868:10;29864:2;29857:22;29903:2;29895:6;29888:18;29943:7;29938:2;29933;29929;29925:11;29921:20;29918:33;29915:53;;;29964:1;29961;29954:12;29915:53;29977:68;30042:2;30037;30029:6;30025:15;30020:2;30016;30012:11;29977:68;:::i;30081:273::-;30149:6;30202:2;30190:9;30181:7;30177:23;30173:32;30170:52;;;30218:1;30215;30208:12;30170:52;30250:9;30244:16;30300:4;30293:5;30289:16;30282:5;30279:27;30269:55;;30320:1;30317;30310:12;30359:812;30770:25;30765:3;30758:38;30740:3;30825:6;30819:13;30841:75;30909:6;30904:2;30899:3;30895:12;30888:4;30880:6;30876:17;30841:75;:::i;:::-;-1:-1:-1;;;30975:2:60;30935:16;;;30967:11;;;30960:40;31025:13;;31047:76;31025:13;31109:2;31101:11;;31094:4;31082:17;;31047:76;:::i;:::-;31143:17;31162:2;31139:26;;30359:812;-1:-1:-1;;;;30359:812:60:o;31522:277::-;31589:6;31642:2;31630:9;31621:7;31617:23;31613:32;31610:52;;;31658:1;31655;31648:12;31610:52;31690:9;31684:16;31743:5;31736:13;31729:21;31722:5;31719:32;31709:60;;31765:1;31762;31755:12;32155:136;32194:3;32222:5;32212:39;;32231:18;;:::i;:::-;-1:-1:-1;;;32267:18:60;;32155:136::o", - "linkReferences": {}, - "immutableReferences": { - "43084": [{ "start": 11609, "length": 32 }], - "47467": [{ "start": 3193, "length": 32 }], - "47936": [{ "start": 3641, "length": 32 }] - } - }, - "methodIdentifiers": { - "checkDeploymentStatus(address)": "d12fc182", - "deactivate(address)": "3ea053eb", - "deposit(address,uint256,uint256)": "0efe6a8b", - "depositCancelRequest(address,uint256,uint256,uint256)": "a6d1d6c6", - "depositReclaim(address,uint256,uint256,uint256)": "23205c52", - "depositWithMessage(address,uint256,uint256,uint256[])": "be58b18e", - "depositWithMessageCancelRequest(address,uint256,uint256,uint256[],uint256)": "cf50fd1c", - "depositWithMessageReclaim(address,uint256,uint256,uint256[],uint256)": "b5cd0c3c", - "disableWithdrawalLimit(address)": "5a72af89", - "enableWithdrawalLimit(address)": "14af98b3", - "enrollToken(address)": "ad8b92b4", - "estimateDepositFeeWei()": "af8bc15e", - "estimateEnrollmentFeeWei()": "4d8b92a5", - "getMaxTotalBalance(address)": "4baf43da", - "getRemainingIntradayAllowance(address)": "496ae54c", - "getStatus(address)": "30ccebb5", - "identify()": "eeb72866", - "initialize(bytes)": "439fab91", - "isAppGovernor(address)": "5a5d1bb9", - "isAppRoleAdmin(address)": "8e5224ff", - "isFrozen()": "33eeb147", - "isGovernanceAdmin(address)": "cb1cccce", - "isOperator(address)": "6d70f7ae", - "isSecurityAdmin(address)": "d08fb6cb", - "isSecurityAgent(address)": "757bd9ab", - "isServicingToken(address)": "0c6f8664", - "isTokenAdmin(address)": "a2bdde3d", - "isUpgradeGovernor(address)": "6c04d9d5", - "maxDeposit()": "6083e59a", - "registerAppGovernor(address)": "cdd1f70d", - "registerAppRoleAdmin(address)": "17896383", - "registerGovernanceAdmin(address)": "9463629a", - "registerOperator(address)": "3682a450", - "registerSecurityAdmin(address)": "62a14376", - "registerSecurityAgent(address)": "0e770f23", - "registerTokenAdmin(address)": "0b3a2d21", - "registerUpgradeGovernor(address)": "6fc97cbf", - "renounceRole(bytes32,address)": "36568abe", - "revokeAppGovernor(address)": "deec9c5a", - "revokeAppRoleAdmin(address)": "2f951985", - "revokeGovernanceAdmin(address)": "ee0e6807", - "revokeOperator(address)": "fad8b32a", - "revokeSecurityAdmin(address)": "8101b64c", - "revokeSecurityAgent(address)": "d9fa7091", - "revokeTokenAdmin(address)": "fa0f73ba", - "revokeUpgradeGovernor(address)": "ed9ef16a", - "setL2TokenBridge(uint256)": "7fc2ab3e", - "setMaxTotalBalance(address,uint256)": "d2b51eea", - "withdraw(address,uint256)": "f3fef3a3", - "withdraw(address,uint256,address)": "69328dec" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"DepositCancelRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"DepositReclaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"DepositWithMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"DepositWithMessageCancelRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"DepositWithMessageReclaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SetL2TokenBridge\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SetMaxTotalBalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"deploymentMsgHash\",\"type\":\"bytes32\"}],\"name\":\"TokenEnrollmentInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"WithdrawalLimitDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"WithdrawalLimitEnabled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"checkDeploymentStatus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"deactivate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositCancelRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositReclaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"}],\"name\":\"depositWithMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositWithMessageCancelRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositWithMessageReclaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"disableWithdrawalLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"enableWithdrawalLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"enrollToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"estimateDepositFeeWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"estimateEnrollmentFeeWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getMaxTotalBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getRemainingIntradayAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getStatus\",\"outputs\":[{\"internalType\":\"enum StarknetTokenStorage.TokenStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isServicingToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2TokenBridge_\",\"type\":\"uint256\"}],\"name\":\"setL2TokenBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalBalance_\",\"type\":\"uint256\"}],\"name\":\"setMaxTotalBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"deactivate(address)\":{\"params\":{\"token\":\"The address of the token contract to be deactivated. No return value, but it updates the token's status to 'Deactivated'. Emits a `TokenDeactivated` event when the deactivation is successful. Throws an error if the token is not enrolled or if the sender is not the manager.\"}},\"enrollToken(address)\":{\"params\":{\"token\":\"The address of the token contract to be enrolled. No return value, but it updates the token's status to 'Pending' and records the deployment message and expiration time. Emits a `TokenEnrollmentInitiated` event when the enrollment is initiated. Throws an error if the sender is not the manager or if the deployment message does not exist.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkDeploymentStatus(address)\":{\"notice\":\"Checks token deployment status. Relies on Starknet clearing L1-L2 message upon successful completion of deployment. Processing: Check the l1-l2 deployment message. Set status to `active` If consumed. If not consumed after the expected duration, it returns the status to unknown.\"},\"deactivate(address)\":{\"notice\":\"Deactivates a token in the system. This function is used to deactivate a token that was previously enrolled. Only the manager, who initiated the enrollment, can call this function.\"},\"disableWithdrawalLimit(address)\":{\"notice\":\"Unset withdrawal limit for a token.\"},\"enableWithdrawalLimit(address)\":{\"notice\":\"Set withdrawal limit for a token.\"},\"enrollToken(address)\":{\"notice\":\"Initiates the enrollment of a token into the system. This function is used to initiate the enrollment process of a token. The token is marked as 'Pending' because the success of the deployment is uncertain at this stage. The deployment message's existence is checked, indicating that deployment has been attempted. The success of the deployment is determined at a later stage during the application's lifecycle. Only the manager, who initiates the deployment, can call this function.\"},\"getRemainingIntradayAllowance(address)\":{\"notice\":\"Returns the remaining amount of withdrawal allowed for this day. If the daily allowance was not yet set, it is calculated and returned. If the withdraw limit is not enabled for that token - the uint256.max is returned.\"},\"isServicingToken(address)\":{\"notice\":\"Checks whether the calling contract is providing a service for the specified token. Returns True if the calling contract is providing a service for the token, otherwise false.\"},\"setMaxTotalBalance(address,uint256)\":{\"notice\":\"Set the maximum allowed balance of the bridge. Note: It is possible to set a lower value than the current total balance. In this case, deposits will not be possible, until enough withdrawls are done, such that the total balance is below the limit.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/solidity/StarknetTokenBridge.sol\":\"StarknetTokenBridge\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/solidity/Fees.sol\":{\"keccak256\":\"0x6fa10e28a17e78b1465187c9104996abb06b31174fc1eac497e70a150522c63b\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://20948960e5b633ca1db0fccf80de4428278cfae251c203a77a06d4e71bdf618f\",\"dweb:/ipfs/QmT8eEz1bBKDZe7CW7C9PXPU7WDzu29tnWM53K1X9kNupj\"]},\"src/solidity/IStarkgateBridge.sol\":{\"keccak256\":\"0xaf3121a6b46e199a684bcba5a1b43d26167f67454d70bb58cec9ccb9cd831878\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://6e21adb919d6340cd68fa9199c6b54fb209a9ecf8de4ab2918a693313b9aa004\",\"dweb:/ipfs/QmaWoVA3EXV8sSFK5k3ZqDoBYutRpATzPzenH39GZHBqGn\"]},\"src/solidity/IStarkgateManager.sol\":{\"keccak256\":\"0x922e8c094ca384f808971ce133383a1f09a08a407ff9d42390f997c23b92e54c\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9bcf0a975b59d420a33d66e9ee2148c5a87a5ed717cb8087610750d176fd39d8\",\"dweb:/ipfs/Qmf8nCJwwNN1pSB53wpV6hQzZdyNZtdgBuFt4y6JYX9PuT\"]},\"src/solidity/IStarkgateRegistry.sol\":{\"keccak256\":\"0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172\",\"dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7\"]},\"src/solidity/IStarkgateService.sol\":{\"keccak256\":\"0xd867557468c043dbf6be2a2f98226964338258d108e55481202802311e122da8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://6db7ee4ebdc4765a12589afb705aea612126b84bae58cb8453568bd12e090946\",\"dweb:/ipfs/QmXYxCtSSfYsxa9uiV1HKFX7puutZ2k2Zm3aCcgGZ5Frmx\"]},\"src/solidity/StarkgateConstants.sol\":{\"keccak256\":\"0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c\",\"dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx\"]},\"src/solidity/StarkgateManager.sol\":{\"keccak256\":\"0x547e201622f2d7dc733e74aed2d0a3a6755f021fa047e91a2adb1ae51aad1927\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b8694c133d78305a6465075f39957c4ca851774569b0414d6768a29d0bcd975\",\"dweb:/ipfs/QmeS9S5fmjWzZ8EU9MnkyvuDUsy3YFbnBSam3DaLotU97X\"]},\"src/solidity/StarknetTokenBridge.sol\":{\"keccak256\":\"0x9ed45c3f13d5afeae5a10c63e6dbaf23c6e80c3dc27f8a1290df23e345cbdb13\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://fe75594073da091d7d9380ed5f326b3af1d888eefd22e426635823c187de475d\",\"dweb:/ipfs/QmUqf3kCWaAFzov1kp1Z2YyEqboAqipTzokaimbzFhAxjs\"]},\"src/solidity/StarknetTokenStorage.sol\":{\"keccak256\":\"0xcdcd69d9ff44db4e7a564cb22d6d5ff571f85448785b6712b8edadfc698a1582\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://64f99efd55def7799ada9d6243d00c37007f9573a5ef1e627d830a94d7a33a52\",\"dweb:/ipfs/QmTYGH8AfSDCDnKm9DNuwZXeKTZH4jrtAondVqA8Nmv7AQ\"]},\"src/solidity/WithdrawalLimit.sol\":{\"keccak256\":\"0x873fabcb885ffbb2228b8cc742485718d0fc3d773bfa86334b2146418bc3bb56\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://677065f504fda831def60b0bd8b9d05676cb38f858f11230a482bfa2ca148ad6\",\"dweb:/ipfs/QmPGm9f7kjEX8W1VbZYtj3pXPZj6MgWFEfKY9jX4c8651h\"]},\"src/solidity/utils/Felt252.sol\":{\"keccak256\":\"0x6086a12a4bcb59a3386630e9661a5720f4821169630e01c7287d014f0194a7f8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://12f16a493c1f91c3ec93c53c3ce4bdb46766ca6e1d425d65bf449d09068742d0\",\"dweb:/ipfs/Qma7yEFLywp53jKCBX1HyKYYL4YJesptVn3zfFcSEX7Y4h\"]},\"starkware/cairo/eth/CairoConstants.sol\":{\"keccak256\":\"0x57c804ac02eda4fb9f9b345a1c088e8a8276e2cfd36ffe6e9878856fe8c12bef\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://916e5076db8f5cf552ce6cf46911ae817d245a704be2815167dc62ffb2b6eddb\",\"dweb:/ipfs/Qme5Wnz1iLGpi9WSnEUb2MAWmXZYrKwPFHarE7VQJr742E\"]},\"starkware/solidity/components/Roles.sol\":{\"keccak256\":\"0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3\",\"dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv\"]},\"starkware/solidity/interfaces/BlockDirectCall.sol\":{\"keccak256\":\"0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3\",\"dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS\"]},\"starkware/solidity/interfaces/ContractInitializer.sol\":{\"keccak256\":\"0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6\",\"dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7\"]},\"starkware/solidity/interfaces/Identity.sol\":{\"keccak256\":\"0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888\",\"dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh\"]},\"starkware/solidity/interfaces/ProxySupport.sol\":{\"keccak256\":\"0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6\",\"dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4\"]},\"starkware/solidity/libraries/AccessControl.sol\":{\"keccak256\":\"0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074\",\"dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e\"]},\"starkware/solidity/libraries/Addresses.sol\":{\"keccak256\":\"0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89\",\"dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS\"]},\"starkware/solidity/libraries/NamedStorage.sol\":{\"keccak256\":\"0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a\",\"dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi\"]},\"starkware/solidity/libraries/RolesLib.sol\":{\"keccak256\":\"0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb\",\"dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL\"]},\"starkware/solidity/libraries/Transfers.sol\":{\"keccak256\":\"0x596ec057b47f24b7776a71a2de0100078c1fbb18d2762cb2501236e79b1331ef\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e595e54d35bd5ad0fbda03b7b105626b8b2a93fe4ee37f158070931e935b16b6\",\"dweb:/ipfs/QmUKYd6GF5YaYWENtZo8NmBcYKuN4svuwyeVxA2CShXYji\"]},\"starkware/solidity/tokens/ERC20/IERC20.sol\":{\"keccak256\":\"0x04bae6eb13e8755ac10de0b0549806dadc167f4e22054f065478dda5bb5635f4\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b097f7cffcdd93ab330be7751bfad246d0d47c63ae0e3a3215b031895c821a68\",\"dweb:/ipfs/QmVZRaTM2vopCZSskT2UMWLPkPQpiYYkRjgDNurrJAMuve\"]},\"starkware/solidity/tokens/ERC20/IERC20Metadata.sol\":{\"keccak256\":\"0x88b3f63040f3cc91d897fb09469ab21cd61388f4861d2e4bc4758d01f8339282\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b359ecd6460824213331e699bf0a70ab72ab9ffd03527a97c5669282a159551a\",\"dweb:/ipfs/QmPPuhpDVGaeFSqoJTxn2k5bDU9agwbnbo5qx99ApGB2BX\"]},\"starkware/starknet/solidity/IStarknetMessaging.sol\":{\"keccak256\":\"0x0b5ad38d2ffea6fdc5dc39d9340871f06c98c56c3faa276f92a542690b57cf64\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9e28c6d7e599915e824ae100975b20174f5fa168904c81c0305facfd3f4f7651\",\"dweb:/ipfs/QmWiRdEkNDyKwigTiXkNbYpTkLj5WUEVo5TLgtfeeSEhmp\"]},\"starkware/starknet/solidity/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0x2f455c3c28792bded72e19d0c1a21af7459b66d6071c3d996f6259c93f096424\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://95302fc273848d1c795344d6e6184c2def7866da81d563ae9ae9b3e9d8fcf7e7\",\"dweb:/ipfs/QmaHb55eq8Su9gEtqe3XbiyQkuf1Pk7CwKJkF9CXYbRrFN\"]},\"third_party/open_zeppelin/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.23+commit.f704f362" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Deposit", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DepositCancelRequest", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DepositReclaimed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DepositWithMessage", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DepositWithMessageCancelRequest", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256", - "indexed": true - }, - { - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DepositWithMessageReclaimed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "SetL2TokenBridge", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "SetMaxTotalBalance", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "TokenDeactivated", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "deploymentMsgHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "TokenEnrollmentInitiated", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Withdrawal", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "WithdrawalLimitDisabled", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "WithdrawalLimitEnabled", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "checkDeploymentStatus" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "deactivate" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "deposit" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "depositCancelRequest" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "depositReclaim" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "depositWithMessage" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "depositWithMessageCancelRequest" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "depositWithMessageReclaim" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "disableWithdrawalLimit" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "enableWithdrawalLimit" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "payable", - "type": "function", - "name": "enrollToken" - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "estimateDepositFeeWei", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "estimateEnrollmentFeeWei", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getMaxTotalBalance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getRemainingIntradayAllowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getStatus", - "outputs": [ - { - "internalType": "enum StarknetTokenStorage.TokenStatus", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "identify", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppRoleAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isFrozen", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isGovernanceAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isOperator", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAgent", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isServicingToken", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isTokenAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isUpgradeGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "maxDeposit", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerUpgradeGovernor" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeUpgradeGovernor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2TokenBridge_", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setL2TokenBridge" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { - "internalType": "uint256", - "name": "maxTotalBalance_", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setMaxTotalBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdraw" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdraw" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "deactivate(address)": { - "params": { - "token": "The address of the token contract to be deactivated. No return value, but it updates the token's status to 'Deactivated'. Emits a `TokenDeactivated` event when the deactivation is successful. Throws an error if the token is not enrolled or if the sender is not the manager." - } - }, - "enrollToken(address)": { - "params": { - "token": "The address of the token contract to be enrolled. No return value, but it updates the token's status to 'Pending' and records the deployment message and expiration time. Emits a `TokenEnrollmentInitiated` event when the enrollment is initiated. Throws an error if the sender is not the manager or if the deployment message does not exist." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "checkDeploymentStatus(address)": { - "notice": "Checks token deployment status. Relies on Starknet clearing L1-L2 message upon successful completion of deployment. Processing: Check the l1-l2 deployment message. Set status to `active` If consumed. If not consumed after the expected duration, it returns the status to unknown." - }, - "deactivate(address)": { - "notice": "Deactivates a token in the system. This function is used to deactivate a token that was previously enrolled. Only the manager, who initiated the enrollment, can call this function." - }, - "disableWithdrawalLimit(address)": { - "notice": "Unset withdrawal limit for a token." - }, - "enableWithdrawalLimit(address)": { - "notice": "Set withdrawal limit for a token." - }, - "enrollToken(address)": { - "notice": "Initiates the enrollment of a token into the system. This function is used to initiate the enrollment process of a token. The token is marked as 'Pending' because the success of the deployment is uncertain at this stage. The deployment message's existence is checked, indicating that deployment has been attempted. The success of the deployment is determined at a later stage during the application's lifecycle. Only the manager, who initiates the deployment, can call this function." - }, - "getRemainingIntradayAllowance(address)": { - "notice": "Returns the remaining amount of withdrawal allowed for this day. If the daily allowance was not yet set, it is calculated and returned. If the withdraw limit is not enabled for that token - the uint256.max is returned." - }, - "isServicingToken(address)": { - "notice": "Checks whether the calling contract is providing a service for the specified token. Returns True if the calling contract is providing a service for the token, otherwise false." - }, - "setMaxTotalBalance(address,uint256)": { - "notice": "Set the maximum allowed balance of the bridge. Note: It is possible to set a lower value than the current total balance. In this case, deposits will not be possible, until enough withdrawls are done, such that the total balance is below the limit." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": ["forge-std/=lib/forge-std/src/"], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "src/solidity/StarknetTokenBridge.sol": "StarknetTokenBridge" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "src/solidity/Fees.sol": { - "keccak256": "0x6fa10e28a17e78b1465187c9104996abb06b31174fc1eac497e70a150522c63b", - "urls": [ - "bzz-raw://20948960e5b633ca1db0fccf80de4428278cfae251c203a77a06d4e71bdf618f", - "dweb:/ipfs/QmT8eEz1bBKDZe7CW7C9PXPU7WDzu29tnWM53K1X9kNupj" - ], - "license": "Apache-2.0." - }, - "src/solidity/IStarkgateBridge.sol": { - "keccak256": "0xaf3121a6b46e199a684bcba5a1b43d26167f67454d70bb58cec9ccb9cd831878", - "urls": [ - "bzz-raw://6e21adb919d6340cd68fa9199c6b54fb209a9ecf8de4ab2918a693313b9aa004", - "dweb:/ipfs/QmaWoVA3EXV8sSFK5k3ZqDoBYutRpATzPzenH39GZHBqGn" - ], - "license": "Apache-2.0." - }, - "src/solidity/IStarkgateManager.sol": { - "keccak256": "0x922e8c094ca384f808971ce133383a1f09a08a407ff9d42390f997c23b92e54c", - "urls": [ - "bzz-raw://9bcf0a975b59d420a33d66e9ee2148c5a87a5ed717cb8087610750d176fd39d8", - "dweb:/ipfs/Qmf8nCJwwNN1pSB53wpV6hQzZdyNZtdgBuFt4y6JYX9PuT" - ], - "license": "Apache-2.0." - }, - "src/solidity/IStarkgateRegistry.sol": { - "keccak256": "0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2", - "urls": [ - "bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172", - "dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7" - ], - "license": "Apache-2.0." - }, - "src/solidity/IStarkgateService.sol": { - "keccak256": "0xd867557468c043dbf6be2a2f98226964338258d108e55481202802311e122da8", - "urls": [ - "bzz-raw://6db7ee4ebdc4765a12589afb705aea612126b84bae58cb8453568bd12e090946", - "dweb:/ipfs/QmXYxCtSSfYsxa9uiV1HKFX7puutZ2k2Zm3aCcgGZ5Frmx" - ], - "license": "Apache-2.0." - }, - "src/solidity/StarkgateConstants.sol": { - "keccak256": "0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642", - "urls": [ - "bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c", - "dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx" - ], - "license": "Apache-2.0." - }, - "src/solidity/StarkgateManager.sol": { - "keccak256": "0x547e201622f2d7dc733e74aed2d0a3a6755f021fa047e91a2adb1ae51aad1927", - "urls": [ - "bzz-raw://3b8694c133d78305a6465075f39957c4ca851774569b0414d6768a29d0bcd975", - "dweb:/ipfs/QmeS9S5fmjWzZ8EU9MnkyvuDUsy3YFbnBSam3DaLotU97X" - ], - "license": "Apache-2.0." - }, - "src/solidity/StarknetTokenBridge.sol": { - "keccak256": "0x9ed45c3f13d5afeae5a10c63e6dbaf23c6e80c3dc27f8a1290df23e345cbdb13", - "urls": [ - "bzz-raw://fe75594073da091d7d9380ed5f326b3af1d888eefd22e426635823c187de475d", - "dweb:/ipfs/QmUqf3kCWaAFzov1kp1Z2YyEqboAqipTzokaimbzFhAxjs" - ], - "license": "Apache-2.0." - }, - "src/solidity/StarknetTokenStorage.sol": { - "keccak256": "0xcdcd69d9ff44db4e7a564cb22d6d5ff571f85448785b6712b8edadfc698a1582", - "urls": [ - "bzz-raw://64f99efd55def7799ada9d6243d00c37007f9573a5ef1e627d830a94d7a33a52", - "dweb:/ipfs/QmTYGH8AfSDCDnKm9DNuwZXeKTZH4jrtAondVqA8Nmv7AQ" - ], - "license": "Apache-2.0." - }, - "src/solidity/WithdrawalLimit.sol": { - "keccak256": "0x873fabcb885ffbb2228b8cc742485718d0fc3d773bfa86334b2146418bc3bb56", - "urls": [ - "bzz-raw://677065f504fda831def60b0bd8b9d05676cb38f858f11230a482bfa2ca148ad6", - "dweb:/ipfs/QmPGm9f7kjEX8W1VbZYtj3pXPZj6MgWFEfKY9jX4c8651h" - ], - "license": "Apache-2.0." - }, - "src/solidity/utils/Felt252.sol": { - "keccak256": "0x6086a12a4bcb59a3386630e9661a5720f4821169630e01c7287d014f0194a7f8", - "urls": [ - "bzz-raw://12f16a493c1f91c3ec93c53c3ce4bdb46766ca6e1d425d65bf449d09068742d0", - "dweb:/ipfs/Qma7yEFLywp53jKCBX1HyKYYL4YJesptVn3zfFcSEX7Y4h" - ], - "license": "Apache-2.0." - }, - "starkware/cairo/eth/CairoConstants.sol": { - "keccak256": "0x57c804ac02eda4fb9f9b345a1c088e8a8276e2cfd36ffe6e9878856fe8c12bef", - "urls": [ - "bzz-raw://916e5076db8f5cf552ce6cf46911ae817d245a704be2815167dc62ffb2b6eddb", - "dweb:/ipfs/Qme5Wnz1iLGpi9WSnEUb2MAWmXZYrKwPFHarE7VQJr742E" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/components/Roles.sol": { - "keccak256": "0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf", - "urls": [ - "bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3", - "dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/BlockDirectCall.sol": { - "keccak256": "0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6", - "urls": [ - "bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3", - "dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/ContractInitializer.sol": { - "keccak256": "0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a", - "urls": [ - "bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6", - "dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/Identity.sol": { - "keccak256": "0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08", - "urls": [ - "bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888", - "dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/interfaces/ProxySupport.sol": { - "keccak256": "0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a", - "urls": [ - "bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6", - "dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/AccessControl.sol": { - "keccak256": "0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32", - "urls": [ - "bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074", - "dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e" - ], - "license": "MIT" - }, - "starkware/solidity/libraries/Addresses.sol": { - "keccak256": "0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179", - "urls": [ - "bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89", - "dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/NamedStorage.sol": { - "keccak256": "0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e", - "urls": [ - "bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a", - "dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/RolesLib.sol": { - "keccak256": "0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0", - "urls": [ - "bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb", - "dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/libraries/Transfers.sol": { - "keccak256": "0x596ec057b47f24b7776a71a2de0100078c1fbb18d2762cb2501236e79b1331ef", - "urls": [ - "bzz-raw://e595e54d35bd5ad0fbda03b7b105626b8b2a93fe4ee37f158070931e935b16b6", - "dweb:/ipfs/QmUKYd6GF5YaYWENtZo8NmBcYKuN4svuwyeVxA2CShXYji" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/tokens/ERC20/IERC20.sol": { - "keccak256": "0x04bae6eb13e8755ac10de0b0549806dadc167f4e22054f065478dda5bb5635f4", - "urls": [ - "bzz-raw://b097f7cffcdd93ab330be7751bfad246d0d47c63ae0e3a3215b031895c821a68", - "dweb:/ipfs/QmVZRaTM2vopCZSskT2UMWLPkPQpiYYkRjgDNurrJAMuve" - ], - "license": "Apache-2.0." - }, - "starkware/solidity/tokens/ERC20/IERC20Metadata.sol": { - "keccak256": "0x88b3f63040f3cc91d897fb09469ab21cd61388f4861d2e4bc4758d01f8339282", - "urls": [ - "bzz-raw://b359ecd6460824213331e699bf0a70ab72ab9ffd03527a97c5669282a159551a", - "dweb:/ipfs/QmPPuhpDVGaeFSqoJTxn2k5bDU9agwbnbo5qx99ApGB2BX" - ], - "license": "Apache-2.0." - }, - "starkware/starknet/solidity/IStarknetMessaging.sol": { - "keccak256": "0x0b5ad38d2ffea6fdc5dc39d9340871f06c98c56c3faa276f92a542690b57cf64", - "urls": [ - "bzz-raw://9e28c6d7e599915e824ae100975b20174f5fa168904c81c0305facfd3f4f7651", - "dweb:/ipfs/QmWiRdEkNDyKwigTiXkNbYpTkLj5WUEVo5TLgtfeeSEhmp" - ], - "license": "Apache-2.0." - }, - "starkware/starknet/solidity/IStarknetMessagingEvents.sol": { - "keccak256": "0x2f455c3c28792bded72e19d0c1a21af7459b66d6071c3d996f6259c93f096424", - "urls": [ - "bzz-raw://95302fc273848d1c795344d6e6184c2def7866da81d563ae9ae9b3e9d8fcf7e7", - "dweb:/ipfs/QmaHb55eq8Su9gEtqe3XbiyQkuf1Pk7CwKJkF9CXYbRrFN" - ], - "license": "Apache-2.0." - }, - "third_party/open_zeppelin/utils/Strings.sol": { - "keccak256": "0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3", - "urls": [ - "bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638", - "dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 36 -} diff --git a/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs b/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs index af6e9e0..8cb02a1 100644 --- a/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs +++ b/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs @@ -7,6 +7,7 @@ use ethers::types::Address; use starknet_proxy_client::clients::proxy_5_0_0::ProxySupport5_0_0; /// Client to interact with a Token Bridge (ERC20) +#[derive(Clone)] pub struct StarknetTokenBridgeContractClient { token_bridge: StarknetTokenBridge, proxy_support: ProxySupport5_0_0, diff --git a/crates/l2/starknet-token-bridge-client/src/interfaces/token_bridge.rs b/crates/l2/starknet-token-bridge-client/src/interfaces/token_bridge.rs index db568df..5c45cef 100644 --- a/crates/l2/starknet-token-bridge-client/src/interfaces/token_bridge.rs +++ b/crates/l2/starknet-token-bridge-client/src/interfaces/token_bridge.rs @@ -12,32 +12,7 @@ type Address = H160; abigen!( StarknetTokenBridge, - r#"[ - function deposit(address token, uint256 amount, uint256 l2Recipient) external payable onlyServicingToken - function withdraw(address token, uint256 amount, address recipient) public - - function setL2TokenBridge(uint256 l2TokenBridge_) external onlyAppGovernor - function enableWithdrawalLimit(address token) external onlySecurityAgent - function disableWithdrawalLimit(address token) external onlySecurityAdmin - function setMaxTotalBalance(address token, uint256 maxTotalBalance_) external onlyAppGovernor - - function register_app_governor(address account) external - function registerAppRoleAdmin(address account) external - function registerGovernanceAdmin(address account) external - function registerOperator(address account) external - function register_security_admin(address account) external - function registerSecurityAgent(address account) external - function registerTokenAdmin(address account) external - function registerUpgradeGovernor(address account) external - - function identify() external pure virtual returns (string memory) - function estimateDepositFeeWei() external view returns (uint256) - function estimateEnrollmentFeeWei() external view returns (uint256) - function isServicingToken(address token) public view returns (bool) - function getRemainingIntradayAllowance(address token) external view returns (uint256) - function getMaxTotalBalance(address token) public view returns (uint256) - function maxDeposit() external pure returns (uint256) - ]"#, + "../../../artifacts/starkgate-contracts/StarknetTokenBridge.json", ); #[async_trait] @@ -109,10 +84,10 @@ where &self, token: Address, amount: U256, - recipient: Address, + _recipient: Address, ) -> Result, Error> { self.as_ref() - .withdraw(token, amount, recipient) + .withdraw(token, amount) .send() .await .map_err(Into::>::into)? diff --git a/crates/l2/starknet-token-bridge-client/src/lib.rs b/crates/l2/starknet-token-bridge-client/src/lib.rs index c585bae..0cb876d 100644 --- a/crates/l2/starknet-token-bridge-client/src/lib.rs +++ b/crates/l2/starknet-token-bridge-client/src/lib.rs @@ -7,7 +7,8 @@ use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; -const STARKNET_TOKEN_BRIDGE: &str = include_str!("artifacts/StarknetTokenBridge.json"); +const STARKNET_TOKEN_BRIDGE: &str = + include_str!("../../../../artifacts/starkgate-contracts/StarknetTokenBridge.json"); pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( client: Arc, diff --git a/crates/l2/utils/build.rs b/crates/l2/utils/build.rs new file mode 100755 index 0000000..4c1fa83 --- /dev/null +++ b/crates/l2/utils/build.rs @@ -0,0 +1,148 @@ +use std::env; +use std::path::PathBuf; +use std::process::Command; + +fn main() -> Result<(), Box> { + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-env-changed=FORCE_REBUILD"); + + Command::new("git") + .args(["submodule", "update", "--init", "--recursive"]) + .status()?; + + let manifest_dir = env::var("CARGO_MANIFEST_DIR")?; + let binding = PathBuf::from(manifest_dir); + let root_dir = binding + .parent() // go up to l2 + .and_then(|p| p.parent()) // go up to crates + .and_then(|p| p.parent()) // go up to root + .ok_or("Could not find root directory")?; + + match check_dependencies() { + Ok(_) => println!("All required dependencies are installed."), + Err(e) => { + println!("Missing Dependencies Error:"); + println!("{}", e); + println!("\nPlease install the missing dependencies and try again."); + std::process::exit(1); + } + } + + Command::new("make") + .current_dir(root_dir) + .arg("l2-artifacts") + .status()?; + Ok(()) +} + +#[derive(Debug)] +pub struct DependencyError { + pub missing_deps: Vec, + pub install_instructions: String, +} + +impl std::fmt::Display for DependencyError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Missing dependencies: {}\n\nInstallation instructions:\n{}", + self.missing_deps.join(", "), + self.install_instructions + ) + } +} + +impl std::error::Error for DependencyError {} + +pub fn check_dependencies() -> Result<(), Box> { + let mut missing_deps = Vec::new(); + let mut install_instructions = String::new(); + + // Check ganache + if !check_command("ganache", &["--version"]) { + missing_deps.push("ganache".to_string()); + install_instructions.push_str( + "Install ganache via npm:\n\ + npm install -g ganache\n\n", + ); + } + + // Check solc + if !check_command("solc", &["--version"]) { + missing_deps.push("solc".to_string()); + install_instructions.push_str( + "Install solc:\n\ + - On Ubuntu/Debian: sudo apt-get install solc\n\ + - On macOS: brew install solidity\n\ + - Using pip: pip install solc-select && solc-select install 0.8.19 && solc-select use 0.8.19\n\n" + ); + } + + // Check python3 + if !check_command("python3", &["--version"]) { + missing_deps.push("python3".to_string()); + install_instructions.push_str( + "Install Python 3:\n\ + - On Ubuntu/Debian: sudo apt-get install python3\n\ + - On macOS: brew install python3\n\ + - Windows: Download from https://www.python.org/downloads/\n\n", + ); + } + + // Check forge + if !check_command("forge", &["--version"]) { + missing_deps.push("forge".to_string()); + install_instructions.push_str( + "Install Foundry (includes forge):\n\ + curl -L https://foundry.paradigm.xyz | bash\n\ + Then run: foundryup\n\n", + ); + } + + println!("Checking dependencies..."); + println!("{}", "-".repeat(50)); + + check_and_print_version("Ganache", "ganache", &["--version"]); + check_and_print_version("Solc", "solc", &["--version"]); + check_and_print_version("Python3", "python3", &["--version"]); + check_and_print_version("Forge", "forge", &["--version"]); + + println!("{}", "-".repeat(50)); + + if !missing_deps.is_empty() { + return Err(Box::new(DependencyError { + missing_deps, + install_instructions, + })); + } + + println!("All dependencies are installed! ✨"); + Ok(()) +} + +pub fn check_command(cmd: &str, args: &[&str]) -> bool { + Command::new(cmd) + .args(args) + .output() + .map(|output| output.status.success()) + .unwrap_or(false) +} + +pub fn check_and_print_version(name: &str, cmd: &str, args: &[&str]) { + let status = Command::new(cmd) + .args(args) + .output() + .map(|output| { + let version = String::from_utf8_lossy(&output.stdout); + (output.status.success(), version.trim().to_string()) + }) + .unwrap_or((false, String::new())); + + let status_str = if status.0 { + format!("{} ({})", "✓", status.1) + } else { + "✗".to_string() + }; + + println!("{:<12} {}", name, status_str); +} diff --git a/foundry.toml b/foundry.toml index e883058..3ed7e66 100644 --- a/foundry.toml +++ b/foundry.toml @@ -2,5 +2,6 @@ src = "src" out = "out" libs = ["lib"] - -# See more config options https://github.com/foundry-rs/foundry/tree/master/config +solc = "0.8.27" +evm_version = "cancun" +remappings = ["starkware/=lib/cairo-lang/src/starkware/"] diff --git a/lib/cairo-lang b/lib/cairo-lang index efa9648..4ea4fe8 160000 --- a/lib/cairo-lang +++ b/lib/cairo-lang @@ -1 +1 @@ -Subproject commit efa9648f57568aad8f8a13fbf027d2de7c63c2c0 +Subproject commit 4ea4fe8e167845a3402ae2ea0a8b6004aad18dd5 diff --git a/lib/starkgate-contracts b/lib/starkgate-contracts new file mode 160000 index 0000000..4594188 --- /dev/null +++ b/lib/starkgate-contracts @@ -0,0 +1 @@ +Subproject commit 45941888479663ac93e898cd7f8504fa9066c54c diff --git a/lib/starkgate-contracts-0.9 b/lib/starkgate-contracts-0.9 new file mode 160000 index 0000000..c08863a --- /dev/null +++ b/lib/starkgate-contracts-0.9 @@ -0,0 +1 @@ +Subproject commit c08863a1f08226c09f1d0748124192e848d73db9 diff --git a/lib/starkgate-contracts-82e651f b/lib/starkgate-contracts-82e651f new file mode 160000 index 0000000..82e651f --- /dev/null +++ b/lib/starkgate-contracts-82e651f @@ -0,0 +1 @@ +Subproject commit 82e651f5f642508577b6310f47d0d457f5f9a9bb diff --git a/src/Output.sol b/src/Output.sol new file mode 100644 index 0000000..d24cb20 --- /dev/null +++ b/src/Output.sol @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: Apache-2.0. +pragma solidity ^0.8.0; + +import "starkware/starknet/solidity/IStarknetMessagingEvents.sol"; + +library CommitmentTreeUpdateOutput { + /** + Returns the previous commitment tree root. + */ + function getPrevRoot(uint256[] calldata commitmentTreeUpdateData) + internal + pure + returns (uint256) + { + return commitmentTreeUpdateData[0]; + } + + /** + Returns the new commitment tree root. + */ + function getNewRoot(uint256[] calldata commitmentTreeUpdateData) + internal + pure + returns (uint256) + { + return commitmentTreeUpdateData[1]; + } +} + +library StarknetOutput { + uint256 internal constant MERKLE_UPDATE_OFFSET = 0; + uint256 internal constant PREV_BLOCK_NUMBER_OFFSET = 2; + uint256 internal constant NEW_BLOCK_NUMBER_OFFSET = 3; + uint256 internal constant PREV_BLOCK_HASH_OFFSET = 4; + uint256 internal constant NEW_BLOCK_HASH_OFFSET = 5; + uint256 internal constant OS_PROGRAM_HASH_OFFSET = 6; + uint256 internal constant CONFIG_HASH_OFFSET = 7; + uint256 internal constant USE_KZG_DA_OFFSET = 8; + uint256 internal constant FULL_OUTPUT_OFFSET = 9; + uint256 internal constant HEADER_SIZE = 10; + + uint256 internal constant KZG_Z_OFFSET = 0; + uint256 internal constant KZG_N_BLOBS_OFFSET = 1; + uint256 internal constant KZG_COMMITMENTS_OFFSET = 2; + + uint256 constant MESSAGE_TO_L1_FROM_ADDRESS_OFFSET = 0; + uint256 constant MESSAGE_TO_L1_TO_ADDRESS_OFFSET = 1; + uint256 constant MESSAGE_TO_L1_PAYLOAD_SIZE_OFFSET = 2; + uint256 constant MESSAGE_TO_L1_PREFIX_SIZE = 3; + + uint256 constant MESSAGE_TO_L2_FROM_ADDRESS_OFFSET = 0; + uint256 constant MESSAGE_TO_L2_TO_ADDRESS_OFFSET = 1; + uint256 constant MESSAGE_TO_L2_NONCE_OFFSET = 2; + uint256 constant MESSAGE_TO_L2_SELECTOR_OFFSET = 3; + uint256 constant MESSAGE_TO_L2_PAYLOAD_SIZE_OFFSET = 4; + uint256 constant MESSAGE_TO_L2_PREFIX_SIZE = 5; + + /** + Returns the offset of the messages segment in the output_data. + */ + function messageSegmentOffset(uint256[] calldata programOutput) + internal + pure + returns (uint256) + { + if (programOutput[USE_KZG_DA_OFFSET] == 0) { + // No KZG info; messages are right after the header. + return HEADER_SIZE; + } + + uint256 nBlobs = programOutput[HEADER_SIZE + KZG_N_BLOBS_OFFSET]; + return + HEADER_SIZE + + // Point z. + 1 + + // Number of blobs. + 1 + + // KZG commitments. + (2 * nBlobs) + + // Point evaluations. + (2 * nBlobs); + } + + /** + Returns a slice of the 'output_data' with the commitment tree update information. + */ + function getMerkleUpdate(uint256[] calldata output_data) + internal + pure + returns (uint256[] calldata) + { + return output_data[MERKLE_UPDATE_OFFSET:MERKLE_UPDATE_OFFSET + 2]; + } + + /** + Processes a message segment from the program output. + The format of a message segment is the length of the messages in words followed + by the concatenation of all the messages. + + The 'messages' mapping is updated according to the messages and the direction ('isL2ToL1'). + */ + function processMessages( + bool isL2ToL1, + uint256[] calldata programOutputSlice, + mapping(bytes32 => uint256) storage messages + ) internal returns (uint256) { + uint256 messageSegmentSize = programOutputSlice[0]; + require(messageSegmentSize < 2**30, "INVALID_MESSAGE_SEGMENT_SIZE"); + + uint256 offset = 1; + uint256 messageSegmentEnd = offset + messageSegmentSize; + + uint256 payloadSizeOffset = ( + isL2ToL1 ? MESSAGE_TO_L1_PAYLOAD_SIZE_OFFSET : MESSAGE_TO_L2_PAYLOAD_SIZE_OFFSET + ); + + uint256 totalMsgFees = 0; + while (offset < messageSegmentEnd) { + uint256 payloadLengthOffset = offset + payloadSizeOffset; + require(payloadLengthOffset < programOutputSlice.length, "MESSAGE_TOO_SHORT"); + + uint256 payloadLength = programOutputSlice[payloadLengthOffset]; + require(payloadLength < 2**30, "INVALID_PAYLOAD_LENGTH"); + + uint256 endOffset = payloadLengthOffset + 1 + payloadLength; + require(endOffset <= programOutputSlice.length, "TRUNCATED_MESSAGE_PAYLOAD"); + + if (isL2ToL1) { + bytes32 messageHash = keccak256( + abi.encodePacked(programOutputSlice[offset:endOffset]) + ); + + emit IStarknetMessagingEvents.LogMessageToL1( + // from= + programOutputSlice[offset + MESSAGE_TO_L1_FROM_ADDRESS_OFFSET], + // to= + address(uint160(programOutputSlice[offset + MESSAGE_TO_L1_TO_ADDRESS_OFFSET])), + // payload= + (uint256[])(programOutputSlice[offset + MESSAGE_TO_L1_PREFIX_SIZE:endOffset]) + ); + messages[messageHash] += 1; + } else { + { + bytes32 messageHash = keccak256( + abi.encodePacked(programOutputSlice[offset:endOffset]) + ); + + uint256 msgFeePlusOne = messages[messageHash]; + require(msgFeePlusOne > 0, "INVALID_MESSAGE_TO_CONSUME"); + totalMsgFees += msgFeePlusOne - 1; + messages[messageHash] = 0; + } + + uint256 nonce = programOutputSlice[offset + MESSAGE_TO_L2_NONCE_OFFSET]; + uint256[] memory messageSlice = (uint256[])( + programOutputSlice[offset + MESSAGE_TO_L2_PREFIX_SIZE:endOffset] + ); + emit IStarknetMessagingEvents.ConsumedMessageToL2( + // from= + address( + uint160(programOutputSlice[offset + MESSAGE_TO_L2_FROM_ADDRESS_OFFSET]) + ), + // to= + programOutputSlice[offset + MESSAGE_TO_L2_TO_ADDRESS_OFFSET], + // selector= + programOutputSlice[offset + MESSAGE_TO_L2_SELECTOR_OFFSET], + // payload= + messageSlice, + // nonce = + nonce + ); + } + + offset = endOffset; + } + require(offset == messageSegmentEnd, "INVALID_MESSAGE_SEGMENT_SIZE"); + + if (totalMsgFees > 0) { + // NOLINTNEXTLINE: low-level-calls. + (bool success, ) = msg.sender.call{value: totalMsgFees}(""); + require(success, "ETH_TRANSFER_FAILED"); + } + + return offset; + } +} diff --git a/src/StarknetDevCoreContract.sol b/src/StarknetDevCoreContract.sol new file mode 100644 index 0000000..2999b5c --- /dev/null +++ b/src/StarknetDevCoreContract.sol @@ -0,0 +1,552 @@ +/* + Copyright 2019-2024 StarkWare Industries Ltd. + + Licensed under the Apache License, Version 2.0 (the "License"). + You may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.starkware.co/open-source-license/ + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions + and limitations under the License. +*/ +// SPDX-License-Identifier: Apache-2.0. +pragma solidity ^0.8.24; + +import "./Output.sol"; +import "starkware/starknet/solidity/StarknetGovernance.sol"; +import "starkware/starknet/solidity/StarknetMessaging.sol"; +import "starkware/starknet/solidity/StarknetOperator.sol"; +import "./StarknetState.sol"; +import "starkware/solidity/components/GovernedFinalizable.sol"; +import "starkware/solidity/components/OnchainDataFactTreeEncoder.sol"; +import "starkware/solidity/interfaces/ContractInitializer.sol"; +import "starkware/solidity/interfaces/Identity.sol"; +import "starkware/solidity/interfaces/IFactRegistry.sol"; +import "starkware/solidity/interfaces/ProxySupport.sol"; +import "starkware/solidity/libraries/NamedStorage8.sol"; + +contract Starknet is + Identity, + StarknetMessaging, + StarknetGovernance, + GovernedFinalizable, + StarknetOperator, + ContractInitializer, + ProxySupport +{ + using StarknetState for StarknetState.State; + + // Indicates a change of the Starknet config hash. + event ConfigHashChanged( + address indexed changedBy, + uint256 oldConfigHash, + uint256 newConfigHash + ); + + // Logs the new state following a state update. + event LogStateUpdate( + uint256 globalRoot, + int256 blockNumber, + uint256 blockHash + ); + + // Logs a stateTransitionFact that was used to update the state. + event LogStateTransitionFact(bytes32 stateTransitionFact); + + // Indicates a change of the Starknet OS program hash. + event ProgramHashChanged( + address indexed changedBy, + uint256 oldProgramHash, + uint256 newProgramHash + ); + + // Indicates a change of the Starknet aggregator program hash. + event AggregatorProgramHashChanged( + address indexed changedBy, + uint256 oldAggregatorProgramHash, + uint256 newAggregatorProgramHash + ); + + // Random storage slot tags. + string internal constant PROGRAM_HASH_TAG = + "STARKNET_1.0_INIT_PROGRAM_HASH_UINT"; + string internal constant AGGREGATOR_PROGRAM_HASH_TAG = + "STARKNET_1.0_INIT_AGGREGATOR_PROGRAM_HASH_UINT"; + string internal constant VERIFIER_ADDRESS_TAG = + "STARKNET_1.0_INIT_VERIFIER_ADDRESS"; + string internal constant STATE_STRUCT_TAG = + "STARKNET_1.0_INIT_STARKNET_STATE_STRUCT"; + + // The hash of the StarkNet config. + string internal constant CONFIG_HASH_TAG = + "STARKNET_1.0_STARKNET_CONFIG_HASH"; + + // EIP-4844 constants. + address internal constant POINT_EVALUATION_PRECOMPILE_ADDRESS = + address(0x0A); + // The precompile expected output: + // Web3.keccak(FIELD_ELEMENTS_PER_BLOB.to_bytes(32, "big") + BLS_PRIME.to_bytes(32, "big")). + bytes32 internal constant POINT_EVALUATION_PRECOMPILE_OUTPUT = + 0xb2157d3a40131b14c4c675335465dffde802f0ce5218ad012284d7f275d1b37c; + uint256 internal constant PROOF_BYTES_LENGTH = 48; + bytes1 internal constant VERSIONED_HASH_VERSION_KZG = bytes1(0x01); + + function setProgramHash( + uint256 newProgramHash + ) external notFinalized onlyGovernance { + emit ProgramHashChanged(msg.sender, programHash(), newProgramHash); + programHash(newProgramHash); + } + + function setAggregatorProgramHash( + uint256 newAggregatorProgramHash + ) external notFinalized onlyGovernance { + emit AggregatorProgramHashChanged( + msg.sender, + aggregatorProgramHash(), + newAggregatorProgramHash + ); + aggregatorProgramHash(newAggregatorProgramHash); + } + + function setConfigHash( + uint256 newConfigHash + ) external notFinalized onlyGovernance { + emit ConfigHashChanged(msg.sender, configHash(), newConfigHash); + configHash(newConfigHash); + } + + function setMessageCancellationDelay( + uint256 delayInSeconds + ) external notFinalized onlyGovernance { + messageCancellationDelay(delayInSeconds); + } + + // State variable "programHash" read-access function. + function programHash() public view returns (uint256) { + return NamedStorage.getUintValue(PROGRAM_HASH_TAG); + } + + // State variable "programHash" write-access function. + function programHash(uint256 value) internal { + NamedStorage.setUintValue(PROGRAM_HASH_TAG, value); + } + + // State variable "aggregatorProgramHash" read-access function. + function aggregatorProgramHash() public view returns (uint256) { + return NamedStorage.getUintValue(AGGREGATOR_PROGRAM_HASH_TAG); + } + + // State variable "aggregatorProgramHash" write-access function. + function aggregatorProgramHash(uint256 value) internal { + NamedStorage.setUintValue(AGGREGATOR_PROGRAM_HASH_TAG, value); + } + + // State variable "verifier" access function. + function verifier() internal view returns (address) { + return NamedStorage.getAddressValue(VERIFIER_ADDRESS_TAG); + } + + // State variable "configHash" write-access function. + function configHash(uint256 value) internal { + NamedStorage.setUintValue(CONFIG_HASH_TAG, value); + } + + // State variable "configHash" read-access function. + function configHash() public view returns (uint256) { + return NamedStorage.getUintValue(CONFIG_HASH_TAG); + } + + function setVerifierAddress(address value) internal { + NamedStorage.setAddressValueOnce(VERIFIER_ADDRESS_TAG, value); + } + + // State variable "state" access function. + function state() + internal + pure + returns (StarknetState.State storage stateStruct) + { + bytes32 location = keccak256(abi.encodePacked(STATE_STRUCT_TAG)); + assembly { + stateStruct.slot := location + } + } + + function isInitialized() internal view override returns (bool) { + return programHash() != 0; + } + + function numOfSubContracts() internal pure override returns (uint256) { + return 0; + } + + function validateInitData(bytes calldata data) internal view override { + require(data.length == 7 * 32, "ILLEGAL_INIT_DATA_SIZE"); + uint256 programHash_ = abi.decode(data[:32], (uint256)); + require(programHash_ != 0, "BAD_INITIALIZATION"); + } + + function processSubContractAddresses( + bytes calldata subContractAddresses + ) internal override {} + + function initializeContractState(bytes calldata data) internal override { + ( + uint256 programHash_, + uint256 aggregatorProgramHash_, + address verifier_, + uint256 configHash_, + StarknetState.State memory initialState + ) = abi.decode( + data, + (uint256, uint256, address, uint256, StarknetState.State) + ); + + programHash(programHash_); + aggregatorProgramHash(aggregatorProgramHash_); + setVerifierAddress(verifier_); + state().copy(initialState); + configHash(configHash_); + messageCancellationDelay(5 days); + } + + /** + Verifies p(z) = y given z, y, a commitment to p in the KZG segment, + and a KZG proof for every blob. + The verification is done by calling Ethereum's point evaluation precompile. + */ + function verifyKzgProofs( + uint256[] calldata programOutputSlice, + bytes[] calldata kzgProofs + ) internal { + require(programOutputSlice.length >= 2, "KZG_SEGMENT_TOO_SHORT"); + bytes32 z = bytes32(programOutputSlice[StarknetOutput.KZG_Z_OFFSET]); + uint256 nBlobs = programOutputSlice[StarknetOutput.KZG_N_BLOBS_OFFSET]; + uint256 evaluationsOffset = StarknetOutput.KZG_COMMITMENTS_OFFSET + + 2 * + nBlobs; + + require(kzgProofs.length == nBlobs, "INVALID_NUMBER_OF_KZG_PROOFS"); + require( + programOutputSlice.length >= evaluationsOffset + 2 * nBlobs, + "KZG_SEGMENT_TOO_SHORT" + ); + + for (uint256 blobIndex = 0; blobIndex < nBlobs; blobIndex++) { + bytes32 blobHash = blobhash(blobIndex); + require(blobHash != 0, "INVALID_BLOB_INDEX"); + require( + blobHash[0] == VERSIONED_HASH_VERSION_KZG, + "UNEXPECTED_BLOB_HASH_VERSION" + ); + + bytes memory kzgCommitment; + { + uint256 kzgCommitmentLow = programOutputSlice[ + StarknetOutput.KZG_COMMITMENTS_OFFSET + (2 * blobIndex) + ]; + uint256 kzgCommitmentHigh = programOutputSlice[ + StarknetOutput.KZG_COMMITMENTS_OFFSET + (2 * blobIndex) + 1 + ]; + require( + kzgCommitmentLow <= type(uint192).max, + "INVALID_KZG_COMMITMENT" + ); + require( + kzgCommitmentHigh <= type(uint192).max, + "INVALID_KZG_COMMITMENT" + ); + + kzgCommitment = abi.encodePacked( + uint192(kzgCommitmentHigh), + uint192(kzgCommitmentLow) + ); + } + + bytes32 y; + { + uint256 yLow = programOutputSlice[ + evaluationsOffset + (2 * blobIndex) + ]; + uint256 yHigh = programOutputSlice[ + evaluationsOffset + (2 * blobIndex) + 1 + ]; + require(yLow <= type(uint128).max, "INVALID_Y_VALUE"); + require(yHigh <= type(uint128).max, "INVALID_Y_VALUE"); + + y = bytes32((yHigh << 128) + yLow); + } + + require( + kzgProofs[blobIndex].length == PROOF_BYTES_LENGTH, + "INVALID_KZG_PROOF_SIZE" + ); + ( + bool ok, + bytes memory precompile_output + ) = POINT_EVALUATION_PRECOMPILE_ADDRESS.staticcall( + abi.encodePacked( + blobHash, + z, + y, + kzgCommitment, + kzgProofs[blobIndex] + ) + ); + + require(ok, "POINT_EVALUATION_PRECOMPILE_CALL_FAILED"); + require( + keccak256(precompile_output) == + POINT_EVALUATION_PRECOMPILE_OUTPUT, + "UNEXPECTED_POINT_EVALUATION_PRECOMPILE_OUTPUT" + ); + } + } + + /** + Performs the actual state update of Starknet, based on a proof of the Starknet OS that the + state transition is valid. + + Arguments: + programOutput - The main part of the StarkNet OS program output. + stateTransitionFact - An encoding of the 'programOutput' (including on-chain data, if + available). + */ + function updateStateInternal( + uint256[] calldata programOutput, + bytes32 stateTransitionFact + ) internal { + // Validate that all the values are in the range [0, FIELD_PRIME). + validateProgramOutput(programOutput); + + // Validate config hash. + require( + programOutput[StarknetOutput.CONFIG_HASH_OFFSET] == configHash(), + "INVALID_CONFIG_HASH" + ); + + require( + programOutput[StarknetOutput.FULL_OUTPUT_OFFSET] == 0, + "FULL_OUTPUT_NOT_SUPPORTED" + ); + + uint256 factProgramHash; + if (programOutput[StarknetOutput.OS_PROGRAM_HASH_OFFSET] != 0) { + // Aggregator run. + require( + programOutput[StarknetOutput.OS_PROGRAM_HASH_OFFSET] == + programHash(), + "AGGREGATOR_MODE_INVALID_OS_PROGRAM_HASH" + ); + factProgramHash = aggregatorProgramHash(); + } else { + factProgramHash = programHash(); + } + + bytes32 sharpFact = keccak256( + abi.encode(factProgramHash, stateTransitionFact) + ); + require( + IFactRegistry(verifier()).isValid(sharpFact), + "NO_STATE_TRANSITION_PROOF" + ); + emit LogStateTransitionFact(stateTransitionFact); + + // Perform state update. + state().update(programOutput); + + // Process the messages after updating the state. + // This is safer, as there is a call to transfer the fees during + // the processing of the L1 -> L2 messages. + + // Process L2 -> L1 messages. + uint256 outputOffset = StarknetOutput.messageSegmentOffset( + programOutput + ); + outputOffset += StarknetOutput.processMessages( + // isL2ToL1= + true, + programOutput[outputOffset:], + l2ToL1Messages() + ); + + // Process L1 -> L2 messages. + outputOffset += StarknetOutput.processMessages( + // isL2ToL1= + false, + programOutput[outputOffset:], + l1ToL2Messages() + ); + require( + outputOffset == programOutput.length, + "STARKNET_OUTPUT_TOO_LONG" + ); + // Note that processing L1 -> L2 messages does an external call, and it shouldn't be + // followed by storage changes. + + StarknetState.State storage state_ = state(); + emit LogStateUpdate( + state_.globalRoot, + state_.blockNumber, + state_.blockHash + ); + } + + /** + Returns a string that identifies the contract. + */ + function identify() external pure override returns (string memory) { + return "StarkWare_Starknet_2024_9"; + } + + /** + Returns the current state root. + */ + function stateRoot() external view returns (uint256) { + return state().globalRoot; + } + + /** + Returns the current block number. + */ + function stateBlockNumber() external view returns (int256) { + return state().blockNumber; + } + + /** + Returns the current block hash. + */ + function stateBlockHash() external view returns (uint256) { + return state().blockHash; + } + + /** + Validates that all the values are in the range [0, FIELD_PRIME). + */ + function validateProgramOutput( + uint256[] calldata programOutput + ) internal pure { + bool success = true; + assembly { + let + FIELD_PRIME + := 0x800000000000011000000000000000000000000000000000000000000000001 + let programOutputEnd := add( + programOutput.offset, + mul(programOutput.length, 0x20) + ) + for { + let ptr := programOutput.offset + } lt(ptr, programOutputEnd) { + ptr := add(ptr, 0x20) + } { + if iszero(lt(calldataload(ptr), FIELD_PRIME)) { + success := 0 + break + } + } + } + if (!success) { + revert("PROGRAM_OUTPUT_VALUE_OUT_OF_RANGE"); + } + } + + /** + Updates the state of the Starknet, based on a proof of the Starknet OS that the state + transition is valid. Data availability is provided on-chain. + + Arguments: + programOutput - The main part of the StarkNet OS program output. + data_availability_fact - An encoding of the on-chain data associated + with the 'programOutput'. + */ + function updateState( + uint256[] calldata programOutput, + uint256 onchainDataHash, + uint256 onchainDataSize + ) external onlyOperator { + // Validate program output. + require( + programOutput.length > StarknetOutput.HEADER_SIZE, + "STARKNET_OUTPUT_TOO_SHORT" + ); + + // We protect against re-entrancy attacks by reading the block number at the beginning + // and validating that we have the expected block number at the end. + state().checkPrevBlockNumber(programOutput); + + // Validate KZG DA flag. + require( + programOutput[StarknetOutput.USE_KZG_DA_OFFSET] == 0, + "UNEXPECTED_KZG_DA_FLAG" + ); + + bytes32 stateTransitionFact = OnchainDataFactTreeEncoder + .encodeFactWithOnchainData( + programOutput, + OnchainDataFactTreeEncoder.DataAvailabilityFact( + onchainDataHash, + onchainDataSize + ) + ); + updateStateInternal(programOutput, stateTransitionFact); + // Note that updateStateInternal does an external call, and it shouldn't be followed by + // storage changes. + + // Re-entrancy protection (see above). + state().checkNewBlockNumber(programOutput); + } + + /** + Updates the state of the StarkNet, based on a proof of the StarkNet OS that the state + transition is valid. Data availability is committed with KZG and provided in a blob. + + Arguments: + programOutput - The main part of the StarkNet OS program output. + kzgProofs - array of KZG proofs - one per attached blob - which are validated together + with the StarkNet OS data commitments given in 'programOutput'. + */ + function updateStateKzgDA( + uint256[] calldata programOutput, + bytes[] calldata kzgProofs + ) external onlyOperator { + // Validate program output. + require( + programOutput.length > StarknetOutput.HEADER_SIZE, + "STARKNET_OUTPUT_TOO_SHORT" + ); + + // We protect against re-entrancy attacks by reading the block number at the beginning + // and validating that we have the expected block number at the end. + state().checkPrevBlockNumber(programOutput); + + // Verify the KZG Proof. + require( + programOutput[StarknetOutput.USE_KZG_DA_OFFSET] == 1, + "UNEXPECTED_KZG_DA_FLAG" + ); + verifyKzgProofs(programOutput[StarknetOutput.HEADER_SIZE:], kzgProofs); + + bytes32 stateTransitionFact = OnchainDataFactTreeEncoder + .hashMainPublicInput(programOutput); + updateStateInternal(programOutput, stateTransitionFact); + // Note that updateStateInternal does an external call, and it shouldn't be followed by + // storage changes. + + // Re-entrancy protection (see above). + state().checkNewBlockNumber(programOutput); + } + + function updateStateOverride( + uint256 globalRoot, + int256 blockNumber, + uint256 blockHash + ) public onlyOperator { + state().updateOverride(globalRoot, blockNumber, blockHash); + } +} diff --git a/src/StarknetProxy_3_0_2.sol b/src/StarknetProxy_3_0_2.sol deleted file mode 100644 index 9be5351..0000000 --- a/src/StarknetProxy_3_0_2.sol +++ /dev/null @@ -1,330 +0,0 @@ -/* - Copyright 2019-2024 StarkWare Industries Ltd. - - Licensed under the Apache License, Version 2.0 (the "License"). - You may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.starkware.co/open-source-license/ - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions - and limitations under the License. -*/ -// SPDX-License-Identifier: Apache-2.0. -pragma solidity ^0.6.12; - -import "./ProxyGovernance.sol"; -import "./ProxyStorage.sol"; -import "./StorageSlots.sol"; -import "../libraries/Addresses.sol"; - -/** - The Proxy contract implements delegation of calls to other contracts (`implementations`), with - proper forwarding of return values and revert reasons. This pattern allows retaining the contract - storage while replacing implementation code. - - The following operations are supported by the proxy contract: - - - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. - - The only entity allowed to perform the above operations is the proxy governor - (see :sol:mod:`ProxyGovernance`). - - Every implementation is required to have an `initialize` function that replaces the constructor - of a normal contract. Furthermore, the only parameter of this function is an array of bytes - (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the - implementation to ensure that this function cannot be run more than once if so desired. - - When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also - announced, allowing users of the contract to analyze the full effect of an upgrade to the new - implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is - identical to the announced `data` is the upgrade performed by pointing the proxy to the new - implementation and calling its `initialize` function with this `data`. - - It is the responsibility of the implementation not to overwrite any storage belonging to the - proxy (`ProxyStorage`). In addition, upon upgrade, the new implementation is assumed to be - backward compatible with previous implementations with respect to the storage used until that - point. -*/ -contract Proxy is ProxyStorage, ProxyGovernance, StorageSlots { - // Emitted when the active implementation is replaced. - event ImplementationUpgraded(address indexed implementation, bytes initializer); - - // Emitted when an implementation is submitted as an upgrade candidate and a time lock - // is activated. - event ImplementationAdded(address indexed implementation, bytes initializer, bool finalize); - - // Emitted when an implementation is removed from the list of upgrade candidates. - event ImplementationRemoved(address indexed implementation, bytes initializer, bool finalize); - - // Emitted when the implementation is finalized. - event FinalizedImplementation(address indexed implementation); - - using Addresses for address; - - uint256 public constant MAX_UPGRADE_DELAY = 180 days; - - string public constant PROXY_VERSION = "3.0.2"; - - constructor(uint256 upgradeActivationDelay) public { - initGovernance(); - setUpgradeActivationDelay(upgradeActivationDelay); - } - - /* - Stores the upgrade activation delay (in seconds) in the appropriate slot. - this function does not validate the delay value, as it's checked in the getter. - */ - function setUpgradeActivationDelay(uint256 delayInSeconds) private { - bytes32 slot = UPGRADE_DELAY_SLOT; - assembly { - sstore(slot, delayInSeconds) - } - } - - /* - Reads the upgrade activation delay (in seconds) at the appropriate slot. - The returned value is capped at MAX_UPGRADE_DELAY. - It is safer to do the capping in the getter because an upgrade - flow might modify this value without going through the setter function. - */ - function getUpgradeActivationDelay() public view returns (uint256 delay) { - bytes32 slot = UPGRADE_DELAY_SLOT; - assembly { - delay := sload(slot) - } - - delay = (delay < MAX_UPGRADE_DELAY) ? delay : MAX_UPGRADE_DELAY; - return delay; - } - - /* - Returns the address of the current implementation. - */ - // NOLINTNEXTLINE external-function. - function implementation() public view returns (address _implementation) { - bytes32 slot = IMPLEMENTATION_SLOT; - assembly { - _implementation := sload(slot) - } - } - - /* - Returns true if the implementation is frozen. - If the implementation was not assigned yet, returns false. - */ - function implementationIsFrozen() private returns (bool) { - address _implementation = implementation(); - - // We can't call low level implementation before it's assigned. (i.e. ZERO). - if (_implementation == address(0x0)) { - return false; - } - - // NOLINTNEXTLINE: low-level-calls. - (bool success, bytes memory returndata) = _implementation.delegatecall( - abi.encodeWithSignature("isFrozen()") - ); - require(success, string(returndata)); - return abi.decode(returndata, (bool)); - } - - /* - This method blocks delegation to initialize(). - Only upgradeTo should be able to delegate call to initialize(). - */ - function initialize( - bytes calldata /*data*/ - ) external pure { - revert("CANNOT_CALL_INITIALIZE"); - } - - modifier notFinalized() { - require(isNotFinalized(), "IMPLEMENTATION_FINALIZED"); - _; - } - - /* - Forbids calling the function if the implementation is frozen. - This modifier relies on the lower level (logical contract) implementation of isFrozen(). - */ - modifier notFrozen() { - require(!implementationIsFrozen(), "STATE_IS_FROZEN"); - _; - } - - /* - This entry point serves only transactions with empty calldata. (i.e. pure value transfer tx). - We don't expect to receive such, thus block them. - */ - receive() external payable { - revert("CONTRACT_NOT_EXPECTED_TO_RECEIVE"); - } - - /* - Contract's default function. Delegates execution to the implementation contract. - It returns back to the external caller whatever the implementation delegated code returns. - */ - fallback() external payable { - address _implementation = implementation(); - require(_implementation != address(0x0), "MISSING_IMPLEMENTATION"); - - assembly { - // Copy msg.data. We take full control of memory in this inline assembly - // block because it will not return to Solidity code. We overwrite the - // Solidity scratch pad at memory position 0. - calldatacopy(0, 0, calldatasize()) - - // Call the implementation. - // out and outsize are 0 for now, as we don't know the out size yet. - let result := delegatecall(gas(), _implementation, 0, calldatasize(), 0, 0) - - // Copy the returned data. - returndatacopy(0, 0, returndatasize()) - - switch result - // delegatecall returns 0 on error. - case 0 { - revert(0, returndatasize()) - } - default { - return(0, returndatasize()) - } - } - } - - /* - Sets the implementation address of the proxy. - */ - function setImplementation(address newImplementation) private { - bytes32 slot = IMPLEMENTATION_SLOT; - assembly { - sstore(slot, newImplementation) - } - } - - /* - Returns true if the contract is not in the finalized state. - */ - function isNotFinalized() public view returns (bool notFinal) { - bytes32 slot = FINALIZED_STATE_SLOT; - uint256 slotValue; - assembly { - slotValue := sload(slot) - } - notFinal = (slotValue == 0); - } - - /* - Marks the current implementation as finalized. - */ - function setFinalizedFlag() private { - bytes32 slot = FINALIZED_STATE_SLOT; - assembly { - sstore(slot, 0x1) - } - } - - /* - Introduce an implementation and its initialization vector, - and start the time-lock before it can be upgraded to. - addImplementation is not blocked when frozen or finalized. - (upgradeTo API is blocked when finalized or frozen). - */ - function addImplementation( - address newImplementation, - bytes calldata data, - bool finalize - ) external onlyGovernance { - require(newImplementation.isContract(), "ADDRESS_NOT_CONTRACT"); - - bytes32 implVectorHash = keccak256(abi.encode(newImplementation, data, finalize)); - - uint256 activationTime = block.timestamp + getUpgradeActivationDelay(); - - enabledTime[implVectorHash] = activationTime; - emit ImplementationAdded(newImplementation, data, finalize); - } - - /* - Removes a candidate implementation. - Note that it is possible to remove the current implementation. Doing so doesn't affect the - current implementation, but rather revokes it as a future candidate. - */ - function removeImplementation( - address removedImplementation, - bytes calldata data, - bool finalize - ) external onlyGovernance { - bytes32 implVectorHash = keccak256(abi.encode(removedImplementation, data, finalize)); - - // If we have initializer, we set the hash of it. - uint256 activationTime = enabledTime[implVectorHash]; - require(activationTime > 0, "UNKNOWN_UPGRADE_INFORMATION"); - delete enabledTime[implVectorHash]; - emit ImplementationRemoved(removedImplementation, data, finalize); - } - - /* - Upgrades the proxy to a new implementation, with its initialization. - to upgrade successfully, implementation must have been added time-lock agreeably - before, and the init vector must be identical ot the one submitted before. - - Upon assignment of new implementation address, - its initialize will be called with the initializing vector (even if empty). - Therefore, the implementation MUST must have such a method. - - Note - Initialization data is committed to in advance, therefore it must remain valid - until the actual contract upgrade takes place. - - Care should be taken regarding initialization data and flow when planning the contract upgrade. - - When planning contract upgrade, special care is also needed with regard to governance - (See comments in Governance.sol). - */ - // NOLINTNEXTLINE: reentrancy-events timestamp. - function upgradeTo( - address newImplementation, - bytes calldata data, - bool finalize - ) external payable onlyGovernance notFinalized notFrozen { - bytes32 implVectorHash = keccak256(abi.encode(newImplementation, data, finalize)); - uint256 activationTime = enabledTime[implVectorHash]; - require(activationTime > 0, "UNKNOWN_UPGRADE_INFORMATION"); - require(newImplementation.isContract(), "ADDRESS_NOT_CONTRACT"); - - // On the first time an implementation is set - time-lock should not be enforced. - require( - activationTime <= block.timestamp || implementation() == address(0x0), - "UPGRADE_NOT_ENABLED_YET" - ); - - setImplementation(newImplementation); - - // NOLINTNEXTLINE: low-level-calls controlled-delegatecall. - (bool success, bytes memory returndata) = newImplementation.delegatecall( - abi.encodeWithSelector(this.initialize.selector, data) - ); - require(success, string(returndata)); - - // Verify that the new implementation is not frozen post initialization. - // NOLINTNEXTLINE: low-level-calls controlled-delegatecall. - (success, returndata) = newImplementation.delegatecall( - abi.encodeWithSignature("isFrozen()") - ); - require(success, "CALL_TO_ISFROZEN_REVERTED"); - require(!abi.decode(returndata, (bool)), "NEW_IMPLEMENTATION_FROZEN"); - - emit ImplementationUpgraded(newImplementation, data); - - if (finalize) { - setFinalizedFlag(); - emit FinalizedImplementation(newImplementation); - } - } -} \ No newline at end of file diff --git a/src/StarknetSovereign.sol b/src/StarknetSovereign.sol deleted file mode 100644 index 8ebfe7a..0000000 --- a/src/StarknetSovereign.sol +++ /dev/null @@ -1,227 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0. -pragma solidity ^0.6.12; -pragma experimental ABIEncoderV2; - -import "starknet-cc/Output.sol"; -import "starknet-cc/StarknetGovernance.sol"; -import "starknet-cc/StarknetMessaging.sol"; -import "starknet-cc/StarknetOperator.sol"; -import "starknet-cc/StarknetState.sol"; -import "starkware/solidity/components/GovernedFinalizable.sol"; -import "starkware/solidity/components/OnchainDataFactTreeEncoder.sol"; -import "starkware/solidity/interfaces/ContractInitializer.sol"; -import "starkware/solidity/interfaces/Identity.sol"; -import "starkware/solidity/interfaces/IFactRegistry.sol"; -import "starkware/solidity/interfaces/ProxySupport.sol"; -import "starkware/solidity/libraries/NamedStorage.sol"; - -contract Starknet is - Identity, - StarknetMessaging, - StarknetGovernance, - GovernedFinalizable, - StarknetOperator, - ContractInitializer, - ProxySupport -{ - using StarknetState for StarknetState.State; - - // Indicates a change of the Starknet config hash. - event ConfigHashChanged( - address indexed changedBy, - uint256 oldConfigHash, - uint256 newConfigHash - ); - - // Logs the new state following a state update. - event LogStateUpdate(uint256 globalRoot, int256 blockNumber, uint256 blockHash); - - // Logs a stateTransitionFact that was used to update the state. - event LogStateTransitionFact(bytes32 stateTransitionFact); - - // Indicates a change of the Starknet OS program hash. - event ProgramHashChanged( - address indexed changedBy, - uint256 oldProgramHash, - uint256 newProgramHash - ); - - // Random storage slot tags. - string internal constant PROGRAM_HASH_TAG = "STARKNET_1.0_INIT_PROGRAM_HASH_UINT"; - string internal constant VERIFIER_ADDRESS_TAG = "STARKNET_1.0_INIT_VERIFIER_ADDRESS"; - string internal constant STATE_STRUCT_TAG = "STARKNET_1.0_INIT_STARKNET_STATE_STRUCT"; - - // The hash of the StarkNet config. - string internal constant CONFIG_HASH_TAG = "STARKNET_1.0_STARKNET_CONFIG_HASH"; - - function setProgramHash(uint256 newProgramHash) external notFinalized onlyGovernance { - emit ProgramHashChanged(msg.sender, programHash(), newProgramHash); - programHash(newProgramHash); - } - - function setConfigHash(uint256 newConfigHash) external notFinalized onlyGovernance { - emit ConfigHashChanged(msg.sender, configHash(), newConfigHash); - configHash(newConfigHash); - } - - function setMessageCancellationDelay(uint256 delayInSeconds) - external - notFinalized - onlyGovernance - { - messageCancellationDelay(delayInSeconds); - } - - // State variable "programHash" read-access function. - function programHash() public view returns (uint256) { - return NamedStorage.getUintValue(PROGRAM_HASH_TAG); - } - - // State variable "programHash" write-access function. - function programHash(uint256 value) internal { - NamedStorage.setUintValue(PROGRAM_HASH_TAG, value); - } - - // State variable "verifier" access function. - function verifier() internal view returns (address) { - return NamedStorage.getAddressValue(VERIFIER_ADDRESS_TAG); - } - - // State variable "configHash" write-access function. - function configHash(uint256 value) internal { - NamedStorage.setUintValue(CONFIG_HASH_TAG, value); - } - - // State variable "configHash" read-access function. - function configHash() public view returns (uint256) { - return NamedStorage.getUintValue(CONFIG_HASH_TAG); - } - - function setVerifierAddress(address value) internal { - NamedStorage.setAddressValueOnce(VERIFIER_ADDRESS_TAG, value); - } - - // State variable "state" access function. - function state() internal pure returns (StarknetState.State storage stateStruct) { - bytes32 location = keccak256(abi.encodePacked(STATE_STRUCT_TAG)); - assembly { - stateStruct_slot := location - } - } - - function isInitialized() internal view override returns (bool) { - return programHash() != 0; - } - - function numOfSubContracts() internal pure override returns (uint256) { - return 0; - } - - function validateInitData(bytes calldata data) internal view override { - require(data.length == 6 * 32, "ILLEGAL_INIT_DATA_SIZE"); - uint256 programHash_ = abi.decode(data[:32], (uint256)); - require(programHash_ != 0, "BAD_INITIALIZATION"); - } - - function processSubContractAddresses(bytes calldata subContractAddresses) internal override {} - - function initializeContractState(bytes calldata data) internal override { - ( - uint256 programHash_, - address verifier_, - uint256 configHash_, - StarknetState.State memory initialState - ) = abi.decode(data, (uint256, address, uint256, StarknetState.State)); - - programHash(programHash_); - setVerifierAddress(verifier_); - state().copy(initialState); - configHash(configHash_); - messageCancellationDelay(5 days); - } - - /** - Returns a string that identifies the contract. - */ - function identify() external pure override returns (string memory) { - return "StarkWare_Starknet_2023_6"; - } - - /** - Returns the current state root. - */ - function stateRoot() external view returns (uint256) { - return state().globalRoot; - } - - /** - Returns the current block number. - */ - function stateBlockNumber() external view returns (int256) { - return state().blockNumber; - } - - /** - Returns the current block hash. - */ - function stateBlockHash() external view returns (uint256) { - return state().blockHash; - } - - /** - Updates the state of the StarkNet, based on a proof of the - StarkNet OS that the state transition is valid. - - Arguments: - programOutput - The main part of the StarkNet OS program output. - data_availability_fact - An encoding of the on-chain data associated - with the 'programOutput'. - */ - function updateState( - uint256[] calldata programOutput - ) external onlyOperator { - // We protect against re-entrancy attacks by reading the block number at the beginning - // and validating that we have the expected block number at the end. - int256 initialBlockNumber = state().blockNumber; - - // Validate program output. - StarknetOutput.validate(programOutput); - - // Validate config hash. - require( - configHash() == programOutput[StarknetOutput.CONFIG_HASH_OFFSET], - "INVALID_CONFIG_HASH" - ); - - state().update(programOutput); - - // Process the messages after updating the state. - // This is safer, as there is a call to transfer the fees during - // the processing of the L1 -> L2 messages. - - // Process L2 -> L1 messages. - uint256 outputOffset = StarknetOutput.HEADER_SIZE; - outputOffset += StarknetOutput.processMessages( - // isL2ToL1= - true, - programOutput[outputOffset:], - l2ToL1Messages() - ); - - // Process L1 -> L2 messages. - outputOffset += StarknetOutput.processMessages( - // isL2ToL1= - false, - programOutput[outputOffset:], - l1ToL2Messages() - ); - require(outputOffset == programOutput.length, "STARKNET_OUTPUT_TOO_LONG"); - // Note that processing L1 -> L2 messages does an external call, and it shouldn't be - // followed by storage changes. - - StarknetState.State storage state_ = state(); - emit LogStateUpdate(state_.globalRoot, state_.blockNumber, state_.blockHash); - // Re-entrancy protection (see above). - require(state_.blockNumber == initialBlockNumber + 1, "INVALID_FINAL_BLOCK_NUMBER"); - } -} diff --git a/src/StarknetState.sol b/src/StarknetState.sol new file mode 100644 index 0000000..2fedcc6 --- /dev/null +++ b/src/StarknetState.sol @@ -0,0 +1,97 @@ +/* + Copyright 2019-2024 StarkWare Industries Ltd. + + Licensed under the Apache License, Version 2.0 (the "License"). + You may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.starkware.co/open-source-license/ + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions + and limitations under the License. +*/ +// SPDX-License-Identifier: Apache-2.0. +pragma solidity ^0.8.0; + +import "./Output.sol"; + +library StarknetState { + struct State { + uint256 globalRoot; + int256 blockNumber; + uint256 blockHash; + } + + function copy(State storage state, State memory stateFrom) internal { + state.globalRoot = stateFrom.globalRoot; + state.blockNumber = stateFrom.blockNumber; + state.blockHash = stateFrom.blockHash; + } + + /** + Validates that the previous block number that appears in the proof is the current block + number. + + To protect against re-entrancy attacks, we read the block number at the beginning + and validate that we have the expected block number at the end. + This function must be called at the beginning of the updateState transaction. + */ + function checkPrevBlockNumber(State storage state, uint256[] calldata starknetOutput) internal { + uint256 expectedPrevBlockNumber; + if (state.blockNumber == -1) { + expectedPrevBlockNumber = 0x800000000000011000000000000000000000000000000000000000000000000; + } else { + expectedPrevBlockNumber = uint256(state.blockNumber); + } + require( + starknetOutput[StarknetOutput.PREV_BLOCK_NUMBER_OFFSET] == expectedPrevBlockNumber, + "INVALID_PREV_BLOCK_NUMBER" + ); + } + + /** + Validates that the current block number is the new block number. + This is used to protect against re-entrancy attacks. + */ + function checkNewBlockNumber(State storage state, uint256[] calldata starknetOutput) internal { + require( + uint256(state.blockNumber) == starknetOutput[StarknetOutput.NEW_BLOCK_NUMBER_OFFSET], + "REENTRANCY_FAILURE" + ); + } + + /** + Validates that the 'blockNumber' and the previous root are consistent with the + current state and updates the state. + */ + function update(State storage state, uint256[] calldata starknetOutput) internal { + checkPrevBlockNumber(state, starknetOutput); + + // Check the blockNumber first as the error is less ambiguous then INVALID_PREVIOUS_ROOT. + int256 newBlockNumber = int256(starknetOutput[StarknetOutput.NEW_BLOCK_NUMBER_OFFSET]); + require(newBlockNumber > state.blockNumber, "INVALID_NEW_BLOCK_NUMBER"); + state.blockNumber = newBlockNumber; + + require( + starknetOutput[StarknetOutput.PREV_BLOCK_HASH_OFFSET] == state.blockHash, + "INVALID_PREV_BLOCK_HASH" + ); + state.blockHash = starknetOutput[StarknetOutput.NEW_BLOCK_HASH_OFFSET]; + + uint256[] calldata commitment_tree_update = StarknetOutput.getMerkleUpdate(starknetOutput); + require( + state.globalRoot == CommitmentTreeUpdateOutput.getPrevRoot(commitment_tree_update), + "INVALID_PREVIOUS_ROOT" + ); + state.globalRoot = CommitmentTreeUpdateOutput.getNewRoot(commitment_tree_update); + } + + function updateOverride(State storage state, uint256 globalRoot, int256 blockNumber, uint256 blockHash) internal { + state.blockNumber = blockNumber; + state.globalRoot = globalRoot; + state.blockHash = blockHash; + } +} diff --git a/src/StarknetValidity.sol b/src/StarknetValidity.sol deleted file mode 100644 index c66ba03..0000000 --- a/src/StarknetValidity.sol +++ /dev/null @@ -1,366 +0,0 @@ -/* - Copyright 2019-2024 StarkWare Industries Ltd. - - Licensed under the Apache License, Version 2.0 (the "License"). - You may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.starkware.co/open-source-license/ - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions - and limitations under the License. -*/ -// SPDX-License-Identifier: Apache-2.0. -pragma solidity ^0.8.24; - -import "starknet-cc/Output.sol"; -import "starknet-cc/StarknetGovernance.sol"; -import "starknet-cc/StarknetMessaging.sol"; -import "starknet-cc/StarknetOperator.sol"; -import "starknet-cc/StarknetState.sol"; -import "starkware/solidity/components/GovernedFinalizable.sol"; -import "starkware/solidity/components/OnchainDataFactTreeEncoder.sol"; -import "starkware/solidity/interfaces/ContractInitializer.sol"; -import "starkware/solidity/interfaces/Identity.sol"; -import "starkware/solidity/interfaces/IFactRegistry.sol"; -import "starkware/solidity/interfaces/ProxySupport.sol"; -import "starkware/solidity/libraries/NamedStorage8.sol"; - -contract Starknet is -Identity, -StarknetMessaging, -StarknetGovernance, -GovernedFinalizable, -StarknetOperator, -ContractInitializer, -ProxySupport -{ - using StarknetState for StarknetState.State; - - // Indicates a change of the Starknet config hash. - event ConfigHashChanged( - address indexed changedBy, - uint256 oldConfigHash, - uint256 newConfigHash - ); - - // Logs the new state following a state update. - event LogStateUpdate(uint256 globalRoot, int256 blockNumber, uint256 blockHash); - - // Logs a stateTransitionFact that was used to update the state. - event LogStateTransitionFact(bytes32 stateTransitionFact); - - // Indicates a change of the Starknet OS program hash. - event ProgramHashChanged( - address indexed changedBy, - uint256 oldProgramHash, - uint256 newProgramHash - ); - - // Random storage slot tags. - string internal constant PROGRAM_HASH_TAG = "STARKNET_1.0_INIT_PROGRAM_HASH_UINT"; - string internal constant VERIFIER_ADDRESS_TAG = "STARKNET_1.0_INIT_VERIFIER_ADDRESS"; - string internal constant STATE_STRUCT_TAG = "STARKNET_1.0_INIT_STARKNET_STATE_STRUCT"; - - // The hash of the StarkNet config. - string internal constant CONFIG_HASH_TAG = "STARKNET_1.0_STARKNET_CONFIG_HASH"; - - // EIP-4844 constants. - address internal constant POINT_EVALUATION_PRECOMPILE_ADDRESS = address(0x0A); - // The precompile expected output: - // Web3.keccak(FIELD_ELEMENTS_PER_BLOB.to_bytes(32, "big") + BLS_PRIME.to_bytes(32, "big")). - bytes32 internal constant POINT_EVALUATION_PRECOMPILE_OUTPUT = - 0xb2157d3a40131b14c4c675335465dffde802f0ce5218ad012284d7f275d1b37c; - uint256 internal constant PROOF_BYTES_LENGTH = 48; - bytes1 internal constant VERSIONED_HASH_VERSION_KZG = bytes1(0x01); - - function setProgramHash(uint256 newProgramHash) external notFinalized onlyGovernance { - emit ProgramHashChanged(msg.sender, programHash(), newProgramHash); - programHash(newProgramHash); - } - - function setConfigHash(uint256 newConfigHash) external notFinalized onlyGovernance { - emit ConfigHashChanged(msg.sender, configHash(), newConfigHash); - configHash(newConfigHash); - } - - function setMessageCancellationDelay(uint256 delayInSeconds) - external - notFinalized - onlyGovernance - { - messageCancellationDelay(delayInSeconds); - } - - // State variable "programHash" read-access function. - function programHash() public view returns (uint256) { - return NamedStorage.getUintValue(PROGRAM_HASH_TAG); - } - - // State variable "programHash" write-access function. - function programHash(uint256 value) internal { - NamedStorage.setUintValue(PROGRAM_HASH_TAG, value); - } - - // State variable "verifier" access function. - function verifier() internal view returns (address) { - return NamedStorage.getAddressValue(VERIFIER_ADDRESS_TAG); - } - - // State variable "configHash" write-access function. - function configHash(uint256 value) internal { - NamedStorage.setUintValue(CONFIG_HASH_TAG, value); - } - - // State variable "configHash" read-access function. - function configHash() public view returns (uint256) { - return NamedStorage.getUintValue(CONFIG_HASH_TAG); - } - - function setVerifierAddress(address value) internal { - NamedStorage.setAddressValueOnce(VERIFIER_ADDRESS_TAG, value); - } - - // State variable "state" access function. - function state() internal pure returns (StarknetState.State storage stateStruct) { - bytes32 location = keccak256(abi.encodePacked(STATE_STRUCT_TAG)); - assembly { - stateStruct.slot := location - } - } - - function isInitialized() internal view override returns (bool) { - return programHash() != 0; - } - - function numOfSubContracts() internal pure override returns (uint256) { - return 0; - } - - function validateInitData(bytes calldata data) internal view override { - require(data.length == 6 * 32, "ILLEGAL_INIT_DATA_SIZE"); - uint256 programHash_ = abi.decode(data[:32], (uint256)); - require(programHash_ != 0, "BAD_INITIALIZATION"); - } - - function processSubContractAddresses(bytes calldata subContractAddresses) internal override {} - - function initializeContractState(bytes calldata data) internal override { - ( - uint256 programHash_, - address verifier_, - uint256 configHash_, - StarknetState.State memory initialState - ) = abi.decode(data, (uint256, address, uint256, StarknetState.State)); - - programHash(programHash_); - setVerifierAddress(verifier_); - state().copy(initialState); - configHash(configHash_); - messageCancellationDelay(5 days); - } - - /** - Verifies p(z) = y given z, y, a commitment to p in the kzgSegment, and a KZG proof. - The verification is done by calling Ethereum's point evaluation precompile. - */ - function verifyKzgProof(uint256[] calldata kzgSegment, bytes calldata kzgProof) internal { - require(kzgSegment.length == StarknetOutput.KZG_SEGMENT_SIZE, "INVALID_KZG_SEGMENT_SIZE"); - require(kzgProof.length == PROOF_BYTES_LENGTH, "INVALID_KZG_PROOF_SIZE"); - - bytes32 blobHash = blobhash( - // blobIndex= - 0 - ); - require(blobHash[0] == VERSIONED_HASH_VERSION_KZG, "UNEXPECTED_BLOB_HASH_VERSION"); - - bytes memory kzgCommitment; - bytes32 y; - { - uint256 kzgCommitmentLow = kzgSegment[0]; - uint256 kzgCommitmentHigh = kzgSegment[1]; - uint256 yLow = kzgSegment[3]; - uint256 yHigh = kzgSegment[4]; - - require(kzgCommitmentLow <= type(uint192).max, "INVALID_KZG_COMMITMENT"); - require(kzgCommitmentHigh <= type(uint192).max, "INVALID_KZG_COMMITMENT"); - require(yLow <= type(uint128).max, "INVALID_Y_VALUE"); - require(yHigh <= type(uint128).max, "INVALID_Y_VALUE"); - - kzgCommitment = abi.encodePacked(uint192(kzgCommitmentHigh), uint192(kzgCommitmentLow)); - y = bytes32((yHigh << 128) + yLow); - } - bytes32 z = bytes32(kzgSegment[2]); - - (bool ok, bytes memory precompile_output) = POINT_EVALUATION_PRECOMPILE_ADDRESS.staticcall( - abi.encodePacked(blobHash, z, y, kzgCommitment, kzgProof) - ); - - require(ok, "POINT_EVALUATION_PRECOMPILE_CALL_FAILED"); - require( - keccak256(precompile_output) == POINT_EVALUATION_PRECOMPILE_OUTPUT, - "UNEXPECTED_POINT_EVALUATION_PRECOMPILE_OUTPUT" - ); - } - - /** - Performs the actual state update of Starknet, based on a proof of the Starknet OS that the - state transition is valid. - - Arguments: - programOutput - The main part of the StarkNet OS program output. - stateTransitionFact - An encoding of the 'programOutput' (including on-chain data, if - available). - */ - function updateStateInternal(uint256[] calldata programOutput, bytes32 stateTransitionFact) - internal - { - // Validate config hash. - require( - programOutput[StarknetOutput.CONFIG_HASH_OFFSET] == configHash(), - "INVALID_CONFIG_HASH" - ); - - bytes32 sharpFact = keccak256(abi.encode(programHash(), stateTransitionFact)); - require(IFactRegistry(verifier()).isValid(sharpFact), "NO_STATE_TRANSITION_PROOF"); - emit LogStateTransitionFact(stateTransitionFact); - - // Perform state update. - state().update(programOutput); - - // Process the messages after updating the state. - // This is safer, as there is a call to transfer the fees during - // the processing of the L1 -> L2 messages. - - // Process L2 -> L1 messages. - uint256 outputOffset = StarknetOutput.messageSegmentOffset( - programOutput[StarknetOutput.USE_KZG_DA_OFFSET] - ); - outputOffset += StarknetOutput.processMessages( - // isL2ToL1= - true, - programOutput[outputOffset:], - l2ToL1Messages() - ); - - // Process L1 -> L2 messages. - outputOffset += StarknetOutput.processMessages( - // isL2ToL1= - false, - programOutput[outputOffset:], - l1ToL2Messages() - ); - require(outputOffset == programOutput.length, "STARKNET_OUTPUT_TOO_LONG"); - // Note that processing L1 -> L2 messages does an external call, and it shouldn't be - // followed by storage changes. - - StarknetState.State storage state_ = state(); - emit LogStateUpdate(state_.globalRoot, state_.blockNumber, state_.blockHash); - } - - /** - Returns a string that identifies the contract. - */ - function identify() external pure override returns (string memory) { - return "StarkWare_Starknet_2024_8"; - } - - /** - Returns the current state root. - */ - function stateRoot() external view returns (uint256) { - return state().globalRoot; - } - - /** - Returns the current block number. - */ - function stateBlockNumber() external view returns (int256) { - return state().blockNumber; - } - - /** - Returns the current block hash. - */ - function stateBlockHash() external view returns (uint256) { - return state().blockHash; - } - - /** - Updates the state of the Starknet, based on a proof of the Starknet OS that the state - transition is valid. Data availability is provided on-chain. - - Arguments: - programOutput - The main part of the StarkNet OS program output. - data_availability_fact - An encoding of the on-chain data associated - with the 'programOutput'. - */ - function updateState( - uint256[] calldata programOutput, - uint256 onchainDataHash, - uint256 onchainDataSize - ) external onlyOperator { - // We protect against re-entrancy attacks by reading the block number at the beginning - // and validating that we have the expected block number at the end. - int256 initialBlockNumber = state().blockNumber; - - // Validate program output. - require(programOutput.length > StarknetOutput.HEADER_SIZE, "STARKNET_OUTPUT_TOO_SHORT"); - - // Validate KZG DA flag. - require(programOutput[StarknetOutput.USE_KZG_DA_OFFSET] == 0, "UNEXPECTED_KZG_DA_FLAG"); - - bytes32 stateTransitionFact = OnchainDataFactTreeEncoder.encodeFactWithOnchainData( - programOutput, - OnchainDataFactTreeEncoder.DataAvailabilityFact(onchainDataHash, onchainDataSize) - ); - updateStateInternal(programOutput, stateTransitionFact); - // Note that updateStateInternal does an external call, and it shouldn't be followed by - // storage changes. - - // Re-entrancy protection (see above). - require(state().blockNumber == initialBlockNumber + 1, "INVALID_FINAL_BLOCK_NUMBER"); - } - - /** - Updates the state of the StarkNet, based on a proof of the StarkNet OS that the state - transition is valid. Data availability is committed with KZG and provided in a blob. - - Arguments: - programOutput - The main part of the StarkNet OS program output. - kzgProof - a KZG proof which is validated together with the StarkNet OS data commitment - given in 'programOutput'. - */ - function updateStateKzgDA(uint256[] calldata programOutput, bytes calldata kzgProof) - external - onlyOperator - { - // We protect against re-entrancy attacks by reading the block number at the beginning - // and validating that we have the expected block number at the end. - int256 initialBlockNumber = state().blockNumber; - - // Validate program output. - require( - programOutput.length > StarknetOutput.HEADER_SIZE + StarknetOutput.KZG_SEGMENT_SIZE, - "STARKNET_OUTPUT_TOO_SHORT" - ); - - // Verify the KZG Proof. - require(programOutput[StarknetOutput.USE_KZG_DA_OFFSET] == 1, "UNEXPECTED_KZG_DA_FLAG"); - verifyKzgProof( - programOutput[StarknetOutput.HEADER_SIZE:][:StarknetOutput.KZG_SEGMENT_SIZE], - kzgProof - ); - - bytes32 stateTransitionFact = OnchainDataFactTreeEncoder.hashMainPublicInput(programOutput); - updateStateInternal(programOutput, stateTransitionFact); - // Note that updateStateInternal does an external call, and it shouldn't be followed by - // storage changes. - - // Re-entrancy protection (see above). - require(state().blockNumber == initialBlockNumber + 1, "INVALID_FINAL_BLOCK_NUMBER"); - } -} diff --git a/test/StarkNetToken.t.sol b/test/StarkNetToken.t.sol deleted file mode 100644 index 6690b00..0000000 --- a/test/StarkNetToken.t.sol +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity 0.8.16; - -import "forge-std/Test.sol"; -import "starknet-token/solidity/StarkNetToken.sol"; - -uint256 constant SUPPLY = 18e8; -bytes32 constant MINTER_ROLE = keccak256("MINTER_ROLE"); - -contract StarkNetTokenTest is Test { - StarkNetToken token; - - address alice = vm.addr(0x1); - address bob = vm.addr(0x2); - address mary = vm.addr(0x3); - - function setUp() public { - vm.startPrank(alice); - token = new StarkNetToken(); - token.grantRole(MINTER_ROLE, alice); - vm.stopPrank(); - } - - function testMetadata() public { - assertEq(token.name(), "StarkNet Token"); - assertEq(token.symbol(), "STRK"); - assertEq(token.totalSupply(), 0); - assertEq(token.decimals(), 18); - } - - function testDefaultRoles() public { - bytes32 defRole = token.DEFAULT_ADMIN_ROLE(); - assertEq(defRole, 0); - assertTrue(token.hasRole(defRole, alice)); - assertFalse(token.hasRole(defRole, bob)); - } - - function testMintingRoles() public { - vm.prank(bob); - vm.expectRevert( - abi.encodePacked( - "AccessControl: account ", - Strings.toHexString(uint160(bob), 20), - " is missing role ", - Strings.toHexString(uint256(MINTER_ROLE), 32) - ) - ); - token.mint(bob, SUPPLY); - - vm.prank(alice); - token.grantRole(MINTER_ROLE, bob); - assertTrue(token.hasRole(MINTER_ROLE, bob)); - assertFalse(token.hasRole(MINTER_ROLE, mary)); - - vm.prank(bob); - token.mint(mary, SUPPLY); - assertEq(token.totalSupply(), SUPPLY); - assertEq(token.balanceOf(mary), SUPPLY); - } - - function testFuzzApprove(address to, uint256 amount) public { - vm.assume(to != address(0)); - vm.assume(amount < SUPPLY/2); - vm.startPrank(alice); - token.mint(alice, SUPPLY); - token.approve(to, amount); - vm.stopPrank(); - assertEq(token.allowance(alice, to), amount); - } -} diff --git a/test/StarknetValidium.t.sol b/test/StarknetValidium.t.sol deleted file mode 100644 index 07dc006..0000000 --- a/test/StarknetValidium.t.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.6.12; -pragma experimental ABIEncoderV2; - -import "forge-std/Test.sol"; -import "src/StarknetSovereign.sol"; - -contract StarknetTest is Test { - Starknet sn; - address governor; - - function setUp() public { - governor = vm.addr(0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80); - vm.prank(governor); - sn = new Starknet(); - - // proxy = new Proxy(0); - // proxy.addImplementation(address(sn), "0x", false); - // proxy.upgradeTo(address(sn), "0x", false); - } - - function testDefaults() public { - assertEq(sn.stateRoot(), 0); - } - - function testIsOperator() public { - uint256 conf = sn.configHash(); - int256 snBlock = sn.stateBlockNumber(); - - uint256[] memory arr = new uint256[](9); - arr[0] = 21; - arr[1] = 1; - arr[2] = uint256(snBlock + 1); - arr[3] = conf; // must be 0 to match the HEADER offset conf - arr[4] = 100; - arr[5] = 200; - arr[6] = 1; - arr[7] = 1351148242645005540004162531550805076995747746087542030095186557536641755046; - arr[8] = 558404273560404778508455254030458021013656352466216690688595011803280448032; - sn.updateState(arr); - } -}