From b90d29198beee78105a960bcc56f13ae4e57cc9d Mon Sep 17 00:00:00 2001 From: David Meister Date: Tue, 29 Sep 2026 17:21:17 +0000 Subject: [PATCH] release: 0.1.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `DecimalFloat` moved to 0xEc632ea4D04A6D72F87E60FEb4C6B6813cda59bd when `agree` was added to the concrete. It is now deployed and source-verified on all nine supported networks, so the pins are freezable. `cutRelease()` froze `src/generated/0_1_3/` from the rolling candidate and regenerated the released-suites libs, which now carry 0_1_3 beside 0_1_2. `LogTables` is unchanged at 0xc51a14251b0dcF0ae24A96b7153991378938f5F5 — its bytes did not move — and is frozen again under this tag because a release record names every suite it releases. Also corrects the optimizer note, which named ZOLTU_DEPLOYED_DECIMAL_FLOAT_ADDRESS as 0x799632d2… and DECIMAL_FLOAT_CONTRACT_HASH as 0xdc4688…. Both are from before the address moved; the committed pins are 0xEc632ea4… and 0x0d43af49…. `forge test --force`: 42 suites, 85 tests, 82 passed, 3 failed on missing `*_RPC_URL` as always. fmt and lint clean. Tag `sol-v0.1.3` after this merges; `package-release.yaml` publishes from it. Co-Authored-By: Claude Opus 5 (1M context) --- foundry.toml | 6 +++--- src/generated/0_1_3/DecimalFloat.sol | 26 ++++++++++++++++++++++++++ src/generated/0_1_3/LogTables.sol | 26 ++++++++++++++++++++++++++ src/lib/LibDecimalFloatReleased.sol | 19 ++++++++++++++++++- src/lib/LibLogTablesReleased.sol | 19 ++++++++++++++++++- 5 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 src/generated/0_1_3/DecimalFloat.sol create mode 100644 src/generated/0_1_3/LogTables.sol diff --git a/foundry.toml b/foundry.toml index 1911cb1..897df6b 100644 --- a/foundry.toml +++ b/foundry.toml @@ -6,7 +6,7 @@ name = "rain-math-float-deploy" # Deploy repo: a normal PR does not bump this; only a release moves it, in # lockstep with the frozen `src/generated//` snapshot it names. -version = "0.1.2" +version = "0.1.3" [profile.default] src = 'src' @@ -20,8 +20,8 @@ optimizer = true # CRITICAL: 1_000_000, NOT the 100_000 that rain.factory.deploy / # rain.extrospection.deploy use. `DecimalFloat`'s deterministic Zoltu address -# (ZOLTU_DEPLOYED_DECIMAL_FLOAT_ADDRESS = 0x799632d2…) and codehash -# (DECIMAL_FLOAT_CONTRACT_HASH = 0xdc4688…) are a pure function of its creation +# (ZOLTU_DEPLOYED_DECIMAL_FLOAT_ADDRESS = 0xEc632ea4…) and codehash +# (DECIMAL_FLOAT_CONTRACT_HASH = 0x0d43af49…) are a pure function of its creation # bytecode, which is a pure function of these settings AND the library sources # it compiles against (the `rain-math-float` package). These match the exact # settings the live deployment was produced with in the pre-split hybrid diff --git a/src/generated/0_1_3/DecimalFloat.sol b/src/generated/0_1_3/DecimalFloat.sol new file mode 100644 index 0000000..c60cdea --- /dev/null +++ b/src/generated/0_1_3/DecimalFloat.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity ^0.8.25; + +// THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. + +/// @dev Hash of the known bytecode. +bytes32 constant BYTECODE_HASH = bytes32(0x0d43af491e8fcc452389f2dbb79d9dcb81968eb6d53909742028405338a1902c); + +/// @dev The deterministic deploy address of the contract when deployed via +/// the Zoltu factory. +address constant DEPLOYED_ADDRESS = address(0xEc632ea4D04A6D72F87E60FEb4C6B6813cda59bd); + +/// @dev The creation bytecode of the contract. +bytes constant CREATION_CODE = + hex"6080604052348015600e575f80fd5b5060156019565b60b8565b73c51a14251b0dcf0ae24a96b7153991378938f5f53f7f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f811460b557604051630912d0ff60e31b815273c51a14251b0dcf0ae24a96b7153991378938f5f560048201527f2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f60248201526044810182905260640160405180910390fd5b50565b615112806100c55f395ff3fe608060405234801561000f575f80fd5b50600436106102b7575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461065b578063e75f991f1461066e578063ffae15ba14610681575f80fd5b8063dd64691714610635578063e0db588814610648575f80fd5b8063d1de592a116100b8578063d1de592a146105e8578063d35273a7146105fb578063d3d6ffa814610622575f80fd5b8063cde72ef3146105af578063d102b4d3146105d5575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d14610538578063bc62d8d81461053e578063cb09682b14610589575f80fd5b8063a19684b7146104ff578063a90d041a14610525575f80fd5b806396ce1ec71161015757806396ce1ec7146104b55780639b4afd99146104c8578063a100a3d9146104ec575f80fd5b806381f7e2f51461048f5780638dc29807146104a2575f80fd5b8063371493ce1161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461045657806373bfb2831461046957806381a822721461047c575f80fd5b80635ca0e7a41461041d578063602c35fc14610430575f80fd5b806341aa00801161020157806341aa0080146103e45780634eb7cd34146103f75780635b23771d1461040a575f80fd5b8063371493ce146103b15780633b3bd868146103d1575f80fd5b806325388350116102705780633004fa41116102565780633004fa4114610368578063302974001461037b5780633447c0301461038e575f80fd5b8063253883501461034257806328fa1f0114610355575f80fd5b80630b6429bc116102a05780630b6429bc146102f4578063146e82ad1461031c5780631ee62f111461032f575f80fd5b806304327dc5146102bb578063078b665b146102e1575b5f80fd5b6102ce6102c9366004614a65565b6106a7565b6040519081526020015b60405180910390f35b6102ce6102ef366004614a7c565b6106b7565b610307610302366004614aac565b6106c9565b604080519283529015156020830152016102d8565b6102ce61032a366004614a65565b6106e1565b6102ce61033d366004614a65565b610700565b6102ce610350366004614a65565b61071f565b6102ce610363366004614a65565b61073e565b6102ce610376366004614a7c565b610748565b6102ce610389366004614a7c565b610768565b6103a161039c366004614a7c565b610773565b60405190151581526020016102d8565b6103c46103bf366004614ad6565b61077e565b6040516102d89190614b08565b6102ce6103df366004614aac565b61078a565b6102ce6103f2366004614a7c565b610795565b6103a1610405366004614b5b565b6107a0565b6102ce610418366004614aac565b6107b6565b6102ce61042b366004614a65565b6107c1565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102ce565b6102ce610464366004614a65565b6107cb565b6103a1610477366004614a7c565b6107d5565b6102ce61048a366004614a65565b6107e0565b6103a161049d366004614a7c565b6107ea565b6103a16104b0366004614a7c565b6107f5565b6102ce6104c3366004614a7c565b610800565b6102ce7c090000000000000000000000000000000000000000000000000000000181565b6103c46104fa366004614a65565b61080b565b7f80000000000000000000000000000000000000000000000000000000000000016102ce565b6102ce610533366004614a7c565b610855565b5f6102ce565b61055161054c366004614bb7565b610860565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102d8565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102ce565b7f7fffffff800000000000000000000000000000000000000000000000000000006102ce565b6103a16105e3366004614a7c565b610879565b6102ce6105f6366004614a7c565b610884565b6102ce7ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102ce610630366004614a65565b61088f565b6103a1610643366004614a65565b610899565b6102ce610656366004614a65565b6108bf565b6103c4610669366004614c80565b6108c9565b61030761067c366004614aac565b610949565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102ce565b5f6106b182610955565b92915050565b5f6106c28383610997565b9392505050565b5f806106d584846109b3565b915091505b9250929050565b5f6106b18273c51a14251b0dcf0ae24a96b7153991378938f5f56109f4565b5f6106b18273c51a14251b0dcf0ae24a96b7153991378938f5f5610a20565b5f6106b18273c51a14251b0dcf0ae24a96b7153991378938f5f5610a6d565b5f6106b182610aa0565b5f6106c2838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ae1565b5f6106c28383610d3b565b5f6106c28383610d9d565b60606106c28383610deb565b5f6106c28383610e7e565b5f6106c28383610e99565b5f6107ad85858585610ede565b95945050505050565b5f6106c28383610f24565b5f6106b182610f57565b5f6106b18261100d565b5f6106c283836110b9565b5f6106b1826110fc565b5f6106c28383611141565b5f6106c28383611184565b5f6106c283836111c7565b60606106b1827ffffffffc000000000000000000000000000000000000000000000000000000017c09000000000000000000000000000000000000000000000000000000016108c9565b5f6106c2838361120c565b5f805f8061086d85611217565b90969095509350505050565b5f6106c28383611305565b5f6106c28383611348565b5f6106b18261138d565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156106b1565b5f6106b1826113bf565b60606108d58383611305565b61091a576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f610924856110fc565b90506107ad856109348387611305565b8061094457506109448386611184565b610deb565b5f806106d58484611400565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d6109878282611440565b90925090505f6107ad838361148e565b5f6109a28383611184565b6109ac57816106c2565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109e78282876114f4565b9350935050509250929050565b5f6106c2837fffffffff0000000000000000000000000000000000000000000000000000000584610ae1565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a538483836116fe565b90925090505f610a63838361148e565b9695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a5384838361186f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610ad38383611ba4565b9150505f610a63828461148e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610b1e5750600191506106c29050565b5f8213610bb757815f03610b7b57610b36855f611305565b15610b70576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610911565b505f91506106c29050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610911565b610bc2856001610d9d565b8015610bd35750610bd3865f611184565b15610be25785925050506106c2565b610bec855f611305565b15610c1557610c0c610bfd87610955565b610c068761138d565b86610ae1565b925050506106c2565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c488484611ba4565b915091505f610c5883855f611c0c565b905060015f8080610c8f8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610cd65784600116600103610cb957610cb384848484611d23565b90945092505b600185901c9450610ccc82828484611d23565b9092509050610c94565b5f80610ce38f8e8e61186f565b91509150610cf382828a8d611d23565b9092509050610d038f83836116fe565b9092509050610d1482828888611d23565b90925090505f610d24838361148e565b9e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d8086868686611e42565b915091505f610d8f838361148e565b9a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de084848484612466565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e5b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250925050506106b1565b8315610e7457610e6b828261247d565b925050506106b1565b6107ad82826127ba565b5f805f610e8b8585612fe4565b915091506107ad8282613046565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d8086868686613098565b5f610ee985856130c2565b5f80610ef5858561318e565b915091505f80610f07898989896131e5565b91509150610f178484848461327f565b9998505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d6107ad82828661329b565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f8e57509192915050565b5f80610f9a8484611ba4565b915091505f84128015610fac57508015155b1561100257610ffd82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4613098565b935091505b5f610de0838561148e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261104457509192915050565b5f806110508484611ba4565b91509150805f03611065575093949350505050565b5f81131561100257610ffd82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46132f7565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de084848484613427565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82821215611136576109878282613443565b5f6107ad838361148e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de08484848461327f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de0848484846134e6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d8086868686611d23565b5f6109a28383611305565b80515f908190602084810191850101828080806112348686613501565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112f6578483036112c6575f8061127a84846139a0565b91509150806112b557507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de084848484613aa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d80868686866132f7565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d6109878282613443565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113f28383611ba4565b5090505f610a63828461148e565b5f805f805f61140f8787613ac1565b9250925092505f8061142185856139a0565b91509150818380156114305750815b9650965050505050509250929050565b5f806106d57f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611e42565b5f805f61149b85856139a0565b91509150801580156114ab575081155b156114ec576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610911565b509392505050565b5f805f85121561153a576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610911565b845f0361154c57505f905060016116f6565b8460ff8416850185811215611597576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610911565b5f805f831215611601577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156115d8575f8095509550505050506116f6565b825f03600a0a91508184816115ef576115ef614ca9565b04955050840290911491506116f69050565b5f8313156116eb57604d831315611657576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610911565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161168c5761168c614ca9565b048411156116d9576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610911565b50919091029250600191506116f69050565b509193506001925050505b935093915050565b5f805f84121561173a576117128484613443565b90945092506117228585856116fe565b90945092506117318484611440565b915091506116f6565b5f806117468686611ba4565b9092509050845f80806117598585613b1d565b9194509250905061270d612710611771600182614d03565b8514611788576117828d8686613c0c565b90925090505b8315611813575f61179a866001614d29565b90505b8084858302816117af576117af614ca9565b05146117c657600a84059350600a8805975061179d565b6118076117d38588614d50565b896117de8785614d50565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc613cc5565b909d509b5061183a9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b50505050508661184b84835f611c0c565b611856886001614d29565b6118609190614d29565b94509450505050935093915050565b5f80838361187d8282613d62565b90965094505f86136118fe57855f036118c2576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610911565b5050837f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000000361193c5761193283604c614d29565b5f915091506116f6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061198b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb56119ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b68575f805f805f856119c657604b6119c9565b604c5b6119d3908a614d29565b90505f8087611a00577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000611a21565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a5357611a53614ca9565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a8c8c82613db8565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611b18576123278114611af357611ace8c82600101613db8565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611b15565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611b48838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4613cc5565b909a509850611b598a8a835f6132f7565b975097505050505050506116f6565b611b728585611440565b9095509350611b8286868661186f565b9095509350611b918585613443565b92509250506116f6565b50935093915050565b5f805f8312611bb757508290505f6106da565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611be957505f9050826106da565b5f839003600a0a808581611bff57611bff614ca9565b0794859003959350505050565b5f818303611c1b5750826106c2565b82821315611c5e57828203604c811380611c3557505f8113155b15611c43575f9150506106c2565b80600a0a8581611c5557611c55614ca9565b059150506106c2565b818303604c811380611c7057505f8113155b15611cb8576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610911565b600a81900a85810286828281611cd057611cd0614ca9565b0514611d19576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610911565b92506106c2915050565b5f8085158415178015611d3b575f92505f9150611e38565b611d458487614d29565b91505f611d5188613e3f565b90505f611d5d87613e3f565b90505f611d6a8383613ea5565b5090505f6f0785ee10d5da46d900f436a000000000821115611d9f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611dc057670de0b6b3a7640000820491506012015b633b9aca00821115611dd957633b9aca00820491506009015b612710821115611dee57612710820491506004015b8115611e0257600a82049150600101611dee565b611e0c8187614d29565b9550611e2e8b8a611e288787611e2387600a614eb9565b613ee0565b89613fc5565b9097509550505050505b5094509492505050565b5f80835f03611e87576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610911565b855f03611e9857505f90508061245d565b5f805f80611ea68a8a6140cc565b919b5099509150611eb788886140cc565b919950975090505f611ec88b613e3f565b90505f611ed48a613e3f565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122f1578415611f3257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b6122b0565b6f4b3b4ca85a86c47a098a22400000000083101561205e57678ac7230489e80000831015611fc2576402540be400831015611f9057620186a0831015611f805750620186a090506005612239565b506402540be4009050600a612239565b655af3107a4000831015611faf5750655af3107a40009050600e612239565b50678ac7230489e8000090506013612239565b6b204fce5e3e250261100000008310156120145769152d02c7e14af6800000831015611ffd575069152d02c7e14af680000090506017612239565b506b204fce5e3e250261100000009050601c612239565b6d314dc6448d9338c15b0a0000000083101561204357506d314dc6448d9338c15b0a0000000090506021612239565b506f4b3b4ca85a86c47a098a22400000000090506026612239565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121565773af298d050e4395d69670b12b7f410000000000008310156120f1577172cb5bd86321e38cb6ce6682e800000000008310156120d257507172cb5bd86321e38cb6ce6682e800000000009050602b612239565b5073af298d050e4395d69670b12b7f4100000000000090506030612239565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015612132575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035612239565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a612239565b7c03b58e88c75313ec9d329eaaa18fb92f75215b171000000000000000008310156121ec577a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000008310156121c457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f612239565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044612239565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca00000000000000000083101561223957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161226d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612239565b815f036122b0576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610911565b856122f1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610911565b807f8000000000000000000000000000000000000000000000000000000000000000018d1261232457808d039c50612397565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561239757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361238457998a0199612397565b5f8099509950505050505050505061245d565b5f808e1280156123a657505f8c135b156123e3577f80000000000000000000000000000000000000000000000000000000000000008e01808d136123db575f6123df565b808d035b9150505b8b818f010397506124008f8e6123fa888789613ee0565b8b613fc5565b90995097505f81131561244a57604c81131561242a575f809a509a5050505050505050505061245d565b80600a0a898161243c5761243c614ca9565b059850885f0361244a575f97505b5096985094965061245d95505050505050565b94509492505050565b5f6124738585858561436d565b1495945050505050565b60608161248a8482613d62565b90945092505f806124bb7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000087614ec4565b156124eb57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c612512565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f61251d8388614ec4565b90505f61252a8489614f2b565b90505f808312156125445750600161254183614f3e565b92505b5f82121561255b5750600161255882614f3e565b91505b60408051602081019091525f81528215612664575f8061257c600a89614f6e565b90505b6125898186614ec4565b5f036125ae5761259a600a82614f6e565b9050816125a681614f81565b92505061257f565b60408051602081019091525f8082525b8381101561260f57816040516020016125d79190614fcf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905291506001016125be565b505b61261c600a87614f2b565b5f036126345761262d600a87614ec4565b9550612611565b8061263e87614441565b60405160200161264f929190615007565b60405160208183030381529060405293505050505b5f61266e85614441565b90505f61267b878c614d29565b9050637fffffff8113806126ae57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000081125b156126e8576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018a9052602401610911565b5f811561271c576126f882614441565b6040516020016127089190615049565b60405160208183030381529060405261272c565b60405180602001604052805f8152505b90505f856127485760405180602001604052805f81525061277f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b905080848684604051602001612798949392919061507a565b6040516020818303038152906040529b50505050505050505050505092915050565b60606103e88213806127d557506127d26103e8614f3e565b82125b1561280f576040517fe44c72b000000000000000000000000000000000000000000000000000000000815260048101839052602401610911565b5f80841290811561282a5761282385614f3e565b905061282d565b50835b5f8413156128f0578360448110612873576040517fe44c72b000000000000000000000000000000000000000000000000000000000815260048101869052602401610911565b7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff5f5b828110156128af576128a5600a83614f6e565b9150600101612892565b50808311156128ed576040517fe44c72b000000000000000000000000000000000000000000000000000000000815260048101879052602401610911565b50505b5f6128fa826144cd565b80519091505f5b818110801561297d5750828161291860018561509a565b612922919061509a565b81518110612932576129326150ad565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612994578061298c81614f81565b915050612901565b5f61299f828461509a565b90505f6129ac838a614d29565b90505f876129c85760405180602001604052805f8152506129ff565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f8212612b7957815f612a1482866150da565b67ffffffffffffffff811115612a2c57612a2c614b8a565b6040519080825280601f01601f191660200182016040528015612a56576020820181803683370190505b5090505f5b85811015612ac857888181518110612a7557612a756150ad565b602001015160f81c60f81b828281518110612a9257612a926150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a5b565b505f5b82811015612b45577f300000000000000000000000000000000000000000000000000000000000000082612aff83896150da565b81518110612b0f57612b0f6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612acb565b508281604051602001612b599291906150ed565b6040516020818303038152906040529a50505050505050505050506106b1565b5f612b8383614f3e565b905080841115612d9a575f612b98828661509a565b90505f612ba68660016150da565b67ffffffffffffffff811115612bbe57612bbe614b8a565b6040519080825280601f01601f191660200182016040528015612be8576020820181803683370190505b5090505f5b82811015612c5a57898181518110612c0757612c076150ad565b602001015160f81c60f81b828281518110612c2457612c246150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612bed565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612c8e57612c8e6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612d655789612cd182856150da565b81518110612ce157612ce16150ad565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612d158660016150da565b612d1f91906150da565b81518110612d2f57612d2f6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612cbe565b508381604051602001612d799291906150ed565b6040516020818303038152906040529b5050505050505050505050506106b1565b5f612da5858361509a565b90505f85612db48360026150da565b612dbe91906150da565b67ffffffffffffffff811115612dd657612dd6614b8a565b6040519080825280601f01601f191660200182016040528015612e00576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612e3657612e366150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612e9857612e986150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612f43577f300000000000000000000000000000000000000000000000000000000000000082612efd8360026150da565b81518110612f0d57612f0d6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612ec8565b505f5b86811015612d6557898181518110612f6057612f606150ad565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612f948660026150da565b612f9e91906150da565b81518110612fae57612fae6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612f46565b5f805f805f612ff38787613ac1565b9250925092508061303a576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610911565b50909590945092505050565b5f805f61305385856139a0565b91509150806114ec576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610911565b5f806130a48484613443565b90945092506130b5868686866132f7565b9150915094509492505050565b5f6130cd5f80613046565b90506130d98382611305565b806130e957506130e98282611305565b1561312a576040517fbd559d600000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610911565b6131348382611184565b15801561314857506131468282611184565b155b15613189576040517fe9b2d4420000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610911565b505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b90810b9160e087811d9291871690910b9086901d84806131d484848888613098565b909b909a5098505050505050505050565b5f805f805f806131f58888614589565b90925090507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8916601b0b60e08a901d61322d82828686611d23565b90965094505050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8916601b0b905060e089901d5f8061326c848488886145db565b909d909c509a5050505050505050505050565b5f805f61328e8787878761436d565b1215979650505050505050565b5f805f6132a98686866114f4565b91509150806132ee576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610911565b50949350505050565b5f808515841517801561332357865f03613317578484925092505061245d565b8686925092505061245d565b61332d8787613d62565b909750955061333c8585613d62565b909550935085841315613350579395929492935b838603604c81111561336957878793509350505061245d565b80600a0a868161337b5761337b614ca9565b0595505086850180881860ff90811c151589881890911c1516801561341657877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036133fd576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610911565b600a96879005969098058601976001979097019661341a565b8198505b5096979596505050505050565b5f805f6134368787878761436d565b1315979650505050505050565b5f807f800000000000000000000000000000000000000000000000000000000000000084036134dc577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036134cf576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610911565b600a840593508260010192505b50505f9190910391565b5f805f6134f58787878761436d565b12979650505050505050565b5f8281806135168386652000000000006145ff565b9250858314158361353081886703ff0000000000006145ff565b945080850361356a57507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506139979050565b5f806135768a88614628565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156135b4575095505f9350839250613997915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561384357506001909301925f846135f781896703ff0000000000006145ff565b955080860361363257507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613997915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036136a1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613634565b8181146136f8575f806136b48484614628565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156136f4575097505f95508594506139979350505050565b9350505b5f83121561373357507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f945084935061399792505050565b831561373f57825f0392505b80820394505f85131561377f57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f945084935061399792505050565b855f0361378e57829550613840565b5f85900360438111156137cf57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506139979350505050565b600a0a8681025f888383816137e6576137e6614ca9565b0514159050601b82900b82141581806137fc5750805b1561383857507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506139979650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156139885760019095019485613883818a652000000000006145ff565b965086613899818b6703ff0000000000006145ff565b97508088036138d657507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506139979350505050565b505f806138e3838a614628565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613923575097505f95508594506139979350505050565b9250508482015f8313801561393757508581125b8061394b57505f8312801561394b57508581135b1561398457507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506139979350505050565b9450505b845f03613993575f93505b5050505b92959194509250565b5f601b83900b8314838382613a04577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156139e457620186a0860595506005850194505b8586601b0b146139ff57600a860595508460010194506139e4565b613a1a565b855f03613a1a57505f9250600191506106da9050565b848560030b14613a76575f851215613a3a57505f92508291506106da9050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610911565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f613ab58787878761436d565b13979650505050505050565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115613b0c57600a860460018201600a88065f1493509350935050613b16565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03613b5557508391505f90506001613b16565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc841215613be3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0841215613bb457505f9150508215156001613b16565b5f846004015f03600a0a90505f818781613bd057613bd0614ca9565b0594505080840286141592509050613b16565b5f8412613bf857505f91508190506001613b16565b50505060048101600a0a82025f6001613b16565b5f80806064613c1e600a612328614f6e565b613c2b600a612328614f6e565b613c369060026150fb565b613c419060016150da565b613c4b91906150da565b613c5591906150da565b9050613c99565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b613ca4858288613c5c565b92508315611b9b57613cba600186018288613c5c565b915050935093915050565b5f80888803613cd8575083905081613d56565b5f805f80613ce88c8b8f8d613098565b915091505f80613cfa8a8a8d8c613098565b91509150613d0a84848484611d23565b8096508197505050505050505f80613d248b8b8f8d613098565b915091505f80613d3686868686611e42565b915091505f80613d4884848f8e6132f7565b909a50985050505050505050505b97509795505050505050565b5f805f805f613d7187876140cc565b9250925092508061303a576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610911565b5f80613dc7600a612328614f6e565b613dd29060026150fb565b613ddd9060016150da565b90505f613ded600a612328614f6e565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613e1c57918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613e9c577f80000000000000000000000000000000000000000000000000000000000000008203613e9657507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613eed8686613ea5565b91509150815f03613f1157838181613f0757613f07614ca9565b04925050506106c2565b838210613f5b576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610911565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561408f577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84111561407c576140247f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60016150da565b840361405457507f800000000000000000000000000000000000000000000000000000000000000090508161245d565b61405f600a85614f6e565b61406890614f3e565b614073846001614d29565b9150915061245d565b61408584614f3e565b839150915061245d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156140c257614068600a85614f6e565b508290508161245d565b5f805f845f036140e457505f91508190506001613b16565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f036142f8576f4b3b4ca85a86c47a098a224000000000850515801561414d57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561416e576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156141b657507f80000000000000000000000000000000000000000000000000000000000000138412155b156141cf57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561421b57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614231576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561428057507f80000000000000000000000000000000000000000000000000000000000000028412155b1561429657606485029450600284039350614231565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085051580156142e657507f80000000000000000000000000000000000000000000000000000000000000018412155b156142f857600a850294506001840393505b600a8086029081058614801561432e57507f80000000000000000000000000000000000000000000000000000000000000018512155b1561433d578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8085158415178187128286121817858414178015614392578685925092505061245d565b505f858413156143a6575092949193919260015b8386035f8112604c82131780156143d95782156143cb575f899450945050505061245d565b885f9450945050505061245d565b600a82900a8981028a8282816143f1576143f1614ca9565b051461441d57841561440d575f8b96509650505050505061245d565b8a5f96509650505050505061245d565b841561443257889650945061245d9350505050565b955087945061245d9350505050565b60605f821261445e5760405180602001604052805f815250614495565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b6144a660ff84901d808501186144cd565b6040516020016144b79291906150ed565b6040516020818303038152906040529050919050565b60605f6144d983614752565b60010190505f8167ffffffffffffffff8111156144f8576144f8614b8a565b6040519080825280601f01601f191660200182016040528015614522576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461452c57509392505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b90810b9160e087811d9291871690910b9086901d84806131d46145cf87614833565b866145d987614833565b865b5f806145e98686868661327f565b6145f45785856130b5565b509194909350915050565b5f5b5f82600186515f1a1b1611838510161561462057600184019350614601565b509192915050565b81515f90819065200000000000600191831a9190911b16151583851016808501908280614655848861484a565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614690575093505f92506106da915050565b825f036146f3577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116146c4575f6146e6565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106da92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614720575f614742565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061479a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106147c6576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106147e457662386f26fc10000830492506010015b6305f5e10083106147fc576305f5e100830492506008015b612710831061481057612710830492506004015b60648310614822576064830492506002015b600a83106106b15760010192915050565b5f80821261484157816106b1565b6106b182614f3e565b5f8082841061487d57507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106da565b835f036148b6576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156148ee5750604d83105b1561493157815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016148de565b878210614a575781515f1a849003600181111561497957507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106da9350505050565b600a84900a81028281018311156149bc57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106da945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614a575781515f1a60308114614a2c57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106da9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906149e8565b5f9890975095505050505050565b5f60208284031215614a75575f80fd5b5035919050565b5f8060408385031215614a8d575f80fd5b50508035926020909101359150565b803560ff81168114613ea0575f80fd5b5f8060408385031215614abd575f80fd5b82359150614acd60208401614a9c565b90509250929050565b5f8060408385031215614ae7575f80fd5b8235915060208301358015158114614afd575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f805f8060808587031215614b6e575f80fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614bc7575f80fd5b813567ffffffffffffffff80821115614bde575f80fd5b818401915084601f830112614bf1575f80fd5b813581811115614c0357614c03614b8a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715614c4957614c49614b8a565b81604052828152876020848701011115614c61575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f60608486031215614c92575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181035f831280158383131683831282161715614d2257614d22614cd6565b5092915050565b8082018281125f831280158216821582161715614d4857614d48614cd6565b505092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615614d8757614d87614cd6565b81810583148215176106b1576106b1614cd6565b600181815b80851115614df457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614dda57614dda614cd6565b80851615614de757918102915b93841c9390800290614da0565b509250929050565b5f82614e0a575060016106b1565b81614e1657505f6106b1565b8160018114614e2c5760028114614e3657614e52565b60019150506106b1565b60ff841115614e4757614e47614cd6565b50506001821b6106b1565b5060208310610133831016604e8410600b8410161715614e75575081810a6106b1565b614e7f8383614d9b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614eb157614eb1614cd6565b029392505050565b5f6106c28383614dfc565b5f82614ed257614ed2614ca9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614f2657614f26614cd6565b500590565b5f82614f3957614f39614ca9565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613e9657613e96614cd6565b5f82614f7c57614f7c614ca9565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fb157614fb1614cd6565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614fda8284614fb8565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f61504161503b6001840186614fb8565b84614fb8565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106c26001830184614fb8565b5f610a6361503b61509461508e858a614fb8565b88614fb8565b86614fb8565b818103818111156106b1576106b1614cd6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b808201808211156106b1576106b1614cd6565b5f61504161503b8386614fb8565b80820281158282048414176106b1576106b1614cd656"; + +/// @dev The runtime bytecode of the contract. +bytes constant RUNTIME_CODE = + hex"608060405234801561000f575f80fd5b50600436106102b7575f3560e01c806381f7e2f511610171578063cde72ef3116100d2578063dd64691711610088578063e5526ecd1161006e578063e5526ecd1461065b578063e75f991f1461066e578063ffae15ba14610681575f80fd5b8063dd64691714610635578063e0db588814610648575f80fd5b8063d1de592a116100b8578063d1de592a146105e8578063d35273a7146105fb578063d3d6ffa814610622575f80fd5b8063cde72ef3146105af578063d102b4d3146105d5575f80fd5b8063a19684b711610127578063bc1b392d1161010d578063bc1b392d14610538578063bc62d8d81461053e578063cb09682b14610589575f80fd5b8063a19684b7146104ff578063a90d041a14610525575f80fd5b806396ce1ec71161015757806396ce1ec7146104b55780639b4afd99146104c8578063a100a3d9146104ec575f80fd5b806381f7e2f51461048f5780638dc29807146104a2575f80fd5b8063371493ce1161021b5780635ca0e7a4116101d1578063719cd99d116101b7578063719cd99d1461045657806373bfb2831461046957806381a822721461047c575f80fd5b80635ca0e7a41461041d578063602c35fc14610430575f80fd5b806341aa00801161020157806341aa0080146103e45780634eb7cd34146103f75780635b23771d1461040a575f80fd5b8063371493ce146103b15780633b3bd868146103d1575f80fd5b806325388350116102705780633004fa41116102565780633004fa4114610368578063302974001461037b5780633447c0301461038e575f80fd5b8063253883501461034257806328fa1f0114610355575f80fd5b80630b6429bc116102a05780630b6429bc146102f4578063146e82ad1461031c5780631ee62f111461032f575f80fd5b806304327dc5146102bb578063078b665b146102e1575b5f80fd5b6102ce6102c9366004614a65565b6106a7565b6040519081526020015b60405180910390f35b6102ce6102ef366004614a7c565b6106b7565b610307610302366004614aac565b6106c9565b604080519283529015156020830152016102d8565b6102ce61032a366004614a65565b6106e1565b6102ce61033d366004614a65565b610700565b6102ce610350366004614a65565b61071f565b6102ce610363366004614a65565b61073e565b6102ce610376366004614a7c565b610748565b6102ce610389366004614a7c565b610768565b6103a161039c366004614a7c565b610773565b60405190151581526020016102d8565b6103c46103bf366004614ad6565b61077e565b6040516102d89190614b08565b6102ce6103df366004614aac565b61078a565b6102ce6103f2366004614a7c565b610795565b6103a1610405366004614b5b565b6107a0565b6102ce610418366004614aac565b6107b6565b6102ce61042b366004614a65565b6107c1565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102ce565b6102ce610464366004614a65565b6107cb565b6103a1610477366004614a7c565b6107d5565b6102ce61048a366004614a65565b6107e0565b6103a161049d366004614a7c565b6107ea565b6103a16104b0366004614a7c565b6107f5565b6102ce6104c3366004614a7c565b610800565b6102ce7c090000000000000000000000000000000000000000000000000000000181565b6103c46104fa366004614a65565b61080b565b7f80000000000000000000000000000000000000000000000000000000000000016102ce565b6102ce610533366004614a7c565b610855565b5f6102ce565b61055161054c366004614bb7565b610860565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016102d8565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff6102ce565b7f7fffffff800000000000000000000000000000000000000000000000000000006102ce565b6103a16105e3366004614a7c565b610879565b6102ce6105f6366004614a7c565b610884565b6102ce7ffffffffc0000000000000000000000000000000000000000000000000000000181565b6102ce610630366004614a65565b61088f565b6103a1610643366004614a65565b610899565b6102ce610656366004614a65565b6108bf565b6103c4610669366004614c80565b6108c9565b61030761067c366004614aac565b610949565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc6102ce565b5f6106b182610955565b92915050565b5f6106c28383610997565b9392505050565b5f806106d584846109b3565b915091505b9250929050565b5f6106b18273c51a14251b0dcf0ae24a96b7153991378938f5f56109f4565b5f6106b18273c51a14251b0dcf0ae24a96b7153991378938f5f5610a20565b5f6106b18273c51a14251b0dcf0ae24a96b7153991378938f5f5610a6d565b5f6106b182610aa0565b5f6106c2838373c51a14251b0dcf0ae24a96b7153991378938f5f5610ae1565b5f6106c28383610d3b565b5f6106c28383610d9d565b60606106c28383610deb565b5f6106c28383610e7e565b5f6106c28383610e99565b5f6107ad85858585610ede565b95945050505050565b5f6106c28383610f24565b5f6106b182610f57565b5f6106b18261100d565b5f6106c283836110b9565b5f6106b1826110fc565b5f6106c28383611141565b5f6106c28383611184565b5f6106c283836111c7565b60606106b1827ffffffffc000000000000000000000000000000000000000000000000000000017c09000000000000000000000000000000000000000000000000000000016108c9565b5f6106c2838361120c565b5f805f8061086d85611217565b90969095509350505050565b5f6106c28383611305565b5f6106c28383611348565b5f6106b18261138d565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156106b1565b5f6106b1826113bf565b60606108d58383611305565b61091a576040517f3be5bf9400000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b5f610924856110fc565b90506107ad856109348387611305565b8061094457506109448386611184565b610deb565b5f806106d58484611400565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d6109878282611440565b90925090505f6107ad838361148e565b5f6109a28383611184565b6109ac57816106c2565b5090919050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6109e78282876114f4565b9350935050509250929050565b5f6106c2837fffffffff0000000000000000000000000000000000000000000000000000000584610ae1565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a538483836116fe565b90925090505f610a63838361148e565b9695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d610a5384838361186f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82610ad38383611ba4565b9150505f610a63828461148e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516610b1e5750600191506106c29050565b5f8213610bb757815f03610b7b57610b36855f611305565b15610b70576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610911565b505f91506106c29050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610911565b610bc2856001610d9d565b8015610bd35750610bd3865f611184565b15610be25785925050506106c2565b610bec855f611305565b15610c1557610c0c610bfd87610955565b610c068761138d565b86610ae1565b925050506106c2565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80610c488484611ba4565b915091505f610c5883855f611c0c565b905060015f8080610c8f8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510610cd65784600116600103610cb957610cb384848484611d23565b90945092505b600185901c9450610ccc82828484611d23565b9092509050610c94565b5f80610ce38f8e8e61186f565b91509150610cf382828a8d611d23565b9092509050610d038f83836116fe565b9092509050610d1482828888611d23565b90925090505f610d24838361148e565b9e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d8086868686611e42565b915091505f610d8f838361148e565b9a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de084848484612466565b979650505050505050565b60607bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d5f829003610e5b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250925050506106b1565b8315610e7457610e6b828261247d565b925050506106b1565b6107ad82826127ba565b5f805f610e8b8585612fe4565b915091506107ad8282613046565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d8086868686613098565b5f610ee985856130c2565b5f80610ef5858561318e565b915091505f80610f07898989896131e5565b91509150610f178484848461327f565b9998505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d6107ad82828661329b565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112610f8e57509192915050565b5f80610f9a8484611ba4565b915091505f84128015610fac57508015155b1561100257610ffd82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4613098565b935091505b5f610de0838561148e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261104457509192915050565b5f806110508484611ba4565b91509150805f03611065575093949350505050565b5f81131561100257610ffd82847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb46132f7565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de084848484613427565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82821215611136576109878282613443565b5f6107ad838361148e565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de08484848461327f565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de0848484846134e6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d8086868686611d23565b5f6109a28383611305565b80515f908190602084810191850101828080806112348686613501565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084165f036112f6578483036112c6575f8061127a84846139a0565b91509150806112b557507f32b8b8be000000000000000000000000000000000000000000000000000000009a5f9a5098505050505050505050565b505f9a909950975050505050505050565b507fad384e8700000000000000000000000000000000000000000000000000000000985f98509650505050505050565b5091975f975095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d610de084848484613aa6565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610d80868686866132f7565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d6109878282613443565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d826113f28383611ba4565b5090505f610a63828461148e565b5f805f805f61140f8787613ac1565b9250925092505f8061142185856139a0565b91509150818380156114305750815b9650965050505050509250929050565b5f806106d57f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb48686611e42565b5f805f61149b85856139a0565b91509150801580156114ab575081155b156114ec576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610911565b509392505050565b5f805f85121561153a576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610911565b845f0361154c57505f905060016116f6565b8460ff8416850185811215611597576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610911565b5f805f831215611601577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156115d8575f8095509550505050506116f6565b825f03600a0a91508184816115ef576115ef614ca9565b04955050840290911491506116f69050565b5f8313156116eb57604d831315611657576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610911565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161168c5761168c614ca9565b048411156116d9576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610911565b50919091029250600191506116f69050565b509193506001925050505b935093915050565b5f805f84121561173a576117128484613443565b90945092506117228585856116fe565b90945092506117318484611440565b915091506116f6565b5f806117468686611ba4565b9092509050845f80806117598585613b1d565b9194509250905061270d612710611771600182614d03565b8514611788576117828d8686613c0c565b90925090505b8315611813575f61179a866001614d29565b90505b8084858302816117af576117af614ca9565b05146117c657600a84059350600a8805975061179d565b6118076117d38588614d50565b896117de8785614d50565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc613cc5565b909d509b5061183a9050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b50505050508661184b84835f611c0c565b611856886001614d29565b6118609190614d29565b94509450505050935093915050565b5f80838361187d8282613d62565b90965094505f86136118fe57855f036118c2576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610911565b5050837f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000000361193c5761193283604c614d29565b5f915091506116f6565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000008412158061198b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb56119ad565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412611b68575f805f805f856119c657604b6119c9565b604c5b6119d3908a614d29565b90505f8087611a00577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000611a21565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81611a5357611a53614ca9565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050611a8c8c82613db8565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414611b18576123278114611af357611ace8c82600101613db8565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002611b15565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50611b48838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4613cc5565b909a509850611b598a8a835f6132f7565b975097505050505050506116f6565b611b728585611440565b9095509350611b8286868661186f565b9095509350611b918585613443565b92509250506116f6565b50935093915050565b5f805f8312611bb757508290505f6106da565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4831215611be957505f9050826106da565b5f839003600a0a808581611bff57611bff614ca9565b0794859003959350505050565b5f818303611c1b5750826106c2565b82821315611c5e57828203604c811380611c3557505f8113155b15611c43575f9150506106c2565b80600a0a8581611c5557611c55614ca9565b059150506106c2565b818303604c811380611c7057505f8113155b15611cb8576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610911565b600a81900a85810286828281611cd057611cd0614ca9565b0514611d19576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610911565b92506106c2915050565b5f8085158415178015611d3b575f92505f9150611e38565b611d458487614d29565b91505f611d5188613e3f565b90505f611d5d87613e3f565b90505f611d6a8383613ea5565b5090505f6f0785ee10d5da46d900f436a000000000821115611d9f576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115611dc057670de0b6b3a7640000820491506012015b633b9aca00821115611dd957633b9aca00820491506009015b612710821115611dee57612710820491506004015b8115611e0257600a82049150600101611dee565b611e0c8187614d29565b9550611e2e8b8a611e288787611e2387600a614eb9565b613ee0565b89613fc5565b9097509550505050505b5094509492505050565b5f80835f03611e87576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610911565b855f03611e9857505f90508061245d565b5f805f80611ea68a8a6140cc565b919b5099509150611eb788886140cc565b919950975090505f611ec88b613e3f565b90505f611ed48a613e3f565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156122f1578415611f3257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b6122b0565b6f4b3b4ca85a86c47a098a22400000000083101561205e57678ac7230489e80000831015611fc2576402540be400831015611f9057620186a0831015611f805750620186a090506005612239565b506402540be4009050600a612239565b655af3107a4000831015611faf5750655af3107a40009050600e612239565b50678ac7230489e8000090506013612239565b6b204fce5e3e250261100000008310156120145769152d02c7e14af6800000831015611ffd575069152d02c7e14af680000090506017612239565b506b204fce5e3e250261100000009050601c612239565b6d314dc6448d9338c15b0a0000000083101561204357506d314dc6448d9338c15b0a0000000090506021612239565b506f4b3b4ca85a86c47a098a22400000000090506026612239565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156121565773af298d050e4395d69670b12b7f410000000000008310156120f1577172cb5bd86321e38cb6ce6682e800000000008310156120d257507172cb5bd86321e38cb6ce6682e800000000009050602b612239565b5073af298d050e4395d69670b12b7f4100000000000090506030612239565b76010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000831015612132575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035612239565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a612239565b7c03b58e88c75313ec9d329eaaa18fb92f75215b171000000000000000008310156121ec577a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000008310156121c457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f612239565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044612239565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca00000000000000000083101561223957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b81831161226d57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612239565b815f036122b0576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610911565b856122f1576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610911565b807f8000000000000000000000000000000000000000000000000000000000000000018d1261232457808d039c50612397565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f81131561239757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b1361238457998a0199612397565b5f8099509950505050505050505061245d565b5f808e1280156123a657505f8c135b156123e3577f80000000000000000000000000000000000000000000000000000000000000008e01808d136123db575f6123df565b808d035b9150505b8b818f010397506124008f8e6123fa888789613ee0565b8b613fc5565b90995097505f81131561244a57604c81131561242a575f809a509a5050505050505050505061245d565b80600a0a898161243c5761243c614ca9565b059850885f0361244a575f97505b5096985094965061245d95505050505050565b94509492505050565b5f6124738585858561436d565b1495945050505050565b60608161248a8482613d62565b90945092505f806124bb7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000087614ec4565b156124eb57507f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000009050604c612512565b507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b5b5f61251d8388614ec4565b90505f61252a8489614f2b565b90505f808312156125445750600161254183614f3e565b92505b5f82121561255b5750600161255882614f3e565b91505b60408051602081019091525f81528215612664575f8061257c600a89614f6e565b90505b6125898186614ec4565b5f036125ae5761259a600a82614f6e565b9050816125a681614f81565b92505061257f565b60408051602081019091525f8082525b8381101561260f57816040516020016125d79190614fcf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905291506001016125be565b505b61261c600a87614f2b565b5f036126345761262d600a87614ec4565b9550612611565b8061263e87614441565b60405160200161264f929190615007565b60405160208183030381529060405293505050505b5f61266e85614441565b90505f61267b878c614d29565b9050637fffffff8113806126ae57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000081125b156126e8576040517fe44c72b0000000000000000000000000000000000000000000000000000000008152600481018a9052602401610911565b5f811561271c576126f882614441565b6040516020016127089190615049565b60405160208183030381529060405261272c565b60405180602001604052805f8152505b90505f856127485760405180602001604052805f81525061277f565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b905080848684604051602001612798949392919061507a565b6040516020818303038152906040529b50505050505050505050505092915050565b60606103e88213806127d557506127d26103e8614f3e565b82125b1561280f576040517fe44c72b000000000000000000000000000000000000000000000000000000000815260048101839052602401610911565b5f80841290811561282a5761282385614f3e565b905061282d565b50835b5f8413156128f0578360448110612873576040517fe44c72b000000000000000000000000000000000000000000000000000000000815260048101869052602401610911565b7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff5f5b828110156128af576128a5600a83614f6e565b9150600101612892565b50808311156128ed576040517fe44c72b000000000000000000000000000000000000000000000000000000000815260048101879052602401610911565b50505b5f6128fa826144cd565b80519091505f5b818110801561297d5750828161291860018561509a565b612922919061509a565b81518110612932576129326150ad565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f3000000000000000000000000000000000000000000000000000000000000000145b15612994578061298c81614f81565b915050612901565b5f61299f828461509a565b90505f6129ac838a614d29565b90505f876129c85760405180602001604052805f8152506129ff565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b90505f8212612b7957815f612a1482866150da565b67ffffffffffffffff811115612a2c57612a2c614b8a565b6040519080825280601f01601f191660200182016040528015612a56576020820181803683370190505b5090505f5b85811015612ac857888181518110612a7557612a756150ad565b602001015160f81c60f81b828281518110612a9257612a926150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612a5b565b505f5b82811015612b45577f300000000000000000000000000000000000000000000000000000000000000082612aff83896150da565b81518110612b0f57612b0f6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612acb565b508281604051602001612b599291906150ed565b6040516020818303038152906040529a50505050505050505050506106b1565b5f612b8383614f3e565b905080841115612d9a575f612b98828661509a565b90505f612ba68660016150da565b67ffffffffffffffff811115612bbe57612bbe614b8a565b6040519080825280601f01601f191660200182016040528015612be8576020820181803683370190505b5090505f5b82811015612c5a57898181518110612c0757612c076150ad565b602001015160f81c60f81b828281518110612c2457612c246150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612bed565b507f2e00000000000000000000000000000000000000000000000000000000000000818381518110612c8e57612c8e6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b83811015612d655789612cd182856150da565b81518110612ce157612ce16150ad565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612d158660016150da565b612d1f91906150da565b81518110612d2f57612d2f6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612cbe565b508381604051602001612d799291906150ed565b6040516020818303038152906040529b5050505050505050505050506106b1565b5f612da5858361509a565b90505f85612db48360026150da565b612dbe91906150da565b67ffffffffffffffff811115612dd657612dd6614b8a565b6040519080825280601f01601f191660200182016040528015612e00576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612e3657612e366150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f2e0000000000000000000000000000000000000000000000000000000000000081600181518110612e9857612e986150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b82811015612f43577f300000000000000000000000000000000000000000000000000000000000000082612efd8360026150da565b81518110612f0d57612f0d6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612ec8565b505f5b86811015612d6557898181518110612f6057612f606150ad565b01602001517fff00000000000000000000000000000000000000000000000000000000000000168282612f948660026150da565b612f9e91906150da565b81518110612fae57612fae6150ad565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612f46565b5f805f805f612ff38787613ac1565b9250925092508061303a576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610911565b50909590945092505050565b5f805f61305385856139a0565b91509150806114ec576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610911565b5f806130a48484613443565b90945092506130b5868686866132f7565b9150915094509492505050565b5f6130cd5f80613046565b90506130d98382611305565b806130e957506130e98282611305565b1561312a576040517fbd559d600000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610911565b6131348382611184565b15801561314857506131468282611184565b155b15613189576040517fe9b2d4420000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610911565b505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b90810b9160e087811d9291871690910b9086901d84806131d484848888613098565b909b909a5098505050505050505050565b5f805f805f806131f58888614589565b90925090507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8916601b0b60e08a901d61322d82828686611d23565b90965094505050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8916601b0b905060e089901d5f8061326c848488886145db565b909d909c509a5050505050505050505050565b5f805f61328e8787878761436d565b1215979650505050505050565b5f805f6132a98686866114f4565b91509150806132ee576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610911565b50949350505050565b5f808515841517801561332357865f03613317578484925092505061245d565b8686925092505061245d565b61332d8787613d62565b909750955061333c8585613d62565b909550935085841315613350579395929492935b838603604c81111561336957878793509350505061245d565b80600a0a868161337b5761337b614ca9565b0595505086850180881860ff90811c151589881890911c1516801561341657877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff036133fd576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610911565b600a96879005969098058601976001979097019661341a565b8198505b5096979596505050505050565b5f805f6134368787878761436d565b1315979650505050505050565b5f807f800000000000000000000000000000000000000000000000000000000000000084036134dc577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036134cf576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610911565b600a840593508260010192505b50505f9190910391565b5f805f6134f58787878761436d565b12979650505050505050565b5f8281806135168386652000000000006145ff565b9250858314158361353081886703ff0000000000006145ff565b945080850361356a57507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506139979050565b5f806135768a88614628565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156135b4575095505f9350839250613997915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561384357506001909301925f846135f781896703ff0000000000006145ff565b955080860361363257507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613997915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b6601000000000000161515166001036136a1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613634565b8181146136f8575f806136b48484614628565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156136f4575097505f95508594506139979350505050565b9350505b5f83121561373357507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f945084935061399792505050565b831561373f57825f0392505b80820394505f85131561377f57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f945084935061399792505050565b855f0361378e57829550613840565b5f85900360438111156137cf57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506139979350505050565b600a0a8681025f888383816137e6576137e6614ca9565b0514159050601b82900b82141581806137fc5750805b1561383857507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506139979650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156139885760019095019485613883818a652000000000006145ff565b965086613899818b6703ff0000000000006145ff565b97508088036138d657507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506139979350505050565b505f806138e3838a614628565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613923575097505f95508594506139979350505050565b9250508482015f8313801561393757508581125b8061394b57505f8312801561394b57508581135b1561398457507fd556b1110000000000000000000000000000000000000000000000000000000097505f95508594506139979350505050565b9450505b845f03613993575f93505b5050505b92959194509250565b5f601b83900b8314838382613a04577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156139e457620186a0860595506005850194505b8586601b0b146139ff57600a860595508460010194506139e4565b613a1a565b855f03613a1a57505f9250600191506106da9050565b848560030b14613a76575f851215613a3a57505f92508291506106da9050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610911565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f613ab58787878761436d565b13979650505050505050565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115613b0c57600a860460018201600a88065f1493509350935050613b16565b8593509150600190505b9250925092565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03613b5557508391505f90506001613b16565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc841215613be3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0841215613bb457505f9150508215156001613b16565b5f846004015f03600a0a90505f818781613bd057613bd0614ca9565b0594505080840286141592509050613b16565b5f8412613bf857505f91508190506001613b16565b50505060048101600a0a82025f6001613b16565b5f80806064613c1e600a612328614f6e565b613c2b600a612328614f6e565b613c369060026150fb565b613c419060016150da565b613c4b91906150da565b613c5591906150da565b9050613c99565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b613ca4858288613c5c565b92508315611b9b57613cba600186018288613c5c565b915050935093915050565b5f80888803613cd8575083905081613d56565b5f805f80613ce88c8b8f8d613098565b915091505f80613cfa8a8a8d8c613098565b91509150613d0a84848484611d23565b8096508197505050505050505f80613d248b8b8f8d613098565b915091505f80613d3686868686611e42565b915091505f80613d4884848f8e6132f7565b909a50985050505050505050505b97509795505050505050565b5f805f805f613d7187876140cc565b9250925092508061303a576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610911565b5f80613dc7600a612328614f6e565b613dd29060026150fb565b613ddd9060016150da565b90505f613ded600a612328614f6e565b90506002600a8504026001015f8052600281601e883c505f51617fff81169350618000811615613e1c57918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f80821215613e9c577f80000000000000000000000000000000000000000000000000000000000000008203613e9657507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b919050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f805f613eed8686613ea5565b91509150815f03613f1157838181613f0757613f07614ca9565b04925050506106c2565b838210613f5b576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610911565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561408f577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84111561407c576140247f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60016150da565b840361405457507f800000000000000000000000000000000000000000000000000000000000000090508161245d565b61405f600a85614f6e565b61406890614f3e565b614073846001614d29565b9150915061245d565b61408584614f3e565b839150915061245d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156140c257614068600a85614f6e565b508290508161245d565b5f805f845f036140e457505f91508190506001613b16565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f036142f8576f4b3b4ca85a86c47a098a224000000000850515801561414d57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561416e576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156141b657507f80000000000000000000000000000000000000000000000000000000000000138412155b156141cf57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561421b57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614231576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561428057507f80000000000000000000000000000000000000000000000000000000000000028412155b1561429657606485029450600284039350614231565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085051580156142e657507f80000000000000000000000000000000000000000000000000000000000000018412155b156142f857600a850294506001840393505b600a8086029081058614801561432e57507f80000000000000000000000000000000000000000000000000000000000000018512155b1561433d578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8085158415178187128286121817858414178015614392578685925092505061245d565b505f858413156143a6575092949193919260015b8386035f8112604c82131780156143d95782156143cb575f899450945050505061245d565b885f9450945050505061245d565b600a82900a8981028a8282816143f1576143f1614ca9565b051461441d57841561440d575f8b96509650505050505061245d565b8a5f96509650505050505061245d565b841561443257889650945061245d9350505050565b955087945061245d9350505050565b60605f821261445e5760405180602001604052805f815250614495565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b6144a660ff84901d808501186144cd565b6040516020016144b79291906150ed565b6040516020818303038152906040529050919050565b60605f6144d983614752565b60010190505f8167ffffffffffffffff8111156144f8576144f8614b8a565b6040519080825280601f01601f191660200182016040528015614522576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461452c57509392505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b90810b9160e087811d9291871690910b9086901d84806131d46145cf87614833565b866145d987614833565b865b5f806145e98686868661327f565b6145f45785856130b5565b509194909350915050565b5f5b5f82600186515f1a1b1611838510161561462057600184019350614601565b509192915050565b81515f90819065200000000000600191831a9190911b16151583851016808501908280614655848861484a565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614690575093505f92506106da915050565b825f036146f3577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116146c4575f6146e6565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b955093506106da92505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614720575f614742565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061479a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106147c6576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106147e457662386f26fc10000830492506010015b6305f5e10083106147fc576305f5e100830492506008015b612710831061481057612710830492506004015b60648310614822576064830492506002015b600a83106106b15760010192915050565b5f80821261484157816106b1565b6106b182614f3e565b5f8082841061487d57507f34bd20690000000000000000000000000000000000000000000000000000000090505f6106da565b835f036148b6576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156148ee5750604d83105b1561493157815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016148de565b878210614a575781515f1a849003600181111561497957507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106da9350505050565b600a84900a81028281018311156149bc57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f95506106da945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614a575781515f1a60308114614a2c57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f94506106da9350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906149e8565b5f9890975095505050505050565b5f60208284031215614a75575f80fd5b5035919050565b5f8060408385031215614a8d575f80fd5b50508035926020909101359150565b803560ff81168114613ea0575f80fd5b5f8060408385031215614abd575f80fd5b82359150614acd60208401614a9c565b90509250929050565b5f8060408385031215614ae7575f80fd5b8235915060208301358015158114614afd575f80fd5b809150509250929050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f805f8060808587031215614b6e575f80fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614bc7575f80fd5b813567ffffffffffffffff80821115614bde575f80fd5b818401915084601f830112614bf1575f80fd5b813581811115614c0357614c03614b8a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715614c4957614c49614b8a565b81604052828152876020848701011115614c61575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f60608486031215614c92575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181035f831280158383131683831282161715614d2257614d22614cd6565b5092915050565b8082018281125f831280158216821582161715614d4857614d48614cd6565b505092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615614d8757614d87614cd6565b81810583148215176106b1576106b1614cd6565b600181815b80851115614df457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614dda57614dda614cd6565b80851615614de757918102915b93841c9390800290614da0565b509250929050565b5f82614e0a575060016106b1565b81614e1657505f6106b1565b8160018114614e2c5760028114614e3657614e52565b60019150506106b1565b60ff841115614e4757614e47614cd6565b50506001821b6106b1565b5060208310610133831016604e8410600b8410161715614e75575081810a6106b1565b614e7f8383614d9b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614eb157614eb1614cd6565b029392505050565b5f6106c28383614dfc565b5f82614ed257614ed2614ca9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614f2657614f26614cd6565b500590565b5f82614f3957614f39614ca9565b500790565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613e9657613e96614cd6565b5f82614f7c57614f7c614ca9565b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fb157614fb1614cd6565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f614fda8284614fb8565b7f300000000000000000000000000000000000000000000000000000000000000081526001019392505050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f61504161503b6001840186614fb8565b84614fb8565b949350505050565b7f650000000000000000000000000000000000000000000000000000000000000081525f6106c26001830184614fb8565b5f610a6361503b61509461508e858a614fb8565b88614fb8565b86614fb8565b818103818111156106b1576106b1614cd6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b808201808211156106b1576106b1614cd6565b5f61504161503b8386614fb8565b80820281158282048414176106b1576106b1614cd656"; + +/// @dev The addresses that MUST already have code on a network before +/// this release can be broadcast there, `abi.encode`d as an `address[]` +/// because Solidity has no file-scope constant of dynamic array type. +bytes constant DEPENDENCIES = + hex"00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c51a14251b0dcf0ae24a96b7153991378938f5f5"; diff --git a/src/generated/0_1_3/LogTables.sol b/src/generated/0_1_3/LogTables.sol new file mode 100644 index 0000000..1fd2694 --- /dev/null +++ b/src/generated/0_1_3/LogTables.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity ^0.8.25; + +// THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. + +/// @dev Hash of the known bytecode. +bytes32 constant BYTECODE_HASH = bytes32(0x2573004ac3a9ee7fc8d73654d76386f1b6b99e34cdf86a689c4691e47143420f); + +/// @dev The deterministic deploy address of the contract when deployed via +/// the Zoltu factory. +address constant DEPLOYED_ADDRESS = address(0xc51a14251b0dcF0ae24A96b7153991378938f5F5); + +/// @dev The creation bytecode of the contract. +bytes constant CREATION_CODE = + hex"6116c980600c6000396000f3000000002b0056008000aa80d480fd8126814e8176019e01c501ec02130239825f828582aa82cf82f30318033c0360038303a603c983ec840e843084520473049504b604d704f78517853785578577859605b505d405f306118630864e866c868986a786c406e106fe071a07370753076f878b87a787c387de07f90814082f084a0864887f889988b388cd88e70900091a0933094c0965097e899789b089c889e109f90a110a290a410a588a708a878a9e8ab68acd0ae40afa0b110b280b3e8b548b6b8b818b978bad0bc20bd80bee0c030c180c2e0c430c580c6d0c810c960cab0cbf0cd40ce80cfc0d110d250d390d4c0d600d740d880d9b0dae0dc20dd50de80dfb0e0e0e210e340e470e5a0e6c0e7f0e910ea30eb60ec80eda0eec0efe0f100f220f340f450f570f690f7a0f8b0f9d0fae0fbf0fd00fe10ff2100310141025103610461057106810781088109910a910b910ca10da10ea10fa110a111a1129113911491158116811781187119611a611b511c411d411e311f212011210121f122e123d124b125a126912781286129512a312b212c012ce12dd12eb12f913071316132413321340134e135b136913771385139313a013ae13bb13c913d713e413f113ff140c1419142714341441144e145b146814751482148f149c14a914b614c314d014dc14e914f61502150f151b152815341541154d155915661572157e158a159715a315af15bb15c715d315df15eb15f71603160f161a16261632163e164916551661166c16781683168f169a16a616b116bd16c816d316df16ea16f51700170b17171722172d17381743174e17591764176f177a1785178f179a17a517b017bb17c517d017db17e517f017fa18051810181a1824182f18391844184e18581863186d18771882188c189618a018aa18b518bf18c918d318dd18e718f118fb1905190f19191923192c19361940194a1954195d19671971197a1984198e199719a119ab19b419be19c719d119da19e419ed19f61a001a091a131a1c1a251a2e1a381a411a4a1a531a5d1a661a6f1a781a811a8a1a931a9c1aa51aae1ab71ac01ac91ad21adb1ae41aed1af61aff1b081b101b191b221b2b1b341b3c1b451b4e1b561b5f1b681b701b791b821b8a1b931b9b1ba41bac1bb51bbd1bc61bce1bd61bdf1be71bf01bf81c001c091c111c191c221c2a1c321c3a1c431c4b1c531c5b1c631c6b1c741c7c1c841c8c1c941c9c1ca41cac1cb41cbc1cc41ccc1cd41cdc1ce41cec1cf41cfb1d031d0b1d131d1b1d231d2a1d321d3a1d421d491d511d591d601d681d701d771d7f1d871d8e1d961d9e1da51dad1db41dbc1dc31dcb1dd21dda1de11de91df01df81dff1e061e0e1e151e1d1e241e2b1e331e3a1e411e481e501e571e5e1e661e6d1e741e7b1e821e8a1e911e981e9f1ea61ead1eb41ebc1ec31eca1ed11ed81edf1ee61eed1ef41efb1f021f091f101f171f1e1f251f2c1f331f391f401f471f4e1f551f5c1f631f691f701f771f7e1f851f8b1f921f991fa01fa61fad1fb41fba1fc11fc81fce1fd51fdc1fe21fe91ff01ff61ffd2003200a20112017201e2024202b20312038203e2045204b20522058205f2065206b20722078207f2085208b20922098209f20a520ab20b220b820be20c420cb20d120d720de20e420ea20f020f720fd21032109210f2116211c21222128212e2134213a21412147214d21532159215f2165216b21712177217d21832189218f2195219b21a121a721ad21b321b921bf21c521cb21d121d721dd21e321e921ee21f421fa22002206220c22122217221d22232229222f2234223a22402246224b22512257225d22622268226e22742279227f2285228a22902296229b22a122a722ac22b222b722bd22c322c822ce22d322d922df22e422ea22ef22f522fa23002305230b23102316231b23212326232c23312337233c23412347234c23522357235d23622367236d23722377237d23822388238d23922398239d23a223a823ad23b223b723bd23c223c723cd23d223d723dc23e223e723ec23f123f623fc24012406240b24102416241b24202425242a242f2435243a243f24442449244e24532458245d24632468246d24722477247c24812486248b24902495249a249f24a424a924ae24b324b824bd24c224c724cc24d124d624db24e024e524ea24ef24f424f924fd25022507250c25112516251b252025252529252e25332538253d25422546254b25502555255a255e25632568256d25722576257b258025852589258e25932598259c25a125a625ab25af25b425b925bd25c225c725cb25d025d525d925de25e325e725ec25f125f525fa25ff26032608260d26112616261a261f26232628262d26312636263a263f26432648264d26512656265a265f26632668266c26712675267a267e26832687268c269026952699269e26a226a626ab26af26b426b826bd26c126c626ca26ce26d326d726dc26e026e426e926ed26f126f626fa26ff27032707270c0004090d11151a1e22260004080c0f13171b1f230003070b0e1215191c200003070a0d1014171a1e000306090c0f1215181c000306090b0e1114171a000305080b0e10131618000305080a0d0f12141700020507090c0e10131500020407090b0d10121400020406080b0d0f111300020406080a0c0e101200020406080a0c0e0f110002040607090b0d0f110002040507090b0c0e100002030507090a0c0e0f0002030507080a0b0d0f000203050608090b0d0e000203050608090b0c0e000103040607090a0c0d000103040607090a0b0d000103040607080a0b0c00010304050708090b0c00010304050608090a0c00010304050608090a0b00010204050607090a0b00010204050607080a0b0001020305060708090a0001020305060708090a0001020304050708090a0001020304050608090a00010203040506070809000102030405060708090001020304050607080900010203040506070809000102030405060708090001020304050607070800010203040505060708000102030404050607080001020304040506070800010203030405060708000102030304050607080001020203040506070700010202030405060607000102020304050606070001020203040505060700010202030405050607000102020304050506070001010203040405060700010102030404050607000101020304040506060001010203040405060600010102030304050606000101020303040505060001010203030405050600010102030304050506000101020303040505060001010203030405050600010102030304040506000101020203040405060001010202030404050600010102020304040505000101020203040405050001010202030404050500010102020304040505000101020203030405050001010202030304050500010102020303040405000101020203030404050001010202030304040500010102020303040405000101020203030404050001010202030304040500010102020303040405000101020203030404050001010202030304040500010102020303040405000001010202030304040000010102020303040400000101020203030404000001010202030304040000010102020303040400000101020203030404000001010202030304040000010102020303040400000101020203030404000001010202030304040000010102020303040400000101020203030404000001010202030303040004080c1014181c20250004070b0f13161a1e210003070a0e1114181b1f0003070a0c101316191d000306090c0f1114171a000305080b0e10131619000305080a0d0f121517000205070a0c0f11131600020507090b0e10121500020406080b0d0f111303e803ea03ed03ef03f103f403f603f803fb03fd03ff0402040404060409040b040e0410041204150417041a041c041e0421042304260428042b042d04300432043404370439043c043e0441044304460448044b044e0450045304550458045a045d045f046204650467046a046c046f047204740477047a047c047f0481048404870489048c048f049104940497049a049c049f04a204a504a704aa04ad04af04b204b504b804bb04bd04c004c304c604c904cb04ce04d104d404d704da04dd04df04e204e504e804eb04ee04f104f404f704fa04fc04ff050205050508050b050e051105140517051a051d0520052305260529052c052f053205360539053c053f054205450548054b054e055105550558055b055e056105640568056b056e057105740578057b057e058105850588058b058e059205950598059b059f05a205a505a905ac05af05b305b605ba05bd05c005c405c705cb05ce05d105d505d805dc05df05e305e605ea05ed05f105f405f805fb05ff060206060609060d061006140618061b061f06220626062a062d063106350638063c064006430647064b064e06520656065a065d066106650669066c067006740678067c067f06830687068b068f06930697069a069e06a206a606aa06ae06b206b606ba06be06c206c606ca06ce06d206d606da06de06e206e606ea06ee06f206f606fa06ff07030707070b070f07130718071c072007240728072d073107350739073e07420746074a074f07530757075c076007640769076d07710776077a077f07830788078c079007950799079e07a207a707ab07b007b407b907be07c207c707cb07d007d407d907de07e207e707ec07f007f507fa07fe08030808080d08110816081b082008240829082e08330838083d08410846084b08500855085a085f08640869086e08730878087d08820887088c08910896089b08a008a508aa08af08b408ba08bf08c408c908ce08d308d908de08e308e808ee08f308f808fd09030908090d09130918091d09230928092e09330938093e09430949094e09540959095f0964096a096f0975097b09800986098b09910997099c09a209a809ad09b309b909bf09c409ca09d009d609db09e109e709ed09f309f909ff0a040a0a0a100a160a1c0a220a280a2e0a340a3a0a400a460a4c0a520a590a5f0a650a6b0a710a770a7d0a840a8a0a900a960a9c0aa30aa90aaf0ab60abc0ac20ac90acf0ad50adc0ae20ae90aef0af50afc0b020b090b0f0b160b1c0b230b2a0b300b370b3d0b440b4b0b510b580b5f0b650b6c0b730b7a0b800b870b8e0b950b9c0ba30ba90bb00bb70bbe0bc50bcc0bd30bda0be10be80bef0bf60bfd0c040c0b0c120c190c210c280c2f0c360c3d0c450c4c0c530c5a0c620c690c700c780c7f0c860c8e0c950c9c0ca40cab0cb30cba0cc20cc90cd10cd90ce00ce80cef0cf70cff0d060d0e0d160d1d0d250d2d0d350d3c0d440d4c0d540d5c0d640d6c0d730d7b0d830d8b0d930d9b0da30dab0db40dbc0dc40dcc0dd40ddc0de40ded0df50dfd0e050e0d0e160e1e0e260e2f0e370e400e480e500e590e610e6a0e720e7b0e830e8c0e950e9d0ea60eae0eb70ec00ec80ed10eda0ee30eeb0ef40efd0f060f0f0f180f210f2a0f320f3b0f440f4d0f560f600f690f720f7b0f840f8d0f960f9f0fa90fb20fbb0fc40fce0fd70fe00fea0ff30ffd1006100f10191022102c1036103f10491052105c1066106f10791083108c109610a010aa10b410bd10c710d110db10e510ef10f91103110d11171121112b11361140114a1154115e11691173117d11871192119c11a711b111bb11c611d011db11e511f011fb12051210121a12251230123b12451250125b12661271127c12861291129c12a712b212bd12c812d312df12ea12f51300130b13171322132d13381344134f135b13661371137d13881394139f13ab13b713c213ce13da13e513f113fd140914141420142c143814441450145c146814741480148c149814a414b114bd14c914d514e214ee14fa150715131520152c153915451552155e156b157715841591159e15aa15b715c415d115de15ea15f716041611161e162b1639164616531660166d167a1688169516a216b016bd16ca16d816e516f31700170e171c17291737174517521760176e177c178a179717a517b317c117cf17dd17ec17fa18081816182418321841184f185d186c187a1889189718a618b418c318d118e018ef18fd190c191b192a193919471956196519741983199219a119b119c019cf19de19ed19fd1a0c1a1b1a2b1a3a1a4a1a591a691a781a881a981aa71ab71ac71ad71ae71af61b061b161b261b361b461b561b671b771b871b971ba71bb81bc81bd91be91bf91c0a1c1a1c2b1c3c1c4c1c5d1c6e1c7f1c8f1ca01cb11cc21cd31ce41cf51d061d171d281d3a1d4b1d5c1d6e1d7f1d901da21db31dc51dd61de81dfa1e0b1e1d1e2f1e411e521e641e761e881e9a1eac1ebe1ed11ee31ef51f071f1a1f2c1f3e1f511f631f761f881f9b1fae1fc01fd31fe61ff9200c201e203120442057206b207e209120a420b720cb20de20f121052118212c213f21532167217a218e21a221b621ca21de21f22206221a222e22422256226a227f229322a822bc22d122e522fa230e23232338234c23612376238b23a023b523ca23df23f4240a241f2434244a245f2475248a24a024b524cb24e124f6250c25222538254e2564257a259025a625bd25d325e925ff2616262c2643265926702687269e26b426cb26e226f90000000101010102020200000001010101020202000000010101010202020000000101010102020200000101010102020202000001010101020202020000010101010202020200000101010102020202000001010101020202030000010101010202020300000101010102020203000001010102020202030000010101020202020300000101010202020303000001010102020203030000010101020202030300000101010202020303000001010102020203030000010101020202030300000101010202030303000001010102020303030000010102020203030300000101020202030303000001010202020303040000010102020203030400000101020202030304000001010202030303040000010102020303030400000101020203030404000001010202030304040000010102020303040400000101020203030404000001010202030304040000010102020303040400010102020303040405000101020203030404050001010202030304040500010102020303040405000101020203030404050001010202030304050500010102020304040505000101020203040405050001010202030404050600010102030304040506000101020303040405060001010203030405050600010102030304050506000101020303040505060001010203040405060600010102030404050606000101020304040506070001020203040505060700010202030405050607000102020304050606070001020203040506060700010202030405060707000102030304050607080001020303040506070800010203040405060708000102030405050607080001020304050606070800010203040506070809000102030405060708090001020304050607080900010203040506070809000102030405060708090001020304050607090a0001020304050708090a0001020304060708090a0001020305060708090a0001020405060708090b00010204050607080a0b00010204050607090a0b00010304050608090a0b00010304050608090a0c00010304050708090a0c00010304050708090b0c000103040507080a0b0c000103040607080a0b0d000103040607090a0b0d000103040607090a0c0d000203050608090b0c0e000203050608090b0c0e000203050608090b0d0e0002030506080a0b0d0f0002030507080a0c0d0f0002030507080a0c0d0f0002030507090a0c0e100002040507090b0c0e100002040507090b0d0e100002040607090b0d0f110002040608090b0d0f1100020406080a0c0e0f1100020406080a0c0e101200020406080a0c0e101200020406080a0c0f111300020406080b0d0f111300020407090b0d0f111400020407090b0d10121400020507090b0e101214487b70e9466cde309028aef37f02dec89512664508d4f7cdc64f9a7d72ec6345"; + +/// @dev The runtime bytecode of the contract. +bytes constant RUNTIME_CODE = + hex"000000002b0056008000aa80d480fd8126814e8176019e01c501ec02130239825f828582aa82cf82f30318033c0360038303a603c983ec840e843084520473049504b604d704f78517853785578577859605b505d405f306118630864e866c868986a786c406e106fe071a07370753076f878b87a787c387de07f90814082f084a0864887f889988b388cd88e70900091a0933094c0965097e899789b089c889e109f90a110a290a410a588a708a878a9e8ab68acd0ae40afa0b110b280b3e8b548b6b8b818b978bad0bc20bd80bee0c030c180c2e0c430c580c6d0c810c960cab0cbf0cd40ce80cfc0d110d250d390d4c0d600d740d880d9b0dae0dc20dd50de80dfb0e0e0e210e340e470e5a0e6c0e7f0e910ea30eb60ec80eda0eec0efe0f100f220f340f450f570f690f7a0f8b0f9d0fae0fbf0fd00fe10ff2100310141025103610461057106810781088109910a910b910ca10da10ea10fa110a111a1129113911491158116811781187119611a611b511c411d411e311f212011210121f122e123d124b125a126912781286129512a312b212c012ce12dd12eb12f913071316132413321340134e135b136913771385139313a013ae13bb13c913d713e413f113ff140c1419142714341441144e145b146814751482148f149c14a914b614c314d014dc14e914f61502150f151b152815341541154d155915661572157e158a159715a315af15bb15c715d315df15eb15f71603160f161a16261632163e164916551661166c16781683168f169a16a616b116bd16c816d316df16ea16f51700170b17171722172d17381743174e17591764176f177a1785178f179a17a517b017bb17c517d017db17e517f017fa18051810181a1824182f18391844184e18581863186d18771882188c189618a018aa18b518bf18c918d318dd18e718f118fb1905190f19191923192c19361940194a1954195d19671971197a1984198e199719a119ab19b419be19c719d119da19e419ed19f61a001a091a131a1c1a251a2e1a381a411a4a1a531a5d1a661a6f1a781a811a8a1a931a9c1aa51aae1ab71ac01ac91ad21adb1ae41aed1af61aff1b081b101b191b221b2b1b341b3c1b451b4e1b561b5f1b681b701b791b821b8a1b931b9b1ba41bac1bb51bbd1bc61bce1bd61bdf1be71bf01bf81c001c091c111c191c221c2a1c321c3a1c431c4b1c531c5b1c631c6b1c741c7c1c841c8c1c941c9c1ca41cac1cb41cbc1cc41ccc1cd41cdc1ce41cec1cf41cfb1d031d0b1d131d1b1d231d2a1d321d3a1d421d491d511d591d601d681d701d771d7f1d871d8e1d961d9e1da51dad1db41dbc1dc31dcb1dd21dda1de11de91df01df81dff1e061e0e1e151e1d1e241e2b1e331e3a1e411e481e501e571e5e1e661e6d1e741e7b1e821e8a1e911e981e9f1ea61ead1eb41ebc1ec31eca1ed11ed81edf1ee61eed1ef41efb1f021f091f101f171f1e1f251f2c1f331f391f401f471f4e1f551f5c1f631f691f701f771f7e1f851f8b1f921f991fa01fa61fad1fb41fba1fc11fc81fce1fd51fdc1fe21fe91ff01ff61ffd2003200a20112017201e2024202b20312038203e2045204b20522058205f2065206b20722078207f2085208b20922098209f20a520ab20b220b820be20c420cb20d120d720de20e420ea20f020f720fd21032109210f2116211c21222128212e2134213a21412147214d21532159215f2165216b21712177217d21832189218f2195219b21a121a721ad21b321b921bf21c521cb21d121d721dd21e321e921ee21f421fa22002206220c22122217221d22232229222f2234223a22402246224b22512257225d22622268226e22742279227f2285228a22902296229b22a122a722ac22b222b722bd22c322c822ce22d322d922df22e422ea22ef22f522fa23002305230b23102316231b23212326232c23312337233c23412347234c23522357235d23622367236d23722377237d23822388238d23922398239d23a223a823ad23b223b723bd23c223c723cd23d223d723dc23e223e723ec23f123f623fc24012406240b24102416241b24202425242a242f2435243a243f24442449244e24532458245d24632468246d24722477247c24812486248b24902495249a249f24a424a924ae24b324b824bd24c224c724cc24d124d624db24e024e524ea24ef24f424f924fd25022507250c25112516251b252025252529252e25332538253d25422546254b25502555255a255e25632568256d25722576257b258025852589258e25932598259c25a125a625ab25af25b425b925bd25c225c725cb25d025d525d925de25e325e725ec25f125f525fa25ff26032608260d26112616261a261f26232628262d26312636263a263f26432648264d26512656265a265f26632668266c26712675267a267e26832687268c269026952699269e26a226a626ab26af26b426b826bd26c126c626ca26ce26d326d726dc26e026e426e926ed26f126f626fa26ff27032707270c0004090d11151a1e22260004080c0f13171b1f230003070b0e1215191c200003070a0d1014171a1e000306090c0f1215181c000306090b0e1114171a000305080b0e10131618000305080a0d0f12141700020507090c0e10131500020407090b0d10121400020406080b0d0f111300020406080a0c0e101200020406080a0c0e0f110002040607090b0d0f110002040507090b0c0e100002030507090a0c0e0f0002030507080a0b0d0f000203050608090b0d0e000203050608090b0c0e000103040607090a0c0d000103040607090a0b0d000103040607080a0b0c00010304050708090b0c00010304050608090a0c00010304050608090a0b00010204050607090a0b00010204050607080a0b0001020305060708090a0001020305060708090a0001020304050708090a0001020304050608090a00010203040506070809000102030405060708090001020304050607080900010203040506070809000102030405060708090001020304050607070800010203040505060708000102030404050607080001020304040506070800010203030405060708000102030304050607080001020203040506070700010202030405060607000102020304050606070001020203040505060700010202030405050607000102020304050506070001010203040405060700010102030404050607000101020304040506060001010203040405060600010102030304050606000101020303040505060001010203030405050600010102030304050506000101020303040505060001010203030405050600010102030304040506000101020203040405060001010202030404050600010102020304040505000101020203040405050001010202030404050500010102020304040505000101020203030405050001010202030304050500010102020303040405000101020203030404050001010202030304040500010102020303040405000101020203030404050001010202030304040500010102020303040405000101020203030404050001010202030304040500010102020303040405000001010202030304040000010102020303040400000101020203030404000001010202030304040000010102020303040400000101020203030404000001010202030304040000010102020303040400000101020203030404000001010202030304040000010102020303040400000101020203030404000001010202030303040004080c1014181c20250004070b0f13161a1e210003070a0e1114181b1f0003070a0c101316191d000306090c0f1114171a000305080b0e10131619000305080a0d0f121517000205070a0c0f11131600020507090b0e10121500020406080b0d0f111303e803ea03ed03ef03f103f403f603f803fb03fd03ff0402040404060409040b040e0410041204150417041a041c041e0421042304260428042b042d04300432043404370439043c043e0441044304460448044b044e0450045304550458045a045d045f046204650467046a046c046f047204740477047a047c047f0481048404870489048c048f049104940497049a049c049f04a204a504a704aa04ad04af04b204b504b804bb04bd04c004c304c604c904cb04ce04d104d404d704da04dd04df04e204e504e804eb04ee04f104f404f704fa04fc04ff050205050508050b050e051105140517051a051d0520052305260529052c052f053205360539053c053f054205450548054b054e055105550558055b055e056105640568056b056e057105740578057b057e058105850588058b058e059205950598059b059f05a205a505a905ac05af05b305b605ba05bd05c005c405c705cb05ce05d105d505d805dc05df05e305e605ea05ed05f105f405f805fb05ff060206060609060d061006140618061b061f06220626062a062d063106350638063c064006430647064b064e06520656065a065d066106650669066c067006740678067c067f06830687068b068f06930697069a069e06a206a606aa06ae06b206b606ba06be06c206c606ca06ce06d206d606da06de06e206e606ea06ee06f206f606fa06ff07030707070b070f07130718071c072007240728072d073107350739073e07420746074a074f07530757075c076007640769076d07710776077a077f07830788078c079007950799079e07a207a707ab07b007b407b907be07c207c707cb07d007d407d907de07e207e707ec07f007f507fa07fe08030808080d08110816081b082008240829082e08330838083d08410846084b08500855085a085f08640869086e08730878087d08820887088c08910896089b08a008a508aa08af08b408ba08bf08c408c908ce08d308d908de08e308e808ee08f308f808fd09030908090d09130918091d09230928092e09330938093e09430949094e09540959095f0964096a096f0975097b09800986098b09910997099c09a209a809ad09b309b909bf09c409ca09d009d609db09e109e709ed09f309f909ff0a040a0a0a100a160a1c0a220a280a2e0a340a3a0a400a460a4c0a520a590a5f0a650a6b0a710a770a7d0a840a8a0a900a960a9c0aa30aa90aaf0ab60abc0ac20ac90acf0ad50adc0ae20ae90aef0af50afc0b020b090b0f0b160b1c0b230b2a0b300b370b3d0b440b4b0b510b580b5f0b650b6c0b730b7a0b800b870b8e0b950b9c0ba30ba90bb00bb70bbe0bc50bcc0bd30bda0be10be80bef0bf60bfd0c040c0b0c120c190c210c280c2f0c360c3d0c450c4c0c530c5a0c620c690c700c780c7f0c860c8e0c950c9c0ca40cab0cb30cba0cc20cc90cd10cd90ce00ce80cef0cf70cff0d060d0e0d160d1d0d250d2d0d350d3c0d440d4c0d540d5c0d640d6c0d730d7b0d830d8b0d930d9b0da30dab0db40dbc0dc40dcc0dd40ddc0de40ded0df50dfd0e050e0d0e160e1e0e260e2f0e370e400e480e500e590e610e6a0e720e7b0e830e8c0e950e9d0ea60eae0eb70ec00ec80ed10eda0ee30eeb0ef40efd0f060f0f0f180f210f2a0f320f3b0f440f4d0f560f600f690f720f7b0f840f8d0f960f9f0fa90fb20fbb0fc40fce0fd70fe00fea0ff30ffd1006100f10191022102c1036103f10491052105c1066106f10791083108c109610a010aa10b410bd10c710d110db10e510ef10f91103110d11171121112b11361140114a1154115e11691173117d11871192119c11a711b111bb11c611d011db11e511f011fb12051210121a12251230123b12451250125b12661271127c12861291129c12a712b212bd12c812d312df12ea12f51300130b13171322132d13381344134f135b13661371137d13881394139f13ab13b713c213ce13da13e513f113fd140914141420142c143814441450145c146814741480148c149814a414b114bd14c914d514e214ee14fa150715131520152c153915451552155e156b157715841591159e15aa15b715c415d115de15ea15f716041611161e162b1639164616531660166d167a1688169516a216b016bd16ca16d816e516f31700170e171c17291737174517521760176e177c178a179717a517b317c117cf17dd17ec17fa18081816182418321841184f185d186c187a1889189718a618b418c318d118e018ef18fd190c191b192a193919471956196519741983199219a119b119c019cf19de19ed19fd1a0c1a1b1a2b1a3a1a4a1a591a691a781a881a981aa71ab71ac71ad71ae71af61b061b161b261b361b461b561b671b771b871b971ba71bb81bc81bd91be91bf91c0a1c1a1c2b1c3c1c4c1c5d1c6e1c7f1c8f1ca01cb11cc21cd31ce41cf51d061d171d281d3a1d4b1d5c1d6e1d7f1d901da21db31dc51dd61de81dfa1e0b1e1d1e2f1e411e521e641e761e881e9a1eac1ebe1ed11ee31ef51f071f1a1f2c1f3e1f511f631f761f881f9b1fae1fc01fd31fe61ff9200c201e203120442057206b207e209120a420b720cb20de20f121052118212c213f21532167217a218e21a221b621ca21de21f22206221a222e22422256226a227f229322a822bc22d122e522fa230e23232338234c23612376238b23a023b523ca23df23f4240a241f2434244a245f2475248a24a024b524cb24e124f6250c25222538254e2564257a259025a625bd25d325e925ff2616262c2643265926702687269e26b426cb26e226f90000000101010102020200000001010101020202000000010101010202020000000101010102020200000101010102020202000001010101020202020000010101010202020200000101010102020202000001010101020202030000010101010202020300000101010102020203000001010102020202030000010101020202020300000101010202020303000001010102020203030000010101020202030300000101010202020303000001010102020203030000010101020202030300000101010202030303000001010102020303030000010102020203030300000101020202030303000001010202020303040000010102020203030400000101020202030304000001010202030303040000010102020303030400000101020203030404000001010202030304040000010102020303040400000101020203030404000001010202030304040000010102020303040400010102020303040405000101020203030404050001010202030304040500010102020303040405000101020203030404050001010202030304050500010102020304040505000101020203040405050001010202030404050600010102030304040506000101020303040405060001010203030405050600010102030304050506000101020303040505060001010203040405060600010102030404050606000101020304040506070001020203040505060700010202030405050607000102020304050606070001020203040506060700010202030405060707000102030304050607080001020303040506070800010203040405060708000102030405050607080001020304050606070800010203040506070809000102030405060708090001020304050607080900010203040506070809000102030405060708090001020304050607090a0001020304050708090a0001020304060708090a0001020305060708090a0001020405060708090b00010204050607080a0b00010204050607090a0b00010304050608090a0b00010304050608090a0c00010304050708090a0c00010304050708090b0c000103040507080a0b0c000103040607080a0b0d000103040607090a0b0d000103040607090a0c0d000203050608090b0c0e000203050608090b0c0e000203050608090b0d0e0002030506080a0b0d0f0002030507080a0c0d0f0002030507080a0c0d0f0002030507090a0c0e100002040507090b0c0e100002040507090b0d0e100002040607090b0d0f110002040608090b0d0f1100020406080a0c0e0f1100020406080a0c0e101200020406080a0c0e101200020406080a0c0f111300020406080b0d0f111300020407090b0d0f111400020407090b0d10121400020507090b0e101214487b70e9466cde309028aef37f02dec89512664508d4f7cdc64f9a7d72ec6345"; + +/// @dev The addresses that MUST already have code on a network before +/// this release can be broadcast there, `abi.encode`d as an `address[]` +/// because Solidity has no file-scope constant of dynamic array type. +bytes constant DEPENDENCIES = + hex"00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"; diff --git a/src/lib/LibDecimalFloatReleased.sol b/src/lib/LibDecimalFloatReleased.sol index 65e66e7..2ac82ef 100644 --- a/src/lib/LibDecimalFloatReleased.sol +++ b/src/lib/LibDecimalFloatReleased.sol @@ -22,6 +22,14 @@ import { DEPENDENCIES as DecimalFloat_0_1_2_DEPENDENCIES } from "../generated/0_1_2/DecimalFloat.sol"; +import { + DEPLOYED_ADDRESS as DecimalFloat_0_1_3_DEPLOYED_ADDRESS, + BYTECODE_HASH as DecimalFloat_0_1_3_BYTECODE_HASH, + CREATION_CODE as DecimalFloat_0_1_3_CREATION_CODE, + RUNTIME_CODE as DecimalFloat_0_1_3_RUNTIME_CODE, + DEPENDENCIES as DecimalFloat_0_1_3_DEPENDENCIES +} from "../generated/0_1_3/DecimalFloat.sol"; + /// @title LibDecimalFloatReleased /// @notice Every frozen release of `DecimalFloat`: one entry per file in /// the append-only `src/generated//` record, in tag order. @@ -42,7 +50,7 @@ library LibDecimalFloatReleased { /// Every frozen release, in tag order. /// @return The released suites. function releasedSuites() internal pure returns (DeploySuite[] memory) { - DeploySuite[] memory suites = new DeploySuite[](2); + DeploySuite[] memory suites = new DeploySuite[](3); suites[0] = DeploySuite({ suite: "decimal-float@0_1_1", creationCode: DecimalFloat_0_1_1_CREATION_CODE, @@ -61,6 +69,15 @@ library LibDecimalFloatReleased { artifactPath: "src/concrete/DecimalFloat.sol:DecimalFloat", dependencies: abi.decode(DecimalFloat_0_1_2_DEPENDENCIES, (address[])) }); + suites[2] = DeploySuite({ + suite: "decimal-float@0_1_3", + creationCode: DecimalFloat_0_1_3_CREATION_CODE, + storedDeployedAddress: DecimalFloat_0_1_3_DEPLOYED_ADDRESS, + storedBytecodeHash: DecimalFloat_0_1_3_BYTECODE_HASH, + storedRuntimeCode: DecimalFloat_0_1_3_RUNTIME_CODE, + artifactPath: "src/concrete/DecimalFloat.sol:DecimalFloat", + dependencies: abi.decode(DecimalFloat_0_1_3_DEPENDENCIES, (address[])) + }); return suites; } } diff --git a/src/lib/LibLogTablesReleased.sol b/src/lib/LibLogTablesReleased.sol index 5e49791..1f78d23 100644 --- a/src/lib/LibLogTablesReleased.sol +++ b/src/lib/LibLogTablesReleased.sol @@ -22,6 +22,14 @@ import { DEPENDENCIES as LogTables_0_1_2_DEPENDENCIES } from "../generated/0_1_2/LogTables.sol"; +import { + DEPLOYED_ADDRESS as LogTables_0_1_3_DEPLOYED_ADDRESS, + BYTECODE_HASH as LogTables_0_1_3_BYTECODE_HASH, + CREATION_CODE as LogTables_0_1_3_CREATION_CODE, + RUNTIME_CODE as LogTables_0_1_3_RUNTIME_CODE, + DEPENDENCIES as LogTables_0_1_3_DEPENDENCIES +} from "../generated/0_1_3/LogTables.sol"; + /// @title LibLogTablesReleased /// @notice Every frozen release of `LogTables`: one entry per file in /// the append-only `src/generated//` record, in tag order. @@ -42,7 +50,7 @@ library LibLogTablesReleased { /// Every frozen release, in tag order. /// @return The released suites. function releasedSuites() internal pure returns (DeploySuite[] memory) { - DeploySuite[] memory suites = new DeploySuite[](2); + DeploySuite[] memory suites = new DeploySuite[](3); suites[0] = DeploySuite({ suite: "log-tables@0_1_1", creationCode: LogTables_0_1_1_CREATION_CODE, @@ -61,6 +69,15 @@ library LibLogTablesReleased { artifactPath: "", dependencies: abi.decode(LogTables_0_1_2_DEPENDENCIES, (address[])) }); + suites[2] = DeploySuite({ + suite: "log-tables@0_1_3", + creationCode: LogTables_0_1_3_CREATION_CODE, + storedDeployedAddress: LogTables_0_1_3_DEPLOYED_ADDRESS, + storedBytecodeHash: LogTables_0_1_3_BYTECODE_HASH, + storedRuntimeCode: LogTables_0_1_3_RUNTIME_CODE, + artifactPath: "", + dependencies: abi.decode(LogTables_0_1_3_DEPENDENCIES, (address[])) + }); return suites; } }