From 55cbf31f18c35a1fbdd33af99e50498d96de87ab Mon Sep 17 00:00:00 2001 From: irrun Date: Mon, 24 Jun 2024 16:42:17 +0800 Subject: [PATCH 1/4] fix: nil pointer when clear simulating bid (#2534) --- miner/bid_simulator.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/miner/bid_simulator.go b/miner/bid_simulator.go index e80dc90b13..1d77308fed 100644 --- a/miner/bid_simulator.go +++ b/miner/bid_simulator.go @@ -419,10 +419,6 @@ func (b *bidSimulator) clearLoop() { b.bestBidMu.Unlock() b.simBidMu.Lock() - if bid, ok := b.simulatingBid[parentHash]; ok { - bid.env.discard() - } - delete(b.simulatingBid, parentHash) for k, v := range b.simulatingBid { if v.bid.BlockNumber <= blockNumber-core.TriesInMemory { v.env.discard() From f7de51f74ef099bda6bf4004224a993514f52a7b Mon Sep 17 00:00:00 2001 From: Roshan <48975233+Pythonberg1997@users.noreply.github.com> Date: Wed, 26 Jun 2024 14:51:52 +0800 Subject: [PATCH 2/4] upgrade: add `HaberFix` hardfork (#2535) --- .../haber_fix/chapel/SlashContract | 1 + .../haber_fix/chapel/ValidatorContract | 1 + .../haber_fix/mainnet/SlashContract | 1 + .../haber_fix/mainnet/ValidatorContract | 1 + core/systemcontracts/haber_fix/types.go | 19 ++++++++ core/systemcontracts/upgrade.go | 47 +++++++++++++++++-- params/config.go | 36 +++++++++++++- 7 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 core/systemcontracts/haber_fix/chapel/SlashContract create mode 100644 core/systemcontracts/haber_fix/chapel/ValidatorContract create mode 100644 core/systemcontracts/haber_fix/mainnet/SlashContract create mode 100644 core/systemcontracts/haber_fix/mainnet/ValidatorContract create mode 100644 core/systemcontracts/haber_fix/types.go diff --git a/core/systemcontracts/haber_fix/chapel/SlashContract b/core/systemcontracts/haber_fix/chapel/SlashContract new file mode 100644 index 0000000000..6e5aeae56e --- /dev/null +++ b/core/systemcontracts/haber_fix/chapel/SlashContract @@ -0,0 +1 @@ +608060405234801561001057600080fd5b506004361061035d5760003560e01c80637942fd05116101d3578063c80d4b8f11610104578063df8079e9116100a2578063f9a2bbc71161007c578063f9a2bbc714610601578063fc3e590814610609578063fc4333cd14610611578063fd6a6879146106195761035d565b8063df8079e9146105e9578063e1c7392a146105f1578063f1fad104146105f95761035d565b8063c96be4cb116100de578063c96be4cb146105b3578063cc844b73146105c6578063dc927faf146105d9578063dcc6f156146105e15761035d565b8063c80d4b8f14610590578063c81b166214610598578063c8509d81146105a05761035d565b8063a1a11bf511610171578063aad560631161014b578063aad5606314610565578063ab51bb961461056d578063ac0af62914610575578063ac4317511461057d5761035d565b8063a1a11bf51461054d578063a78abc1614610555578063aa82dce11461055d5761035d565b8063831d65d1116101ad578063831d65d11461052257806396713da9146105355780639dc092621461053d5780639f804f5f146105455761035d565b80637942fd051461050a5780637e434d54146105125780638256ace61461051a5761035d565b806343756e5c116102ad5780635bfb49901161024b57806370fd5bad1161022557806370fd5bad146104ea578063718a8aa8146104f257806375d47a0a146104fa5780637912a65d146105025761035d565b80635bfb4990146104c757806362b72cf5146104da5780636e47b482146104e25761035d565b806350055f901161028757806350055f90146104a757806351b4dce3146104af57806351e80672146104b7578063567a372d146104bf5761035d565b806343756e5c14610482578063493279b11461048a5780634bf6c8821461049f5761035d565b8063280870281161031a57806335aa2e44116102f457806335aa2e441461043157806337c8dab914610444578063389f4f71146104655780633dffc3871461046d5761035d565b8063280870281461040157806328aa02b1146104095780633306ccca1461041c5761035d565b80630bee7a67146103625780630e2374a5146103805780631182b8751461039557806322d1e80b146103b557806323bac5a2146103ca57806327962118146103ec575b600080fd5b61036a610621565b6040516103779190613d96565b60405180910390f35b610388610626565b6040516103779190613574565b6103a86103a33660046134aa565b61062c565b60405161037791906135ac565b6103bd610692565b60405161037791906135a1565b6103dd6103d83660046131af565b61069b565b60405161037793929190613d7e565b6103ff6103fa366004613307565b6106be565b005b610388610a13565b6103ff6104173660046131e7565b610a19565b610424610a4a565b6040516103779190613d67565b61038861043f36600461347a565b610a50565b6104576104523660046131af565b610a77565b604051610377929190613d70565b610424610ace565b610475610ad4565b6040516103779190613da7565b610388610ad9565b610492610adf565b6040516103779190613d58565b610475610ae4565b610424610ae9565b610388610aef565b610388610af5565b610424610afb565b6103ff6104d53660046131af565b610b01565b610424610c0d565b610388610c13565b610475610c19565b610475610c1e565b610388610c23565b610424610c29565b610475610c2e565b610388610c33565b610457610c39565b6103ff6105303660046134aa565b610c43565b610475610d56565b610388610d5b565b610424610d61565b610388610d67565b6103bd610d6d565b610388610d76565b610388610d7c565b61036a610d82565b610424610d87565b6103ff61058b36600461335e565b610d8c565b610424611328565b61038861132d565b6103ff6105ae3660046134aa565b611333565b6103ff6105c13660046131af565b6113a4565b6103ff6105d43660046133c7565b611815565b610388611df4565b610424611dfa565b610388611dff565b6103ff611e05565b610475611e41565b610388611e46565b610475611e4c565b6103ff611e51565b61038861229a565b606481565b61200181565b606033612000146106585760405162461bcd60e51b815260040161064f90613bfb565b60405180910390fd5b60005460ff1661067a5760405162461bcd60e51b815260040161064f906136a1565b60405162461bcd60e51b815260040161064f90613cec565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b60005460ff166106e05760405162461bcd60e51b815260040161064f906136a1565b6006546106ed5760146006555b6008546106fb576170806008555b81511580159061070b5750805115155b6107275760405162461bcd60e51b815260040161064f90613b59565b60408051600380825260808201909252606091816020015b606081526020019060019003908161073f57905050905061076060616122a0565b8160008151811061076d57fe5b6020026020010181905250610781836122bb565b8160018151811061078e57fe5b60200260200101819052506107a2826122bb565b816002815181106107af57fe5b602002602001018190525060606107c582612311565b60408051603480825260608281019093529293509091602082018180368337019050509050815160346020830182602086016068600019fa61080657600080fd5b506014810151603482015160405163436aa28360e11b8152600090612002906386d5450690610839908690600401613574565b60206040518083038186803b15801561085157600080fd5b505afa158015610865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088991906131cb565b6001600160a01b031614156108b05760405162461bcd60e51b815260040161064f90613671565b43600854820110156108d45760405162461bcd60e51b815260040161064f90613612565b604051631871f7d960e31b81526120029063c38fbec8906108f9908590600401613574565b600060405180830381600087803b15801561091357600080fd5b505af1158015610927573d6000803e3d6000fd5b50506040516335409f7f60e01b815261100092506335409f7f9150610950908590600401613574565b600060405180830381600087803b15801561096a57600080fd5b505af115801561097e573d6000803e3d6000fd5b50506006546040516309a99b4f60e41b815260646110028031909302049350909150639a99b4f0906109b69033908590600401613588565b602060405180830381600087803b1580156109d057600080fd5b505af11580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a089190613492565b505050505050505050565b61200581565b3361100014610a3a5760405162461bcd60e51b815260040161064f906138e4565b610a458383836123a2565b505050565b61708081565b60018181548110610a5d57fe5b6000918252602090912001546001600160a01b0316905081565b600080610a82612f96565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b600181565b61100181565b606181565b600881565b60065481565b61200681565b61200081565b60045481565b3361100014610b225760405162461bcd60e51b815260040161064f906138e4565b60005460ff16610b445760405162461bcd60e51b815260040161064f906136a1565b61200063f7a251d7600b610b5784612580565b60006040518463ffffffff1660e01b8152600401610b7793929190613db5565b600060405180830381600087803b158015610b9157600080fd5b505af1925050508015610ba2575060015b610c0a573d808015610bd0576040519150601f19603f3d011682016040523d82523d6000602084013e610bd5565b606091505b50816001600160a01b0316600080516020613ea0833981519152600083604051610c009291906135bf565b60405180910390a2505b50565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b61200381565b6004546005549091565b3361200014610c645760405162461bcd60e51b815260040161064f90613bfb565b60005460ff16610c865760405162461bcd60e51b815260040161064f906136a1565b610c8e612fb9565b6000610ccf84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061264992505050565b915091508015610d165781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e62996791610d0991613d96565b60405180910390a1610d4f565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e791610d4691613d96565b60405180910390a15b5050505050565b600981565b61100781565b60085481565b61100681565b60005460ff1681565b61200281565b61300081565b600081565b600481565b60005460ff16610dae5760405162461bcd60e51b815260040161064f906136a1565b3361100714610dcf5760405162461bcd60e51b815260040161064f90613a48565b610e3a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b602082015291506126c99050565b15610ed55760208114610e5f5760405162461bcd60e51b815260040161064f90613870565b604080516020601f8401819004810282018101909252828152600091610e9d9185858083850183828082843760009201919091525061272392505050565b905060018110158015610eb1575060055481105b610ecd5760405162461bcd60e51b815260040161064f90613bb6565b6004556112e5565b610f3b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b602082015291506126c99050565b15610fd75760208114610f605760405162461bcd60e51b815260040161064f90613a96565b604080516020601f8401819004810282018101909252828152600091610f9e9185858083850183828082843760009201919091525061272392505050565b90506103e88111158015610fb3575060045481115b610fcf5760405162461bcd60e51b815260040161064f9061375a565b6005556112e5565b61104484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601681527566656c6f6e79536c617368526577617264526174696f60501b602082015291506126c99050565b156110de57602081146110695760405162461bcd60e51b815260040161064f906139d0565b604080516020601f84018190048102820181019092528281526000916110a79185858083850183828082843760009201919091525061272392505050565b9050600a81101580156110ba5750606481105b6110d65760405162461bcd60e51b815260040161064f90613ad8565b6006556112e5565b61115284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c6173680000000000000000602082015291506126c99050565b156111c957602081146111775760405162461bcd60e51b815260040161064f9061378f565b604080516020601f84018190048102820181019092528281526111b3919084848083850183828082843760009201919091525061272892505050565b6007805460ff19169115159190911790556112e5565b61123084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601081526f66656c6f6e79536c61736853636f706560801b602082015291506126c99050565b156112cd57602081146112555760405162461bcd60e51b815260040161064f9061395f565b604080516020601f84018190048102820181019092528281526000916112939185858083850183828082843760009201919091525061272392505050565b905061708081101580156112a95750620d2f0081105b6112c55760405162461bcd60e51b815260040161064f906136d8565b6008556112e5565b60405162461bcd60e51b815260040161064f90613c97565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161131a94939291906135e0565b60405180910390a150505050565b609681565b61100281565b33612000146113545760405162461bcd60e51b815260040161064f90613bfb565b60005460ff166113765760405162461bcd60e51b815260040161064f906136a1565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b3341146113c35760405162461bcd60e51b815260040161064f90613c4a565b60005460ff166113e55760405162461bcd60e51b815260040161064f906136a1565b60035443116114065760405162461bcd60e51b815260040161064f90613d23565b3a156114245760405162461bcd60e51b815260040161064f906139a2565b60405163155853f360e21b8152611000906355614fcc90611449908490600401613574565b60206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149991906132eb565b6114a25761180e565b6114aa612f96565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff16158015928201929092529061150557602081018051600101905261155e565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161157057fe5b0661173c57600060208201526040516335409f7f60e01b8152611000906335409f7f906115a1908590600401613574565b600060405180830381600087803b1580156115bb57600080fd5b505af11580156115cf573d6000803e3d6000fd5b505060405163436aa28360e11b81526000925061200291506386d54506906115fb908690600401613574565b60206040518083038186803b15801561161357600080fd5b505afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b91906131cb565b6001600160a01b03161461166e5761166982826020015160006123a2565b611737565b61200063f7a251d7600b61168185612580565b60006040518463ffffffff1660e01b81526004016116a193929190613db5565b600060405180830381600087803b1580156116bb57600080fd5b505af19250505080156116cc575060015b611737573d8080156116fa576040519150601f19603f3d011682016040523d82523d6000602084013e6116ff565b606091505b50826001600160a01b0316600080516020613ea083398151915283602001518360405161172d9291906135bf565b60405180910390a2505b6117a8565b60045481602001518161174b57fe5b066117a8576040516375abf10160e11b81526110009063eb57e20290611775908590600401613574565b600060405180830381600087803b15801561178f57600080fd5b505af11580156117a3573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166118375760405162461bcd60e51b815260040161064f906136a1565b60075460ff166118595760405162461bcd60e51b815260040161064f9061363c565b6006546118665760146006555b600854611874576170806008555b60085481516040015143910111801561189857504360085482602001516040015101115b6118b45760405162461bcd60e51b815260040161064f90613cbe565b8060200151602001518160000151602001511480156118e25750806020015160600151816000015160600151145b156118ff5760405162461bcd60e51b815260040161064f906138b7565b80516040810151905110801561191e5750602081015160408101519051105b61193a5760405162461bcd60e51b815260040161064f90613839565b60208101515181515110801561195f5750806000015160400151816020015160400151105b8061198a575080515160208201515110801561198a5750806020015160400151816000015160400151105b806119a45750806020015160400151816000015160400151145b6119c05760405162461bcd60e51b815260040161064f90613723565b604080820151905163ea321e4960e01b81526110009163ea321e49916119e991906004016135ac565b60206040518083038186803b158015611a0157600080fd5b505afa158015611a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3991906132eb565b611a555760405162461bcd60e51b815260040161064f90613a19565b611a6781600001518260400151612750565b8015611a805750611a8081602001518260400151612750565b611a9c5760405162461bcd60e51b815260040161064f906137da565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b158015611ada57600080fd5b505afa158015611aee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b169190810190613228565b9150915060005b8151811015611c5357611b47828281518110611b3557fe5b60200260200101518560400151612928565b15611c4b576006546040516309a99b4f60e41b815260646110028031909302049190639a99b4f090611b7f9033908590600401613588565b602060405180830381600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190613492565b506110006001600160a01b03166335409f7f858481518110611bef57fe5b60200260200101516040518263ffffffff1660e01b8152600401611c139190613574565b600060405180830381600087803b158015611c2d57600080fd5b505af1158015611c41573d6000803e3d6000fd5b5050505050611c53565b600101611b1d565b5060408084015190516317b4f35360e01b8152600091612002916317b4f35391611c7f916004016135ac565b60206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906131cb565b6001600160a01b031614611d3d576040808401519051630e9fbf5160e01b815261200291630e9fbf5191611d0691906004016135ac565b600060405180830381600087803b158015611d2057600080fd5b505af1158015611d34573d6000803e3d6000fd5b50505050610a45565b6120006001600160a01b031663f7a251d7600b611d5d866040015161298c565b60006040518463ffffffff1660e01b8152600401611d7d93929190613db5565b600060405180830381600087803b158015611d9757600080fd5b505af1158015611dab573d6000803e3d6000fd5b505050506000611dc0846040015160006129c7565b60405190915081907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a250505050565b61100381565b601481565b61200481565b60005460ff1615611e285760405162461bcd60e51b815260040161064f90613b22565b603260045560966005556000805460ff19166001179055565b601181565b61100081565b600381565b3361100014611e725760405162461bcd60e51b815260040161064f906138e4565b60005460ff16611e945760405162461bcd60e51b815260040161064f906136a1565b600154611ea057612298565b600154600090600019015b80821161226c576000805b82841015611fcf57611ec6612f96565b6002600060018781548110611ed757fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611fb957600460055481611f4457fe5b04816020015103816020018181525050806002600060018881548110611f6657fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611fc3565b6001925050611fcf565b50836001019350611eb6565b82841161216657611fde612f96565b6002600060018681548110611fef57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff1615159082015260055490915060049004816020015111156120d75760046005548161205c57fe5b0481602001510381602001818152505080600260006001878154811061207e57fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff191691151591909117905591506121669050565b60026000600186815481106120e857fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff1916905580548061212c57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055836121595750612166565b5060001990920191611fcf565b8180156121705750805b1561224f57600260006001868154811061218657fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff191690558054849081106121cd57fe5b600091825260209091200154600180546001600160a01b0390921691869081106121f357fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600180548061222c57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b8261225b57505061226c565b505060019091019060001901611eab565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60606122b36122ae836129e3565b6122bb565b90505b919050565b6060815160011480156122ed5750607f60f81b826000815181106122db57fe5b01602001516001600160f81b03191611155b156122f95750806122b6565b6122b361230b8351608060ff16612ac9565b83612b9b565b606081516000141561233257506040805160008152602081019091526122b6565b60608260008151811061234157fe5b602002602001015190506000600190505b8351811015612382576123788285838151811061236b57fe5b6020026020010151612b9b565b9150600101612352565b5061239b612395825160c060ff16612ac9565b82612b9b565b9392505050565b80156123cd576040516375cc7d8960e01b8152612002906375cc7d8990611d06908690600401613574565b6040516375cc7d8960e01b8152612002906375cc7d89906123f2908690600401613574565b600060405180830381600087803b15801561240c57600080fd5b505af192505050801561241d575060015b610a45576040516000815260443d1015612439575060006124d6565b60046000803e60005160e01c6308c379a0811461245a5760009150506124d6565b60043d036004833e81513d602482011167ffffffffffffffff82111715612486576000925050506124d6565b808301805167ffffffffffffffff8111156124a85760009450505050506124d6565b8060208301013d86018111156124c6576000955050505050506124d6565b601f01601f191660405250925050505b806124e15750612518565b836001600160a01b0316600080516020613ea0833981519152848360405161250a9291906135bf565b60405180910390a25061257b565b3d808015612542576040519150601f19603f3d011682016040523d82523d6000602084013e612547565b606091505b50836001600160a01b0316600080516020613ea083398151915284836040516125719291906135bf565b60405180910390a2505b610a45565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161259b5790505090506125c4836001600160a01b0316612c18565b816000815181106125d157fe5b60200260200101819052506125e5436122a0565b816001815181106125f257fe5b602090810291909101015261260760616122a0565b8160028151811061261457fe5b6020026020010181905250612628426122a0565b8160038151811061263557fe5b602002602001018190525061239b81612311565b612651612fb9565b600061265b612fb9565b612663612fcb565b61267461266f86612c3b565b612c60565b90506000805b61268383612caa565b156126bc57806126af5761269e61269984612ccb565b612d19565b63ffffffff168452600191506126b4565b6126bc565b60010161267a565b5091935090915050915091565b6000816040516020016126dc9190613558565b60405160208183030381529060405280519060200120836040516020016127039190613558565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615612742576001915081612748565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b606081526020019060019003908161276c5750506040805160208082528183019092529192506060919080820181803683370190505090506127b185600001516122a0565b826000815181106127be57fe5b60200260200101819052506127d96020866020015183612d9b565b6127e2816122bb565b826001815181106127ef57fe5b602002602001018190525061280785604001516122a0565b8260028151811061281457fe5b602002602001018190525061282f6020866060015183612d9b565b612838816122bb565b8260038151811061284557fe5b602002602001018190525061286b602061285e84612311565b8051906020012083612d9b565b6040805160b080825260e0820190925260609160208201818036833701905050905061289b818360006020612dab565b6128ad81876080015160206060612dab565b6128bb818660806030612dab565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6128f857600080fd5b506001612906826000612dfe565b60ff161461291b57600094505050505061271d565b5060019695505050505050565b8151815160009160019181148083146129445760009250612982565b600160208701838101602088015b60028483851001141561297d5780518351146129715760009650600093505b60209283019201612952565b505050505b5090949350505050565b60408051600480825260a08201909252606091829190816020015b60608152602001906001900390816129a75790505090506125c4836122bb565b600081602001835110156129da57600080fd5b50016020015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416612a2757506018612a4b565b6fffffffffffffffffffffffffffffffff198416612a4757506010612a4b565b5060005b6020811015612a8157818181518110612a6057fe5b01602001516001600160f81b03191615612a7957612a81565b600101612a4b565b60008160200390506060816040519080825280601f01601f191660200182016040528015612ab6576020820181803683370190505b5080830196909652508452509192915050565b6060680100000000000000008310612af35760405162461bcd60e51b815260040161064f90613811565b60408051600180825281830190925260609160208201818036833701905050905060378411612b4d5782840160f81b81600081518110612b2f57fe5b60200101906001600160f81b031916908160001a905350905061271d565b6060612b58856129e3565b90508381510160370160f81b82600081518110612b7157fe5b60200101906001600160f81b031916908160001a905350612b928282612b9b565b95945050505050565b6060806040519050835180825260208201818101602087015b81831015612bcc578051835260209283019201612bb4565b50855184518101855292509050808201602086015b81831015612bf9578051835260209283019201612be1565b508651929092011591909101601f01601f191660405250905092915050565b60408051600560a21b831860148201526034810190915260609061239b816122bb565b612c43612feb565b506040805180820190915281518152602082810190820152919050565b612c68612fcb565b612c7182612e1a565b612c7a57600080fd5b6000612c898360200151612e54565b60208085015160408051808201909152868152920190820152915050919050565b6000612cb4612feb565b505080518051602091820151919092015191011190565b612cd3612feb565b612cdc82612caa565b612ce557600080fd5b60208201516000612cf582612eb7565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612d2e57508151602110155b612d3757600080fd5b6000612d468360200151612e54565b90508083600001511015612d6c5760405162461bcd60e51b815260040161064f90613b7f565b825160208085015183018051928490039291831015612d9257826020036101000a820491505b50949350505050565b9091018181526020918201910152565b60005b81811015610d4f57838181518110612dc257fe5b602001015160f81c60f81b858480600101955081518110612ddf57fe5b60200101906001600160f81b031916908160001a905350600101612dae565b60008160010183511015612e1157600080fd5b50016001015190565b8051600090612e2b575060006122b6565b6020820151805160001a9060c0821015612e4a576000925050506122b6565b5060019392505050565b8051600090811a6080811015612e6e5760009150506122b6565b60b8811080612e89575060c08110801590612e89575060f881105b15612e985760019150506122b6565b60c0811015612eac5760b5190190506122b6565b60f5190190506122b6565b80516000908190811a6080811015612ed25760019150612f8f565b60b8811015612ee757607e1981019150612f8f565b60c0811015612f3857600060b78203600186019550806020036101000a865104915060018101820193505080831015612f325760405162461bcd60e51b815260040161064f90613934565b50612f8f565b60f8811015612f4d5760be1981019150612f8f565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156127485760405162461bcd60e51b815260040161064f90613934565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b6040518060400160405280612fde612feb565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f830112613015578081fd5b815161302861302382613e08565b613de1565b818152915060208083019084810160005b8481101561309e578151870188603f82011261305457600080fd5b8381015161306461302382613e28565b81815260408b8184860101111561307a57600080fd5b61308983888401838701613e4c565b50865250509282019290820190600101613039565b505050505092915050565b60008083601f8401126130ba578182fd5b50813567ffffffffffffffff8111156130d1578182fd5b6020830191508360208285010111156130e957600080fd5b9250929050565b600082601f830112613100578081fd5b813561310e61302382613e28565b915080825283602082850101111561312557600080fd5b8060208401602084013760009082016020015292915050565b600060a0828403121561314f578081fd5b61315960a0613de1565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff81111561319757600080fd5b6131a3848285016130f0565b60808301525092915050565b6000602082840312156131c0578081fd5b813561239b81613e7c565b6000602082840312156131dc578081fd5b815161239b81613e7c565b6000806000606084860312156131fb578182fd5b833561320681613e7c565b925060208401359150604084013561321d81613e91565b809150509250925092565b6000806040838503121561323a578182fd5b825167ffffffffffffffff80821115613251578384fd5b81850186601f820112613262578485fd5b8051925061327261302384613e08565b80848252602080830192508084018a828389028701011115613292578889fd5b8894505b868510156132bd5780516132a981613e7c565b845260019490940193928101928101613296565b5088015190965093505050808211156132d4578283fd5b506132e185828601613005565b9150509250929050565b6000602082840312156132fc578081fd5b815161239b81613e91565b60008060408385031215613319578182fd5b823567ffffffffffffffff80821115613330578384fd5b61333c868387016130f0565b93506020850135915080821115613351578283fd5b506132e1858286016130f0565b60008060008060408587031215613373578182fd5b843567ffffffffffffffff8082111561338a578384fd5b613396888389016130a9565b909650945060208701359150808211156133ae578384fd5b506133bb878288016130a9565b95989497509550505050565b6000602082840312156133d8578081fd5b813567ffffffffffffffff808211156133ef578283fd5b81840160608187031215613401578384fd5b61340b6060613de1565b925080358281111561341b578485fd5b6134278782840161313e565b84525060208101358281111561343b578485fd5b6134478782840161313e565b60208501525060408101358281111561345e578485fd5b61346a878284016130f0565b6040850152509195945050505050565b60006020828403121561348b578081fd5b5035919050565b6000602082840312156134a3578081fd5b5051919050565b6000806000604084860312156134be578081fd5b833560ff811681146134ce578182fd5b9250602084013567ffffffffffffffff8111156134e9578182fd5b6134f5868287016130a9565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452613544816020860160208601613e4c565b601f01601f19169290920160200192915050565b6000825161356a818460208701613e4c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60006020825261239b602083018461352c565b6000838252604060208301526135d8604083018461352c565b949350505050565b6000604082526135f4604083018688613502565b8281036020840152613607818587613502565b979650505050505050565b60208082526010908201526f195d9a59195b98d9481d1bdbc81bdb1960821b604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b6020808252601690820152751d985b1a59185d1bdc881b9bdd081b5a59dc985d195960521b604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f6c656e677468206f662066656c6f6e79536c61736853636f7065206d69736d616040820152620e8c6d60eb1b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b60208082526029908201527f6c656e677468206f662066656c6f6e79536c617368526577617264526174696f604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b6020808252602a908201527f7468652066656c6f6e7920736c6173682072657761726420726174696f206f7560408201526974206f662072616e676560b01b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252600c908201526b32b6b83a3c903432b0b232b960a11b604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260606020830152613dd1606083018561352c565b9050826040830152949350505050565b60405181810167ffffffffffffffff81118282101715613e0057600080fd5b604052919050565b600067ffffffffffffffff821115613e1e578081fd5b5060209081020190565b600067ffffffffffffffff821115613e3e578081fd5b50601f01601f191660200190565b60005b83811015613e67578181015183820152602001613e4f565b83811115613e76576000848401525b50505050565b6001600160a01b0381168114610c0a57600080fd5b8015158114610c0a57600080fdfed7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1ca164736f6c6343000604000a diff --git a/core/systemcontracts/haber_fix/chapel/ValidatorContract b/core/systemcontracts/haber_fix/chapel/ValidatorContract new file mode 100644 index 0000000000..31971ad6f6 --- /dev/null +++ b/core/systemcontracts/haber_fix/chapel/ValidatorContract @@ -0,0 +1 @@ +6080604052600436106104fb5760003560e01c806388b32f111161028c578063c6d339451161015a578063e40716a1116100cc578063f92eb86b11610085578063f92eb86b14610d2d578063f9a2bbc714610d42578063fc3e590814610d57578063fccc281314610d6c578063fd4ad81f14610d81578063fd6a687914610db057610502565b8063e40716a114610c9b578063ea321e4914610cb0578063eb57e20214610cd0578063eda5868c14610cf0578063f1fad10414610d05578063f340fa0114610d1a57610502565b8063d86222d51161011e578063d86222d514610c1d578063daacdb6614610c32578063dc927faf14610c47578063df8079e914610c5c578063e086c7b114610c71578063e1c7392a14610c8657610502565b8063c6d3394514610bbe578063c81b166214610bd3578063c8509d811461098d578063ce910b0c14610be8578063d68fb56a14610c0857610502565b8063a78abc16116101fe578063ad3c9da6116101b7578063ad3c9da614610b3d578063aef198a914610b5d578063b7ab4db514610b72578063b8cf4ef114610b94578063bf9f4995146106fe578063c466689d14610ba957610502565b8063a78abc1614610ab4578063aa82dce114610ac9578063aad5606314610ade578063aaf5eb6814610af3578063ab51bb9614610b08578063ac43175114610b1d57610502565b806396713da91161025057806396713da914610a365780639dc0926214610a4b5780639fe0f81614610a60578063a0dc275814610a75578063a1a11bf514610a8a578063a5422d5c14610a9f57610502565b806388b32f11146109c25780638a7beb01146109d75780638b5ad0c9146109ec5780638d19a41014610a015780639369d7de14610a2157610502565b806351b4dce3116103c957806370fd5bad1161033b5780637e434d54116102f45780637e434d541461094e57806381650b6214610963578063820dcaa814610978578063831d65d11461098d578063853230aa1461090f57806386249882146109ad57610502565b806370fd5bad146108d0578063718a8aa8146108e557806375d47a0a146108fa57806378dfed4a1461090f5780637942fd05146109245780637a84ca2a1461093957610502565b80635d77156c1161038d5780635d77156c1461082a5780635de1e22c1461083f57806360eba4fe1461085457806362b72cf5146108745780636969a25c146108895780636e47b482146108bb57610502565b806351b4dce3146107ab57806351e80672146107c057806355614fcc146107d5578063565c56b3146107f55780635667515a1461081557610502565b8063300c35671161046d57806343756e5c1161042657806343756e5c1461072057806345cf9daf14610735578063493279b11461074a5780634bf6c8821461076c5780634df6e0c3146107815780635192c82c1461079657610502565b8063300c35671461065b578063321d398a1461067b5780633365af3a1461069b57806335409f7f146106bb5780633b071dcc146106db5780633dffc387146106fe57610502565b8063152ad3b8116104bf578063152ad3b8146105ba5780631e4c1524146105dc5780631ff18069146105fc578063219f22d51461061157806328087028146106265780632a0ffb6e1461063b57610502565b806304c4fec61461050757806307a568471461051e5780630bee7a67146105495780630e2374a51461056b5780631182b8751461058d57610502565b3661050257005b600080fd5b34801561051357600080fd5b5061051c610dc5565b005b34801561052a57600080fd5b50610533610e39565b6040516105409190618f10565b60405180910390f35b34801561055557600080fd5b5061055e610e3f565b6040516105409190618f3a565b34801561057757600080fd5b50610580610e44565b6040516105409190618200565b34801561059957600080fd5b506105ad6105a83660046180e6565b610e4a565b60405161054091906183b6565b3480156105c657600080fd5b506105cf611167565b60405161054091906183ab565b3480156105e857600080fd5b5061051c6105f7366004617ef4565b611170565b34801561060857600080fd5b50610533611846565b34801561061d57600080fd5b5061055e61184c565b34801561063257600080fd5b50610580611851565b34801561064757600080fd5b5061051c610656366004617e54565b611857565b34801561066757600080fd5b5061051c610676366004617e8c565b611904565b34801561068757600080fd5b506105cf610696366004618093565b611c4d565b3480156106a757600080fd5b506105cf6106b6366004618093565b611d1c565b3480156106c757600080fd5b5061051c6106d6366004617e54565b611dcd565b3480156106e757600080fd5b506106f0611f32565b6040516105409291906182c1565b34801561070a57600080fd5b5061071361220e565b6040516105409190618f4b565b34801561072c57600080fd5b50610580612213565b34801561074157600080fd5b50610533612219565b34801561075657600080fd5b5061075f61221f565b6040516105409190618f01565b34801561077857600080fd5b50610713612224565b34801561078d57600080fd5b506106f0612229565b3480156107a257600080fd5b506105336123b5565b3480156107b757600080fd5b506105806123bb565b3480156107cc57600080fd5b506105806123c1565b3480156107e157600080fd5b506105cf6107f0366004617e54565b6123c7565b34801561080157600080fd5b50610533610810366004617e54565b6123fc565b34801561082157600080fd5b5061071361244d565b34801561083657600080fd5b5061055e612452565b34801561084b57600080fd5b50610533612457565b34801561086057600080fd5b506105ad61086f366004618093565b61245d565b34801561088057600080fd5b50610533612503565b34801561089557600080fd5b506108a96108a4366004618093565b612509565b6040516105409695949392919061822d565b3480156108c757600080fd5b5061058061256d565b3480156108dc57600080fd5b50610713612573565b3480156108f157600080fd5b50610713612578565b34801561090657600080fd5b5061058061257d565b34801561091b57600080fd5b50610533612583565b34801561093057600080fd5b50610713612589565b34801561094557600080fd5b5061053361258e565b34801561095a57600080fd5b50610580612594565b34801561096f57600080fd5b5061055e61259a565b34801561098457600080fd5b5061053361259f565b34801561099957600080fd5b5061051c6109a83660046180e6565b6125a5565b3480156109b957600080fd5b50610533612606565b3480156109ce57600080fd5b5061053361260c565b3480156109e357600080fd5b506105cf612612565b3480156109f857600080fd5b5061053361261b565b348015610a0d57600080fd5b50610533610a1c366004617e54565b612621565b348015610a2d57600080fd5b5061051c612661565b348015610a4257600080fd5b50610713612775565b348015610a5757600080fd5b5061058061277a565b348015610a6c57600080fd5b50610533612780565b348015610a8157600080fd5b50610533612785565b348015610a9657600080fd5b5061058061278a565b348015610aab57600080fd5b506105ad612790565b348015610ac057600080fd5b506105cf6127af565b348015610ad557600080fd5b506105806127b8565b348015610aea57600080fd5b506105806127be565b348015610aff57600080fd5b506105336127c4565b348015610b1457600080fd5b5061055e61244d565b348015610b2957600080fd5b5061051c610b38366004618037565b6127cd565b348015610b4957600080fd5b50610533610b58366004617e54565b613086565b348015610b6957600080fd5b50610533613098565b348015610b7e57600080fd5b50610b876130a5565b60405161054091906182ae565b348015610ba057600080fd5b50610533613191565b348015610bb557600080fd5b50610533613196565b348015610bca57600080fd5b50610533612573565b348015610bdf57600080fd5b5061058061319c565b348015610bf457600080fd5b506105ad610c03366004618093565b6131a2565b348015610c1457600080fd5b506105336131af565b348015610c2957600080fd5b506105336131ee565b348015610c3e57600080fd5b506105336131fa565b348015610c5357600080fd5b50610580613200565b348015610c6857600080fd5b50610580613206565b348015610c7d57600080fd5b50610533610e3f565b348015610c9257600080fd5b5061051c61320c565b348015610ca757600080fd5b506105336133bb565b348015610cbc57600080fd5b506105cf610ccb366004617ff8565b6133c1565b348015610cdc57600080fd5b5061051c610ceb366004617e54565b613547565b348015610cfc57600080fd5b5061055e61364b565b348015610d1157600080fd5b50610713613650565b61051c610d28366004617e54565b613655565b348015610d3957600080fd5b506105336139d4565b348015610d4e57600080fd5b506105806139da565b348015610d6357600080fd5b50610713612780565b348015610d7857600080fd5b506105806139e0565b348015610d8d57600080fd5b50610da1610d9c366004618093565b6139e6565b60405161054093929190618f19565b348015610dbc57600080fd5b50610580613aa8565b6000610dd033612621565b9050600b8181548110610ddf57fe5b600091825260209091206001601690920201015460ff16610e1b5760405162461bcd60e51b8152600401610e1290618b1c565b60405180910390fd5b6000610e256131af565b9050610e343383836001613aae565b505050565b60095481565b606481565b61200181565b60005460609060ff16610e6f5760405162461bcd60e51b8152600401610e12906185dd565b3361200014610e905760405162461bcd60e51b8152600401610e1290618d1d565b600b54610f4e57610e9f617a00565b60015460005b81811015610f4a57600b805460018101825560009190915283516000805160206191c883398151915260169092029182019081556020808601516000805160206192088339815191528401805460ff1916911515919091179055604086015180518794610f26936000805160206191e8833981519152909101920190617a2f565b506060820151610f3c9060038301906013617aa9565b505050806001019050610ea5565b5050505b610f56617ad6565b6000610f9785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613d8392505050565b9150915080610fb357610faa6064613f3f565b92505050611160565b815160009060ff16610fd857610fd183602001518460400151613fa0565b905061112c565b825160ff16600114156111285782602001515160011461101d576000805160206191a883398151915260405161100d906189d5565b60405180910390a1506067611123565b6000836020015160008151811061103057fe5b602090810291909101810151516001600160a01b03811660009081526004909252604090912054909150801580611091575060018082038154811061107157fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b156110cf576040516001600160a01b038316907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a261111c565b60006110de8360018403615162565b90508061111a576040516001600160a01b038416907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a25b505b6000925050505b61112c565b5060655b63ffffffff811661115157505060408051600081526020810190915291506111609050565b61115a81613f3f565b93505050505b9392505050565b60075460ff1681565b33411461118f5760405162461bcd60e51b8152600401610e1290618d6c565b3a156111ad5760405162461bcd60e51b8152600401610e1290618a5b565b82516040805182815260208084028201019091526060908280156111eb57816020015b6111d8617afa565b8152602001906001900390816111d05790505b50905060005b82811015611295576040518060c0016040528087838151811061121057fe5b60200260200101516001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200186838151811061125257fe5b60200260200101516001600160401b03168152602001600015158152602001600081525082828151811061128257fe5b60209081029190910101526001016111f1565b5060405163d31f968d60e01b81526120009063d31f968d906112c09061100090600890600401618292565b60206040518083038186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190617fd8565b15611633578051601554818111156113b257815b818110156113b057601580548061133757fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055601680548061138a57fe5b6001900381819060005260206000200160006113a69190617b2f565b9055600101611324565b505b60005b828110156115f2578181106114da5760158482815181106113d257fe5b602090810291909101810151825460018181018555600094855293839020825160049092020180546001600160a01b039283166001600160a01b0319918216178255938301519481018054958316958516959095179094556040820151600285018054606085015160808601511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590961692909716919091179290921692909217169290921790915560a0015160039091015585516016908790839081106114a257fe5b602090810291909101810151825460018101845560009384529282902081516114d49491909101929190910190617a2f565b506115ea565b8381815181106114e657fe5b6020026020010151601582815481106114fb57fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015585518690829081106115b657fe5b6020026020010151601682815481106115cb57fe5b9060005260206000200190805190602001906115e8929190617a2f565b505b6001016113b5565b507fb8e726330a0dad1cf3d04e925663b17e391f1ed547d79b7f4e5f344119b44246826040516116229190618f10565b60405180910390a150505050610e34565b6060806116408386615525565b9150915060005b6001548110156117365760006001828154811061166057fe5b90600052602060002090600402016003015490508060001461172d5760006001838154811061168b57fe5b9060005260206000209060040201600301819055506120026001600160a01b031663092193ab82600185815481106116bf57fe5b60009182526020909120600491820201546040516001600160e01b031960e086901b1681526116fa926001600160a01b039092169101618200565b6000604051808303818588803b15801561171357600080fd5b505af1158015611727573d6000803e3d6000fd5b50505050505b50600101611647565b5047156117a4577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d4760405161176c9190618f10565b60405180910390a1604051611002904780156108fc02916000818181858888f193505050501580156117a2573d6000803e3d6000fd5b505b600060038190556005558151156117bf576117bf8282615a0f565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117fc57600080fd5b505af1158015611810573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a150505050505050565b60035481565b606881565b61200581565b33612002146118785760405162461bcd60e51b8152600401610e1290618eca565b60005b60155481101561190057816001600160a01b03166015828154811061189c57fe5b60009182526020909120600490910201546001600160a01b031614156118f8576001601582815481106118cb57fe5b9060005260206000209060040201600201601c6101000a81548160ff021916908315150217905550611900565b60010161187b565b5050565b3341146119235760405162461bcd60e51b8152600401610e1290618d6c565b60105443116119445760405162461bcd60e51b8152600401610e1290618770565b3a156119625760405162461bcd60e51b8152600401610e1290618a5b565b60005460ff166119845760405162461bcd60e51b8152600401610e12906185dd565b60006110023168056bc75e2d631000008111156119bb576119b48168056bc75e2d6310000063ffffffff6161fe16565b91506119c2565b5050611c43565b6040516309a99b4f60e41b815261100290639a99b4f0906119e99030908690600401618214565b602060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b91906180ab565b915081611a49575050611c43565b6000805b84811015611a7757858582818110611a6157fe5b9050602002013582019150806001019050611a4d565b5080611a8557505050611c43565b6000806000805b89811015611c3b5784898983818110611aa157fe5b90506020020135880281611ab157fe5b0493508a8a82818110611ac057fe5b9050602002016020810190611ad59190617e54565b6001600160a01b03811660009081526004602052604090205490935091508115611bf1576000600180840381548110611b0a57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615611b7757836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8586604051611b6a9190618f10565b60405180910390a2611beb565b600354611b8a908663ffffffff61624016565b6003908155810154611ba2908663ffffffff61624016565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611be2908890618f10565b60405180910390a25b50611c33565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8585604051611c2a9190618f10565b60405180910390a25b600101611a8c565b505050505050505b5050436010555050565b6001546000908210611c6157506000611d17565b60006001600160a01b031660018381548110611c7957fe5b60009182526020909120600490910201546001600160a01b03161480611ca957506008541580611ca95750600a54155b80611cb8575060085460095410155b80611cc95750611cc782611d1c565b155b80611cf257506000600b8381548110611cde57fe5b906000526020600020906016020160000154115b80611d0657506001611d026130a5565b5111155b15611d1357506000611d17565b5060015b919050565b6001546000908210611d3057506000611d17565b600b548210611d6d5760018281548110611d4657fe5b9060005260206000209060040201600201601c9054906101000a900460ff16159050611d17565b60018281548110611d7a57fe5b9060005260206000209060040201600201601c9054906101000a900460ff16158015611dc75750600b8281548110611dae57fe5b600091825260209091206001601690920201015460ff16155b92915050565b600b54611e8b57611ddc617a00565b60015460005b81811015611e8757600b805460018101825560009190915283516000805160206191c883398151915260169092029182019081556020808601516000805160206192088339815191528401805460ff1916911515919091179055604086015180518794611e63936000805160206191e8833981519152909101920190617a2f565b506060820151611e799060038301906013617aa9565b505050806001019050611de2565b5050505b336110011480611e9c575033612002145b611eb85760405162461bcd60e51b8152600401610e1290618614565b6001600160a01b03811660009081526004602052604090205480611edc5750611f2f565b6001810390506000600b8281548110611ef157fe5b600091825260209091206001601690920201015460ff169050611f148383615162565b8015611f1d5750805b15610e34576009805460001901905550505b50565b60015460609081906000805b82811015611f855760018181548110611f5357fe5b9060005260206000209060040201600201601c9054906101000a900460ff16611f7d576001909101905b600101611f3e565b50606081604051908082528060200260200182016040528015611fb2578160200160208202803683370190505b509050606082604051908082528060200260200182016040528015611feb57816020015b6060815260200190600190039081611fd65790505b50600b54600094509091508414156121665760005b84811015612160576001818154811061201557fe5b9060005260206000209060040201600201601c9054906101000a900460ff16612158576001818154811061204557fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061207057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b818154811061209d57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156121355780601f1061210a57610100808354040283529160200191612135565b820191906000526020600020905b81548152906001019060200180831161211857829003601f168201915b505050505082858151811061214657fe5b60209081029190910101526001909301925b600101612000565b50612202565b60005b84811015612200576001818154811061217e57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166121f857600181815481106121ae57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106121d957fe5b6001600160a01b03909216602092830291909101909101526001909301925b600101612169565b505b909450925050505b9091565b600181565b61100181565b60085481565b606181565b600881565b6060806000600e549050600080600c5411612245576015612249565b600c545b905060606122556130a5565b9050606061226282616265565b90508282511161227957909450925061220a915050565b8383835103101561228b578282510393505b83156122c15760c843046122a783838388880360008a8a6163d3565b6122bf8383838888038989038a8b8b8b5103016163d3565b505b6060836040519080825280602002602001820160405280156122ed578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561232657816020015b60608152602001906001900390816123115790505b50905060005b858110156123a75784818151811061234057fe5b602002602001015183828151811061235457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061238057fe5b602002602001015182828151811061239457fe5b602090810291909101015260010161232c565b509096509450505050509091565b60065481565b61200681565b61200081565b6001600160a01b038116600090815260046020526040812054806123ef576000915050611d17565b6000190161116081611d1c565b6001600160a01b03811660009081526004602052604081205480612424576000915050611d17565b60018082038154811061243357fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b6012818154811061246a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152935090918301828280156124fb5780601f106124d0576101008083540402835291602001916124fb565b820191906000526020600020905b8154815290600101906020018083116124de57829003601f168201915b505050505081565b60105481565b6001818154811061251657fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b61200381565b606681565b61271081565b33612000146125c65760405162461bcd60e51b8152600401610e1290618d1d565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f389021016058383836040516125f993929190618f59565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b038116600090815260046020526040812054806126575760405162461bcd60e51b8152600401610e1290618ca5565b6000190192915050565b600b5461271f57612670617a00565b60015460005b8181101561271b57600b805460018101825560009190915283516000805160206191c883398151915260169092029182019081556020808601516000805160206192088339815191528401805460ff19169115159190911790556040860151805187946126f7936000805160206191e8833981519152909101920190617a2f565b50606082015161270d9060038301906013617aa9565b505050806001019050612676565b5050505b60085461272c5760036008555b600a54612739576002600a555b600061274433612621565b905061274f81611c4d565b61276b5760405162461bcd60e51b8152600401610e1290618992565b611f2f338261652a565b600981565b61100781565b600381565b60c881565b61100681565b604051806101e001604052806101ab8152602001618ffd6101ab913981565b60005460ff1681565b61200281565b61300081565b6402540be40081565b60005460ff166127ef5760405162461bcd60e51b8152600401610e12906185dd565b33611007146128105760405162461bcd60e51b8152600401610e1290618a89565b61287a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506165c29050565b15612917576020811461289f5760405162461bcd60e51b8152600401610e1290618c5f565b604080516020601f84018190048102820181019092528281526000916128dd9185858083850183828082843760009201919091525061661b92505050565b9050606481101580156128f35750620186a08111155b61290f5760405162461bcd60e51b8152600401610e1290618882565b600255613043565b61297784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506165c29050565b15612a1a576020811461299c5760405162461bcd60e51b8152600401610e12906183fb565b604080516020601f84018190048102820181019092528281526000916129da9185858083850183828082843760009201919091525061661b92505050565b90506127106129f4600f548361624090919063ffffffff16565b1115612a125760405162461bcd60e51b8152600401610e1290618432565b600655613043565b612a8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506165c29050565b15612b1e5760208114612aa95760405162461bcd60e51b8152600401610e129061849a565b604080516020601f8401819004810282018101909252828152600091612ae79185858083850183828082843760009201919091525061661b92505050565b600c5490915080612af6575060155b808210612b155760405162461bcd60e51b8152600401610e12906187da565b50600855613043565b612b8784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506165c29050565b15612c205760208114612bac5760405162461bcd60e51b8152600401610e1290618563565b604080516020601f8401819004810282018101909252828152600091612bea9185858083850183828082843760009201919091525061661b92505050565b9050600081118015612bfc5750600a81105b612c185760405162461bcd60e51b8152600401610e1290618dfd565b600a55613043565b612c9484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506165c29050565b15612d235760208114612cb95760405162461bcd60e51b8152600401610e1290618517565b604080516020601f8401819004810282018101909252828152600091612cf79185858083850183828082843760009201919091525061661b92505050565b9050600d54811115612d1b5760405162461bcd60e51b8152600401610e12906188f8565b600e55613043565b612d8c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506165c29050565b15612e0e5760208114612db15760405162461bcd60e51b8152600401610e1290618ad7565b604080516020601f8401819004810282018101909252828152600091612def9185858083850183828082843760009201919091525061661b92505050565b600d819055600e54909150811015612e0857600d54600e555b50613043565b612e7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506165c29050565b15612f205760208114612e975760405162461bcd60e51b8152600401610e12906185a8565b604080516020601f8401819004810282018101909252828152600091612ed59185858083850183828082843760009201919091525061661b92505050565b905060008111612ef75760405162461bcd60e51b8152600401610e1290618682565b6064811115612f185760405162461bcd60e51b8152600401610e12906186ca565b600c55613043565b612f8884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506165c29050565b1561302b5760208114612fad5760405162461bcd60e51b8152600401610e1290618db9565b604080516020601f8401819004810282018101909252828152600091612feb9185858083850183828082843760009201919091525061661b92505050565b90506127106130056006548361624090919063ffffffff16565b11156130235760405162461bcd60e51b8152600401610e1290618bc0565b600f55613043565b60405162461bcd60e51b8152600401610e1290618e5a565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161307894939291906183c9565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156130d4576130c081611d1c565b156130cc578160010191505b6001016130af565b50606081604051908082528060200260200182016040528015613101578160200160208202803683370190505b5090506000915060005b838110156131885761311c81611d1c565b15613180576001818154811061312e57fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061315957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b60010161310b565b50925050505b90565b601581565b61027181565b61100281565b6013818154811061246a57fe5b60006131b96130a5565b519050600080600c54116131ce5760156131d2565b600c545b9050808211156131e0578091505b816131ea57600191505b5090565b67016345785d8a000081565b60055481565b61100381565b61200481565b60005460ff161561322f5760405162461bcd60e51b8152600401610e1290618b89565b613237617ad6565b600061325d604051806101e001604052806101ab8152602001618ffd6101ab9139613d83565b915091508061327e5760405162461bcd60e51b8152600401610e1290618cdc565b60005b8260200151518110156133a3576001836020015182815181106132a057fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061337657fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101613281565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b818110156134ca576134b285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060138054909250859150811061341a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156134a85780601f1061347d576101008083540402835291602001916134a8565b820191906000526020600020905b81548152906001019060200180831161348b57829003601f168201915b5050505050616620565b156134c257600192505050611dc7565b6001016133c9565b5060125460005b8181101561353b5761352286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060128054909250859150811061341a57fe5b156135335760019350505050611dc7565b6001016134d1565b50600095945050505050565b33611001146135685760405162461bcd60e51b8152600401610e1290618e81565b600b5461362657613577617a00565b60015460005b8181101561362257600b805460018101825560009190915283516000805160206191c883398151915260169092029182019081556020808601516000805160206192088339815191528401805460ff19169115159190911790556040860151805187946135fe936000805160206191e8833981519152909101920190617a2f565b5060608201516136149060038301906013617aa9565b50505080600101905061357d565b5050505b600061363182616684565b905061363c81611c4d565b1561190057611900828261652a565b606581565b601181565b3341146136745760405162461bcd60e51b8152600401610e1290618d6c565b60005460ff166136965760405162461bcd60e51b8152600401610e12906185dd565b600034116136b65760405162461bcd60e51b8152600401610e12906188c9565b3a156136d45760405162461bcd60e51b8152600401610e1290618a5b565b6001600160a01b03811660009081526004602052604090205460145434919060ff1661371457610271600f556103e86006556014805460ff191660011790555b60008211801561372657506000600f54115b156137d8576000613754612710613748600f543461680790919063ffffffff16565b9063ffffffff61684116565b905080156137d6576040516110029082156108fc029083906000818181858888f1935050505015801561378b573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d816040516137bb9190618f10565b60405180910390a16137d3838263ffffffff6161fe16565b92505b505b6000821180156137ea57506000600654115b1561389057600061380c6127106137486006543461680790919063ffffffff16565b9050801561388e5760405161dead9082156108fc029083906000818181858888f19350505050158015613843573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee5816040516138739190618f10565b60405180910390a161388b838263ffffffff6161fe16565b92505b505b801561398e5760006001808303815481106138a757fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff161561391457836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4846040516139079190618f10565b60405180910390a2613988565b600354613927908463ffffffff61624016565b600390815581015461393f908463ffffffff61624016565b60038201556040516001600160a01b038516907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc0559061397f908690618f10565b60405180910390a25b50610e34565b826001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4836040516139c79190618f10565b60405180910390a2505050565b600e5481565b61100081565b61dead81565b600b81815481106139f357fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff90911694919291830182828015613a9e5780601f10613a7357610100808354040283529160200191613a9e565b820191906000526020600020905b815481529060010190602001808311613a8157829003601f168201915b5050505050905083565b61100481565b6000600a5460001480613abf575082155b80613aca5750600954155b15613ad757506000613d7b565b60096000815460019003919050819055506000613b22600a5461374886613748600b8a81548110613b0457fe5b6000918252602090912060169091020154439063ffffffff6161fe16565b90506000600b8681548110613b3357fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b158015613b9857600080fd5b505afa158015613bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd091906180c3565b9150915060009350808310613d3157613be98888615162565b5060405163436aa28360e11b8152600090612002906386d5450690613c12908c90600401618200565b60206040518083038186803b158015613c2a57600080fd5b505afa158015613c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c629190617e70565b6001600160a01b031614613cd0576040516328aa02b160e01b8152611001906328aa02b190613c99908b9087908a9060040161826f565b600060405180830381600087803b158015613cb357600080fd5b505af1158015613cc7573d6000803e3d6000fd5b50505050613d28565b6040516305bfb49960e41b815261100190635bfb499090613cf5908b90600401618200565b600060405180830381600087803b158015613d0f57600080fd5b505af1158015613d23573d6000803e3d6000fd5b505050505b60019350613d43565b818310613d4357613d4188616684565b505b6040516001600160a01b038916907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050505b949350505050565b613d8b617ad6565b6000613d95617ad6565b613d9d617b73565b613dae613da986616883565b6168a8565b90506000805b613dbd836168f2565b15613f315780613de257613dd8613dd384616913565b616961565b60ff168452613f29565b8060011415613f24576060613dfe613df985616913565b6169e1565b90508051604051908082528060200260200182016040528015613e3b57816020015b613e28617afa565b815260200190600190039081613e205790505b5085602001819052508051604051908082528060200260200182016040528015613e7957816020015b6060815260200190600190039081613e645790505b50604086015260005b8151811015613f1957613e93617afa565b60606000613eb3858581518110613ea657fe5b6020026020010151616ab2565b92509250925080613ed3578860009a509a50505050505050505050613f3a565b8289602001518581518110613ee457fe5b60200260200101819052508189604001518581518110613f0057fe5b6020026020010181905250505050806001019050613e82565b506001925050613f29565b613f31565b600101613db4565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b6060815260200190600190039081613f59579050509050613f7f8363ffffffff16616bcc565b81600081518110613f8c57fe5b602002602001018190525061116081616bdf565b6000606483511115613fd7576000805160206191a8833981519152604051613fc790618727565b60405180910390a1506066611dc7565b60005b83518110156140755760005b8181101561406c57848181518110613ffa57fe5b6020026020010151600001516001600160a01b031685838151811061401b57fe5b6020026020010151600001516001600160a01b03161415614064576000805160206191a883398151915260405161405190618837565b60405180910390a1606692505050611dc7565b600101613fe6565b50600101613fda565b5060608060606015805480602002602001604051908101604052809291908181526020016000905b828210156141275760008481526020908190206040805160c0810182526004860290920180546001600160a01b039081168452600180830154821685870152600283015491821693850193909352600160a01b81046001600160401b03166060850152600160e01b900460ff16151560808401526003015460a0830152908352909201910161409d565b50505050905060606016805480602002602001604051908101604052809291908181526020016000905b828210156141fc5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156141e85780601f106141bd576101008083540402835291602001916141e8565b820191906000526020600020905b8154815290600101906020018083116141cb57829003601f168201915b505050505081526020019060010190614151565b50505050905060005b82518110156142595782818151811061421a57fe5b60200260200101516060015160030283828151811061423557fe5b60209081029190910101516001600160401b03909116606090910152600101614205565b5060608061426989898686616c69565b915091506142778282615525565b600154604080518281526020808402820101909152929850909650600095508594509250606091508280156142b6578160200160208202803683370190505b50905060005b828110156144475760006001600160a01b03166120026001600160a01b03166386d54506600184815481106142ed57fe5b60009182526020909120600491820201546040516001600160e01b031960e085901b168152614328926001600160a01b039092169101618200565b60206040518083038186803b15801561434057600080fd5b505afa158015614354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143789190617e70565b6001600160a01b0316146143da57600182828151811061439457fe5b602002602001019060ff16908160ff1681525050600181815481106143b557fe5b9060005260206000209060040201600301546000146143d5578360010193505b61443f565b67016345785d8a0000600182815481106143f057fe5b906000526020600020906004020160030154106144125784600101945061443f565b6001818154811061441f57fe5b90600052602060002090600402016003015460001461443f578360010193505b6001016142bc565b50606084604051908082528060200260200182016040528015614474578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156144a3578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156144d2578160200160208202803683370190505b509050606087604051908082528060200260200182016040528015614501578160200160208202803683370190505b5090506000606088604051908082528060200260200182016040528015614532578160200160208202803683370190505b509050606089604051908082528060200260200182016040528015614561578160200160208202803683370190505b50905060009a506000995060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156145a957600080fd5b505afa1580156145bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e191906180ab565b905067016345785d8a000081111561462d576000805160206191a883398151915260405161460e90618b48565b60405180910390a160689e505050505050505050505050505050611dc7565b60005b8a8110156149c15789818151811061464457fe5b602002602001015160ff166001141561473a576001818154811061466457fe5b906000526020600020906004020160030154600014614735576001818154811061468a57fe5b600091825260209091206004909102015484516001600160a01b039091169085908e9081106146b557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600181815481106146e257fe5b906000526020600020906004020160030154838d8151811061470057fe5b60200260200101818152505060018a8d8151811061471a57fe5b602002602001019060ff16908160ff16815250508b6001019b505b6149b9565b67016345785d8a00006001828154811061475057fe5b906000526020600020906004020160030154106148d5576001818154811061477457fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898e815181106147a557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106147da57fe5b906000526020600020906004020160030154816147f357fe5b066001838154811061480157fe5b90600052602060002090600402016003015403905061482983826161fe90919063ffffffff16565b898f8151811061483557fe5b6020026020010181815250506001828154811061484e57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878f8151811061487f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888f815181106148ac57fe5b60209081029190910101526148c7868263ffffffff61624016565b95508d6001019d50506149b9565b600181815481106148e257fe5b9060005260206000209060040201600301546000146149b9576001818154811061490857fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848d8151811061493957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001818154811061496657fe5b906000526020600020906004020160030154838d8151811061498457fe5b60200260200101818152505060008a8d8151811061499e57fe5b602002602001019060ff16908160ff16815250508b6001019b505b600101614630565b5060008415614c37576002546040516303702b2960e51b815261100491636e0565209188916149fb918e918e918d91420190600401618331565b6020604051808303818588803b158015614a1457600080fd5b505af193505050508015614a45575060408051601f3d908101601f19168201909252614a4291810190617fd8565b60015b614bbc576040516000815260443d1015614a6157506000614afc565b60046000803e60005160e01c6308c379a08114614a82576000915050614afc565b60043d036004833e81513d60248201116001600160401b0382111715614aad57600092505050614afc565b80830180516001600160401b03811115614ace576000945050505050614afc565b8060208301013d8601811115614aec57600095505050505050614afc565b601f01601f191660405250925050505b80614b075750614b49565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051614b3b91906183b6565b60405180910390a250614bb7565b3d808015614b73576040519150601f19603f3d011682016040523d82523d6000602084013e614b78565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051614bad91906183b6565b60405180910390a2505b614c37565b8015614bfe577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051614bf19190618f10565b60405180910390a1614c35565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051614c2c906184e0565b60405180910390a25b505b8015614ded5760005b8751811015614deb576000888281518110614c5757fe5b60200260200101519050600060018281548110614c7057fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110614ca157fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015614d5d5760018281548110614ce257fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110614d3157fe5b906000526020600020906004020160030154604051614d509190618f10565b60405180910390a2614de1565b60018281548110614d6a57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110614db957fe5b906000526020600020906004020160030154604051614dd89190618f10565b60405180910390a25b5050600101614c40565b505b835115614fe35760005b8451811015614fe1578a8181518110614e0c57fe5b602002602001015160ff1660011415614eab576120026001600160a01b031663092193ab858381518110614e3c57fe5b6020026020010151878481518110614e5057fe5b60200260200101516040518363ffffffff1660e01b8152600401614e749190618200565b6000604051808303818588803b158015614e8d57600080fd5b505af1158015614ea1573d6000803e3d6000fd5b5050505050614fd9565b6000858281518110614eb957fe5b60200260200101516001600160a01b03166108fc868481518110614ed957fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015614f6f57858281518110614f0f57fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110614f4d57fe5b6020026020010151604051614f629190618f10565b60405180910390a2614fd7565b858281518110614f7b57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110614fb957fe5b6020026020010151604051614fce9190618f10565b60405180910390a25b505b600101614df7565b505b5050505050505050505050505060005b600154811015615050576001818154811061500a57fe5b9060005260206000209060040201600301546000146150485760006001828154811061503257fe5b9060005260206000209060040201600301819055505b600101614ff3565b5047156150be577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516150869190618f10565b60405180910390a1604051611002904780156108fc02916000818181858888f193505050501580156150bc573d6000803e3d6000fd5b505b600060038190556005558151156150d9576150d98282615a0f565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561511657600080fd5b505af115801561512a573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b6000806001838154811061517257fe5b9060005260206000209060040201600301549050600060018080549050039050600161519c6130a5565b51116151d1576000600185815481106151b157fe5b906000526020600020906004020160030181905550600092505050611dc7565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a708360405161520a9190618f10565b60405180910390a26001600160a01b038516600090815260046020526040812055835b600154600019018110156153f7576001816001018154811061524b57fe5b90600052602060002090600402016001828154811061526657fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b80549091830190811061532757fe5b9060005260206000209060160201600b828154811061534257fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff1990921691909117905560028084018054615399938386019390821615610100026000190190911604617b93565b506153ac60038281019084016013617c08565b509050508060010160046000600184815481106153c557fe5b600091825260208083206004909202909101546001600160a01b0316835282019290925260400190205560010161522d565b50600180548061540357fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061545657fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154886002830182617b2f565b615496600383016000617c32565b5050905560008183816154a557fe5b04905080156155195760015460005b81811015615516576154ed83600183815481106154cd57fe5b90600052602060002090600402016003015461624090919063ffffffff16565b600182815481106154fa57fe5b60009182526020909120600360049092020101556001016154b4565b50505b50600195945050505050565b6060806000808080806155366131af565b6001549091505b801561576857600181039250600b838154811061555657fe5b600091825260209091206001601690920201015460ff166155765761575f565b6001838154811061558357fe5b600091825260208220600490910201546001600160a01b031695506155ad90869085908590613aae565b9350836155b95761575f565b60405163436aa28360e11b81526000908190612002906386d54506906155e3908a90600401618200565b60206040518083038186803b1580156155fb57600080fd5b505afa15801561560f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156339190617e70565b90506001600160a01b038116156156bc576040516302ceee9160e11b81526120029063059ddd2290615669908490600401618200565b60206040518083038186803b15801561568157600080fd5b505afa158015615695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156b99190617e70565b91505b60005b8c5181101561575b57876001600160a01b03168d82815181106156de57fe5b6020026020010151600001516001600160a01b031614806157275750826001600160a01b03168d828151811061571057fe5b6020026020010151600001516001600160a01b0316145b156157535760018d828151811061573a57fe5b602090810291909101015190151560809091015261575b565b6001016156bf565b5050505b6000190161553d565b5060005b89518110156157d55789818151811061578157fe5b602002602001015160800151806157c1575060006001600160a01b03168a82815181106157aa57fe5b6020026020010151600001516001600160a01b0316145b156157cd578560010195505b60010161576c565b50885185106158bd5760408051600180825281830190925290816020015b6157fb617afa565b8152602001906001900390816157f3575050604080516001808252818301909252919850602082015b60608152602001906001900390816158245790505095508860008151811061584857fe5b60200260200101518760008151811061585d57fe5b60200260200101819052508760008151811061587557fe5b60200260200101518660008151811061588a57fe5b60200260200101819052506000876000815181106158a457fe5b6020908102919091010151901515608090910152615a02565b848951036040519080825280602002602001820160405280156158fa57816020015b6158e7617afa565b8152602001906001900390816158df5790505b5096508489510360405190808252806020026020018201604052801561593457816020015b606081526020019060019003908161591f5790505b5095506000915060005b8951811015615a005789818151811061595357fe5b602002602001015160800151158015615996575060006001600160a01b03168a828151811061597e57fe5b6020026020010151600001516001600160a01b031614155b156159f8578981815181106159a757fe5b60200260200101518884815181106159bb57fe5b60200260200101819052508881815181106159d257fe5b60200260200101518784815181106159e657fe5b60200260200101819052508260010192505b60010161593e565b505b50505050505b9250929050565b600154825160005b82811015615b2c576001615a29617afa565b60018381548110615a3657fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b84811015615b0057878181518110615ac657fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b03161415615af85760009250615b00565b600101615ab2565b508115615b225780516001600160a01b03166000908152600460205260408120555b5050600101615a17565b5080821115615beb57805b82811015615be9576001805480615b4a57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b805480615b9d57fe5b60008281526020812060166000199093019283020181815560018101805460ff1916905590615bcf6002830182617b2f565b615bdd600383016000617c32565b50509055600101615b37565b505b6000818310615bfa5781615bfc565b825b905060005b81811015615fa057615cae868281518110615c1857fe5b602002602001015160018381548110615c2d57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152617035565b615e62578060010160046000888481518110615cc657fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550858181518110615d0257fe5b602002602001015160018281548110615d1757fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a0909101516003909101558451859082908110615dd257fe5b6020026020010151600b8281548110615de757fe5b90600052602060002090601602016002019080519060200190615e0b929190617a2f565b506000600b8281548110615e1b57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615e4c57fe5b6000918252602090912060169091020155615f98565b858181518110615e6e57fe5b60200260200101516060015160018281548110615e8757fe5b906000526020600020906004020160020160146101000a8154816001600160401b0302191690836001600160401b03160217905550615f4d858281518110615ecb57fe5b6020026020010151600b8381548110615ee057fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156134a85780601f1061347d576101008083540402835291602001916134a8565b615f9857848181518110615f5d57fe5b6020026020010151600b8281548110615f7257fe5b90600052602060002090601602016002019080519060200190615f96929190617a2f565b505b600101615c01565b508282111561617857615fb1617a00565b835b8381101561617557858181518110615fc757fe5b602002602001015182604001819052506001878281518110615fe557fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206191c88339815191528101918255858301516000805160206192088339815191528201805491151560ff199092169190911790559285015180518694929361611b936000805160206191e883398151915201920190617a2f565b5060608201516161319060038301906013617aa9565b505050806001016004600089848151811061614857fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615fb3565b50505b616180617091565b616188617279565b6000600981905560015493505b838110156161f6576000600b82815481106161ac57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b8054839081106161dd57fe5b6000918252602090912060169091020155600101616195565b505050505050565b600061116083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250617467565b6000828201838110156111605760405162461bcd60e51b8152600401610e129061864b565b6001548151604080518281526020808402820101909152606092919083908280156162a457816020015b606081526020019060019003908161628f5790505b50600b5490915083146162bb579250611d17915050565b60005b828110156163ca57600b6001600460008985815181106162da57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061630e57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156163a65780601f1061637b576101008083540402835291602001916163a6565b820191906000526020600020905b81548152906001019060200180831161638957829003601f168201915b50505050508282815181106163b757fe5b60209081029190910101526001016162be565b50949350505050565b60005b8281101561652057600082878388016040516020016163f69291906181f2565b6040516020818303038152906040528051906020012060001c8161641657fe5b06905080850182870114616517576000898388018151811061643457fe5b602002602001015190506060898489018151811061644e57fe5b602002602001015190508a8388018151811061646657fe5b60200260200101518b858a018151811061647c57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106164ab57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505089838801815181106164d957fe5b60200260200101518a858a01815181106164ef57fe5b6020026020010181905250808a8489018151811061650957fe5b602002602001018190525050505b506001016163d6565b5050505050505050565b600980546001908101909155600b80548390811061654457fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b828154811061657a57fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b6000816040516020016165d591906181d6565b60405160208183030381529060405280519060200120836040516020016165fc91906181d6565b6040516020818303038152906040528051906020012014905092915050565b015190565b81518151600091600191811480831461663c576000925061667a565b600160208701838101602088015b6002848385100114156166755780518351146166695760009650600093505b6020928301920161664a565b505050505b5090949350505050565b6001600160a01b038116600090815260046020526040812054806166ad57506000199050611d17565b6001810390506000600182815481106166c257fe5b90600052602060002090600402016003015490506000600183815481106166e557fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d9061673e908590618f10565b60405180910390a28061675657829350505050611d17565b600081838161676157fe5b04905080156167fd5760005b848110156167af5761678682600183815481106154cd57fe5b6001828154811061679357fe5b600091825260209091206003600490920201015560010161676d565b50600180549085015b818110156167fa576167d183600183815481106154cd57fe5b600182815481106167de57fe5b60009182526020909120600360049092020101556001016167b8565b50505b5091949350505050565b60008261681657506000611dc7565b8282028284828161682357fe5b04146111605760405162461bcd60e51b8152600401610e1290618a1a565b600061116083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250617493565b61688b617c41565b506040805180820190915281518152602082810190820152919050565b6168b0617b73565b6168b9826174ca565b6168c257600080fd5b60006168d18360200151617504565b60208085015160408051808201909152868152920190820152915050919050565b60006168fc617c41565b505080518051602091820151919092015191011190565b61691b617c41565b616924826168f2565b61692d57600080fd5b6020820151600061693d82617567565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061697657508151602110155b61697f57600080fd5b600061698e8360200151617504565b905080836000015110156169b45760405162461bcd60e51b8152600401610e1290618c28565b8251602080850151830180519284900392918310156163ca57506020919091036101000a90049392505050565b60606169ec826174ca565b6169f557600080fd5b6000616a0083617648565b9050606081604051908082528060200260200182016040528015616a3e57816020015b616a2b617c41565b815260200190600190039081616a235790505b5090506000616a508560200151617504565b60208601510190506000805b84811015616aa757616a6d83617567565b9150604051806040016040528083815260200184815250848281518110616a9057fe5b602090810291909101015291810191600101616a5c565b509195945050505050565b616aba617afa565b60606000616ac6617afa565b6060616ad0617b73565b616ad9876168a8565b90506000805b616ae8836168f2565b15616bbd5780616b1357616b03616afe84616913565b6176a4565b6001600160a01b03168552616bb5565b8060011415616b3b57616b28616afe84616913565b6001600160a01b03166020860152616bb5565b8060021415616b6357616b50616afe84616913565b6001600160a01b03166040860152616bb5565b8060031415616b8f57616b78613dd384616913565b6001600160401b0316606086015260019150616bb5565b8060041415616bb057616ba9616ba484616913565b6176be565b9350616bb5565b616bbd565b600101616adf565b50929791965091945092505050565b6060611dc7616bda8361772e565b617814565b6060815160001415616c005750604080516000815260208101909152611d17565b606082600081518110616c0f57fe5b602002602001015190506000600190505b8351811015616c5057616c4682858381518110616c3957fe5b6020026020010151617866565b9150600101616c20565b50611160616c63825160c060ff166178e3565b82617866565b60608060006120026001600160a01b031663c473318f6040518163ffffffff1660e01b815260040160206040518083038186803b158015616ca957600080fd5b505afa158015616cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616ce191906180ab565b90508085518851011015616cf6575083518651015b606081604051908082528060200260200182016040528015616d3257816020015b616d1f617afa565b815260200190600190039081616d175790505b509050606082604051908082528060200260200182016040528015616d6b57816020015b6060815260200190600190039081616d565790505b50905060008060005b8b51831080616d835750895182105b8015616d8e57508581105b15617023578b51831415616dfe57898281518110616da857fe5b6020026020010151858281518110616dbc57fe5b6020026020010181905250888281518110616dd357fe5b6020026020010151848281518110616de757fe5b602090810291909101015260019182019101616d74565b8951821415616e69578b8381518110616e1357fe5b6020026020010151858281518110616e2757fe5b60200260200101819052508a8381518110616e3e57fe5b6020026020010151848281518110616e5257fe5b602090810291909101015260019283019201616d74565b898281518110616e7557fe5b6020026020010151606001516001600160401b03168c8481518110616e9657fe5b6020026020010151606001516001600160401b03161115616f12578b8381518110616ebd57fe5b6020026020010151858281518110616ed157fe5b60200260200101819052508a8381518110616ee857fe5b6020026020010151848281518110616efc57fe5b602002602001018190525082600101925061701b565b898281518110616f1e57fe5b6020026020010151606001516001600160401b03168c8481518110616f3f57fe5b6020026020010151606001516001600160401b03161015616fbb57898281518110616f6657fe5b6020026020010151858281518110616f7a57fe5b6020026020010181905250888281518110616f9157fe5b6020026020010151848281518110616fa557fe5b602002602001018190525081600101915061701b565b898281518110616fc757fe5b6020026020010151600001516001600160a01b03168c8481518110616fe857fe5b6020026020010151600001516001600160a01b0316101561700f578b8381518110616ebd57fe5b898281518110616da857fe5b600101616d74565b50929a91995090975050505050505050565b805182516000916001600160a01b03918216911614801561706f575081602001516001600160a01b031683602001516001600160a01b0316145b80156111605750506040908101519101516001600160a01b0390811691161490565b601254601354808211156170dc57805b828110156170da5760128054806170b457fe5b6001900381819060005260206000200160006170d09190617b2f565b90556001016170a1565b505b60008183106170eb57816170ed565b825b905060005b81811015617205576171aa6012828154811061710a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156171985780601f1061716d57610100808354040283529160200191617198565b820191906000526020600020905b81548152906001019060200180831161717b57829003601f168201915b50505050506013838154811061341a57fe5b6171fd57601381815481106171bb57fe5b90600052602060002001601282815481106171d257fe5b9060005260206000200190805460018160011615610100020316600290046171fb929190617b93565b505b6001016170f2565b5082821115610e3457825b828110156172735760126013828154811061722757fe5b600091825260208083208454600181810187559585529190932092909101805461726a949390920192909160026101009282161592909202600019011604617b93565b50600101617210565b50505050565b601354600b54808211156172c457805b828110156172c257601380548061729c57fe5b6001900381819060005260206000200160006172b89190617b2f565b9055600101617289565b505b60008183106172d357816172d5565b825b905060005b818110156173f457617392601382815481106172f257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156173805780601f1061735557610100808354040283529160200191617380565b820191906000526020600020905b81548152906001019060200180831161736357829003601f168201915b5050505050600b8381548110615ee057fe5b6173ec57600b81815481106173a357fe5b9060005260206000209060160201600201601382815481106173c157fe5b9060005260206000200190805460018160011615610100020316600290046173ea929190617b93565b505b6001016172da565b5082821115610e3457825b82811015617273576013600b828154811061741657fe5b60009182526020808320845460018082018755958552919093206016929092029092016002908101805461745e95939094019390926000199082161561010002011604617b93565b506001016173ff565b6000818484111561748b5760405162461bcd60e51b8152600401610e1291906183b6565b505050900390565b600081836174b45760405162461bcd60e51b8152600401610e1291906183b6565b5060008385816174c057fe5b0495945050505050565b80516000906174db57506000611d17565b6020820151805160001a9060c08210156174fa57600092505050611d17565b5060019392505050565b8051600090811a608081101561751e576000915050611d17565b60b8811080617539575060c08110801590617539575060f881105b15617548576001915050611d17565b60c081101561755c5760b519019050611d17565b60f519019050611d17565b80516000908190811a60808110156175825760019150617641565b60b881101561759757607e1981019150617641565b60c08110156175e857600060b78203600186019550806020036101000a8651049150600181018201935050808310156175e25760405162461bcd60e51b8152600401610e1290618967565b50617641565b60f88110156175fd5760be1981019150617641565b600060f78203600186019550806020036101000a86510491506001810182019350508083101561763f5760405162461bcd60e51b8152600401610e1290618967565b505b5092915050565b805160009061765957506000611d17565b6000809050600061766d8460200151617504565b602085015185519181019250015b8082101561769b5761768c82617567565b8201915082600101925061767b565b50909392505050565b80516000906015146176b557600080fd5b611dc782616961565b80516060906176cc57600080fd5b60006176db8360200151617504565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015617712576020820181803683370190505b50905060008160200190506163ca8487602001510182856179b5565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff19841661777257506018617796565b6fffffffffffffffffffffffffffffffff19841661779257506010617796565b5060005b60208110156177cc578181815181106177ab57fe5b01602001516001600160f81b031916156177c4576177cc565b600101617796565b60008160200390506060816040519080825280601f01601f191660200182016040528015617801576020820181803683370190505b5080830196909652508452509192915050565b6060815160011480156178465750607f60f81b8260008151811061783457fe5b01602001516001600160f81b03191611155b15617852575080611d17565b611dc76178648351608060ff166178e3565b835b6060806040519050835180825260208201818101602087015b8183101561789757805183526020928301920161787f565b50855184518101855292509050808201602086015b818310156178c45780518352602092830192016178ac565b508651929092011591909101601f01601f191660405250905092915050565b606068010000000000000000831061790d5760405162461bcd60e51b8152600401610e12906187b2565b604080516001808252818301909252606091602082018180368337019050509050603784116179675782840160f81b8160008151811061794957fe5b60200101906001600160f81b031916908160001a9053509050611dc7565b60606179728561772e565b90508381510160370160f81b8260008151811061798b57fe5b60200101906001600160f81b031916908160001a9053506179ac8282617866565b95945050505050565b806179bf57610e34565b5b602081106179df578251825260209283019290910190601f19016179c0565b915181516020939093036101000a6000190180199091169216919091179052565b60405180608001604052806000815260200160001515815260200160608152602001617a2a617c5b565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617a7057805160ff1916838001178555617a9d565b82800160010185558215617a9d579182015b82811115617a9d578251825591602001919060010190617a82565b506131ea929150617c7a565b8260138101928215617a9d5791602002820182811115617a9d578251825591602001919060010190617a82565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b50805460018160011615610100020316600290046000825580601f10617b555750611f2f565b601f016020900490600052602060002090810190611f2f9190617c7a565b6040518060400160405280617b86617c41565b8152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617bcc5780548555617a9d565b82800160010185558215617a9d57600052602060002091601f016020900482015b82811115617a9d578254825591600101919060010190617bed565b8260138101928215617a9d5791820182811115617a9d578254825591600101919060010190617bed565b50611f2f906013810190617c7a565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b61318e91905b808211156131ea5760008155600101617c80565b8035611dc781618fe7565b60008083601f840112617cb0578182fd5b5081356001600160401b03811115617cc6578182fd5b6020830191508360208083028501011115615a0857600080fd5b6000601f8381840112617cf1578182fd5b8235617d04617cff82618f9c565b618f76565b818152925060208084019085810160005b84811015617d96578135880189603f820112617d3057600080fd5b838101356001600160401b03811115617d4857600080fd5b617d59818901601f19168601618f76565b81815260408c81848601011115617d6f57600080fd5b82818501888401375060009181018601919091528552509282019290820190600101617d15565b50505050505092915050565b600082601f830112617db2578081fd5b8135617dc0617cff82618f9c565b818152915060208083019084810181840286018201871015617de157600080fd5b6000805b85811015617d965782356001600160401b0381168114617e03578283fd5b85529383019391830191600101617de5565b60008083601f840112617e26578182fd5b5081356001600160401b03811115617e3c578182fd5b602083019150836020828501011115615a0857600080fd5b600060208284031215617e65578081fd5b813561116081618fe7565b600060208284031215617e81578081fd5b815161116081618fe7565b60008060008060408587031215617ea1578283fd5b84356001600160401b0380821115617eb7578485fd5b617ec388838901617c9f565b90965094506020870135915080821115617edb578384fd5b50617ee887828801617c9f565b95989497509550505050565b600080600060608486031215617f08578283fd5b83356001600160401b0380821115617f1e578485fd5b81860187601f820112617f2f578586fd5b80359250617f3f617cff84618f9c565b80848252602080830192508084018b828389028701011115617f5f57898afd5b8994505b86851015617f8957617f758c82617c94565b845260019490940193928101928101617f63565b509097508801359350505080821115617fa0578384fd5b617fac87838801617da2565b93506040860135915080821115617fc1578283fd5b50617fce86828701617ce0565b9150509250925092565b600060208284031215617fe9578081fd5b81518015158114611160578182fd5b6000806020838503121561800a578182fd5b82356001600160401b0381111561801f578283fd5b61802b85828601617e15565b90969095509350505050565b6000806000806040858703121561804c578384fd5b84356001600160401b0380821115618062578586fd5b61806e88838901617e15565b90965094506020870135915080821115618086578384fd5b50617ee887828801617e15565b6000602082840312156180a4578081fd5b5035919050565b6000602082840312156180bc578081fd5b5051919050565b600080604083850312156180d5578182fd5b505080516020909101519092909150565b6000806000604084860312156180fa578081fd5b833560ff8116811461810a578182fd5b925060208401356001600160401b03811115618124578182fd5b61813086828701617e15565b9497909650939450505050565b6000815180845260208085019450808401835b838110156181755781516001600160a01b031687529582019590820190600101618150565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526181c2816020860160208601618fbb565b601f01601f19169290920160200192915050565b600082516181e8818460208701618fbb565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b6001600160a01b0392909216825260ff16602082015260400190565b600060208252611160602083018461813d565b6000604082526182d4604083018561813d565b602083820381850152818551808452828401915082838202850101838801865b8381101561832257601f198784030185526183108383516181aa565b948601949250908501906001016182f4565b50909998505050505050505050565b600060808252618344608083018761813d565b828103602084810191909152865180835287820192820190845b8181101561837a5784518352938301939183019160010161835e565b5050848103604086015261838e818861813d565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b60006020825261116060208301846181aa565b6000604082526183dd604083018688618180565b82810360208401526183f0818587618180565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526042908201527f746865206275726e526174696f20706c75732073797374656d5265776172645260408201527f6174696f206d757374206265206e6f2067726561746572207468616e20313030606082015261030360f41b608082015260a00190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601f908201527f6f6e6c7920736c617368206f72207374616b6548756220636f6e747261637400604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b60208082526042908201527f7468652073797374656d526577617264526174696f20706c7573206275726e5260408201527f6174696f206d757374206265206e6f2067726561746572207468616e20313030606082015261030360f41b608082015260a00190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206d757374206265207374616b6548756200604082015260600190565b61ffff91909116815260200190565b90815260200190565b60008482528315156020830152606060408301526179ac60608301846181aa565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff85168252604060208301526179ac604083018486618180565b6040518181016001600160401b0381118282101715618f9457600080fd5b604052919050565b60006001600160401b03821115618fb1578081fd5b5060209081020190565b60005b83811015618fd6578181015183820152602001618fbe565b838111156172735750506000910152565b6001600160a01b0381168114611f2f57600080fdfef901a880f901a4f844941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf946ddf42a51534fc98d0c0a3b42c963cace8441ddf8410000000f84494a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f948081ef03f1d9e0bb4a5bf38f16285c879299f07f8410000000f8449435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194dc4973e838e3949c77aced16ac2315dc2d7ab1118410000000f84494980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b27094cc6ac05c95a99c1f7b5f88de0e3486c82293b2708410000000f84494f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594e61a183325a18a173319dd8e19c8d069459e21758410000000f84494b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794d22ca3ba2141d23adab65ce4940eb7665ea2b6a7841000000070e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a diff --git a/core/systemcontracts/haber_fix/mainnet/SlashContract b/core/systemcontracts/haber_fix/mainnet/SlashContract new file mode 100644 index 0000000000..7f53af8524 --- /dev/null +++ b/core/systemcontracts/haber_fix/mainnet/SlashContract @@ -0,0 +1 @@ +608060405234801561001057600080fd5b506004361061035d5760003560e01c80637942fd05116101d3578063c80d4b8f11610104578063df8079e9116100a2578063f9a2bbc71161007c578063f9a2bbc714610601578063fc3e590814610609578063fc4333cd14610611578063fd6a6879146106195761035d565b8063df8079e9146105e9578063e1c7392a146105f1578063f1fad104146105f95761035d565b8063c96be4cb116100de578063c96be4cb146105b3578063cc844b73146105c6578063dc927faf146105d9578063dcc6f156146105e15761035d565b8063c80d4b8f14610590578063c81b166214610598578063c8509d81146105a05761035d565b8063a1a11bf511610171578063aad560631161014b578063aad5606314610565578063ab51bb961461056d578063ac0af62914610575578063ac4317511461057d5761035d565b8063a1a11bf51461054d578063a78abc1614610555578063aa82dce11461055d5761035d565b8063831d65d1116101ad578063831d65d11461052257806396713da9146105355780639dc092621461053d5780639f804f5f146105455761035d565b80637942fd051461050a5780637e434d54146105125780638256ace61461051a5761035d565b806343756e5c116102ad5780635bfb49901161024b57806370fd5bad1161022557806370fd5bad146104ea578063718a8aa8146104f257806375d47a0a146104fa5780637912a65d146105025761035d565b80635bfb4990146104c757806362b72cf5146104da5780636e47b482146104e25761035d565b806350055f901161028757806350055f90146104a757806351b4dce3146104af57806351e80672146104b7578063567a372d146104bf5761035d565b806343756e5c14610482578063493279b11461048a5780634bf6c8821461049f5761035d565b8063280870281161031a57806335aa2e44116102f457806335aa2e441461043157806337c8dab914610444578063389f4f71146104655780633dffc3871461046d5761035d565b8063280870281461040157806328aa02b1146104095780633306ccca1461041c5761035d565b80630bee7a67146103625780630e2374a5146103805780631182b8751461039557806322d1e80b146103b557806323bac5a2146103ca57806327962118146103ec575b600080fd5b61036a610621565b6040516103779190613d96565b60405180910390f35b610388610626565b6040516103779190613574565b6103a86103a33660046134aa565b61062c565b60405161037791906135ac565b6103bd610692565b60405161037791906135a1565b6103dd6103d83660046131af565b61069b565b60405161037793929190613d7e565b6103ff6103fa366004613307565b6106be565b005b610388610a13565b6103ff6104173660046131e7565b610a19565b610424610a4a565b6040516103779190613d67565b61038861043f36600461347a565b610a50565b6104576104523660046131af565b610a77565b604051610377929190613d70565b610424610ace565b610475610ad4565b6040516103779190613da7565b610388610ad9565b610492610adf565b6040516103779190613d58565b610475610ae4565b610424610ae9565b610388610aef565b610388610af5565b610424610afb565b6103ff6104d53660046131af565b610b01565b610424610c0d565b610388610c13565b610475610c19565b610475610c1e565b610388610c23565b610424610c29565b610475610c2e565b610388610c33565b610457610c39565b6103ff6105303660046134aa565b610c43565b610475610d56565b610388610d5b565b610424610d61565b610388610d67565b6103bd610d6d565b610388610d76565b610388610d7c565b61036a610d82565b610424610d87565b6103ff61058b36600461335e565b610d8c565b610424611328565b61038861132d565b6103ff6105ae3660046134aa565b611333565b6103ff6105c13660046131af565b6113a4565b6103ff6105d43660046133c7565b611815565b610388611df4565b610424611dfa565b610388611dff565b6103ff611e05565b610475611e41565b610388611e46565b610475611e4c565b6103ff611e51565b61038861229a565b606481565b61200181565b606033612000146106585760405162461bcd60e51b815260040161064f90613bfb565b60405180910390fd5b60005460ff1661067a5760405162461bcd60e51b815260040161064f906136a1565b60405162461bcd60e51b815260040161064f90613cec565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b60005460ff166106e05760405162461bcd60e51b815260040161064f906136a1565b6006546106ed5760146006555b6008546106fb576170806008555b81511580159061070b5750805115155b6107275760405162461bcd60e51b815260040161064f90613b59565b60408051600380825260808201909252606091816020015b606081526020019060019003908161073f57905050905061076060386122a0565b8160008151811061076d57fe5b6020026020010181905250610781836122bb565b8160018151811061078e57fe5b60200260200101819052506107a2826122bb565b816002815181106107af57fe5b602002602001018190525060606107c582612311565b60408051603480825260608281019093529293509091602082018180368337019050509050815160346020830182602086016068600019fa61080657600080fd5b506014810151603482015160405163436aa28360e11b8152600090612002906386d5450690610839908690600401613574565b60206040518083038186803b15801561085157600080fd5b505afa158015610865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088991906131cb565b6001600160a01b031614156108b05760405162461bcd60e51b815260040161064f90613671565b43600854820110156108d45760405162461bcd60e51b815260040161064f90613612565b604051631871f7d960e31b81526120029063c38fbec8906108f9908590600401613574565b600060405180830381600087803b15801561091357600080fd5b505af1158015610927573d6000803e3d6000fd5b50506040516335409f7f60e01b815261100092506335409f7f9150610950908590600401613574565b600060405180830381600087803b15801561096a57600080fd5b505af115801561097e573d6000803e3d6000fd5b50506006546040516309a99b4f60e41b815260646110028031909302049350909150639a99b4f0906109b69033908590600401613588565b602060405180830381600087803b1580156109d057600080fd5b505af11580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a089190613492565b505050505050505050565b61200581565b3361100014610a3a5760405162461bcd60e51b815260040161064f906138e4565b610a458383836123a2565b505050565b61708081565b60018181548110610a5d57fe5b6000918252602090912001546001600160a01b0316905081565b600080610a82612f96565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b600181565b61100181565b603881565b600881565b60065481565b61200681565b61200081565b60045481565b3361100014610b225760405162461bcd60e51b815260040161064f906138e4565b60005460ff16610b445760405162461bcd60e51b815260040161064f906136a1565b61200063f7a251d7600b610b5784612580565b60006040518463ffffffff1660e01b8152600401610b7793929190613db5565b600060405180830381600087803b158015610b9157600080fd5b505af1925050508015610ba2575060015b610c0a573d808015610bd0576040519150601f19603f3d011682016040523d82523d6000602084013e610bd5565b606091505b50816001600160a01b0316600080516020613ea0833981519152600083604051610c009291906135bf565b60405180910390a2505b50565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b61200381565b6004546005549091565b3361200014610c645760405162461bcd60e51b815260040161064f90613bfb565b60005460ff16610c865760405162461bcd60e51b815260040161064f906136a1565b610c8e612fb9565b6000610ccf84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061264992505050565b915091508015610d165781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e62996791610d0991613d96565b60405180910390a1610d4f565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e791610d4691613d96565b60405180910390a15b5050505050565b600981565b61100781565b60085481565b61100681565b60005460ff1681565b61200281565b61300081565b600081565b600481565b60005460ff16610dae5760405162461bcd60e51b815260040161064f906136a1565b3361100714610dcf5760405162461bcd60e51b815260040161064f90613a48565b610e3a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b602082015291506126c99050565b15610ed55760208114610e5f5760405162461bcd60e51b815260040161064f90613870565b604080516020601f8401819004810282018101909252828152600091610e9d9185858083850183828082843760009201919091525061272392505050565b905060018110158015610eb1575060055481105b610ecd5760405162461bcd60e51b815260040161064f90613bb6565b6004556112e5565b610f3b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b602082015291506126c99050565b15610fd75760208114610f605760405162461bcd60e51b815260040161064f90613a96565b604080516020601f8401819004810282018101909252828152600091610f9e9185858083850183828082843760009201919091525061272392505050565b90506103e88111158015610fb3575060045481115b610fcf5760405162461bcd60e51b815260040161064f9061375a565b6005556112e5565b61104484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601681527566656c6f6e79536c617368526577617264526174696f60501b602082015291506126c99050565b156110de57602081146110695760405162461bcd60e51b815260040161064f906139d0565b604080516020601f84018190048102820181019092528281526000916110a79185858083850183828082843760009201919091525061272392505050565b9050600a81101580156110ba5750606481105b6110d65760405162461bcd60e51b815260040161064f90613ad8565b6006556112e5565b61115284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c6173680000000000000000602082015291506126c99050565b156111c957602081146111775760405162461bcd60e51b815260040161064f9061378f565b604080516020601f84018190048102820181019092528281526111b3919084848083850183828082843760009201919091525061272892505050565b6007805460ff19169115159190911790556112e5565b61123084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601081526f66656c6f6e79536c61736853636f706560801b602082015291506126c99050565b156112cd57602081146112555760405162461bcd60e51b815260040161064f9061395f565b604080516020601f84018190048102820181019092528281526000916112939185858083850183828082843760009201919091525061272392505050565b905061708081101580156112a95750620d2f0081105b6112c55760405162461bcd60e51b815260040161064f906136d8565b6008556112e5565b60405162461bcd60e51b815260040161064f90613c97565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161131a94939291906135e0565b60405180910390a150505050565b609681565b61100281565b33612000146113545760405162461bcd60e51b815260040161064f90613bfb565b60005460ff166113765760405162461bcd60e51b815260040161064f906136a1565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b3341146113c35760405162461bcd60e51b815260040161064f90613c4a565b60005460ff166113e55760405162461bcd60e51b815260040161064f906136a1565b60035443116114065760405162461bcd60e51b815260040161064f90613d23565b3a156114245760405162461bcd60e51b815260040161064f906139a2565b60405163155853f360e21b8152611000906355614fcc90611449908490600401613574565b60206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149991906132eb565b6114a25761180e565b6114aa612f96565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff16158015928201929092529061150557602081018051600101905261155e565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161157057fe5b0661173c57600060208201526040516335409f7f60e01b8152611000906335409f7f906115a1908590600401613574565b600060405180830381600087803b1580156115bb57600080fd5b505af11580156115cf573d6000803e3d6000fd5b505060405163436aa28360e11b81526000925061200291506386d54506906115fb908690600401613574565b60206040518083038186803b15801561161357600080fd5b505afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b91906131cb565b6001600160a01b03161461166e5761166982826020015160006123a2565b611737565b61200063f7a251d7600b61168185612580565b60006040518463ffffffff1660e01b81526004016116a193929190613db5565b600060405180830381600087803b1580156116bb57600080fd5b505af19250505080156116cc575060015b611737573d8080156116fa576040519150601f19603f3d011682016040523d82523d6000602084013e6116ff565b606091505b50826001600160a01b0316600080516020613ea083398151915283602001518360405161172d9291906135bf565b60405180910390a2505b6117a8565b60045481602001518161174b57fe5b066117a8576040516375abf10160e11b81526110009063eb57e20290611775908590600401613574565b600060405180830381600087803b15801561178f57600080fd5b505af11580156117a3573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166118375760405162461bcd60e51b815260040161064f906136a1565b60075460ff166118595760405162461bcd60e51b815260040161064f9061363c565b6006546118665760146006555b600854611874576170806008555b60085481516040015143910111801561189857504360085482602001516040015101115b6118b45760405162461bcd60e51b815260040161064f90613cbe565b8060200151602001518160000151602001511480156118e25750806020015160600151816000015160600151145b156118ff5760405162461bcd60e51b815260040161064f906138b7565b80516040810151905110801561191e5750602081015160408101519051105b61193a5760405162461bcd60e51b815260040161064f90613839565b60208101515181515110801561195f5750806000015160400151816020015160400151105b8061198a575080515160208201515110801561198a5750806020015160400151816000015160400151105b806119a45750806020015160400151816000015160400151145b6119c05760405162461bcd60e51b815260040161064f90613723565b604080820151905163ea321e4960e01b81526110009163ea321e49916119e991906004016135ac565b60206040518083038186803b158015611a0157600080fd5b505afa158015611a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3991906132eb565b611a555760405162461bcd60e51b815260040161064f90613a19565b611a6781600001518260400151612750565b8015611a805750611a8081602001518260400151612750565b611a9c5760405162461bcd60e51b815260040161064f906137da565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b158015611ada57600080fd5b505afa158015611aee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b169190810190613228565b9150915060005b8151811015611c5357611b47828281518110611b3557fe5b60200260200101518560400151612928565b15611c4b576006546040516309a99b4f60e41b815260646110028031909302049190639a99b4f090611b7f9033908590600401613588565b602060405180830381600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190613492565b506110006001600160a01b03166335409f7f858481518110611bef57fe5b60200260200101516040518263ffffffff1660e01b8152600401611c139190613574565b600060405180830381600087803b158015611c2d57600080fd5b505af1158015611c41573d6000803e3d6000fd5b5050505050611c53565b600101611b1d565b5060408084015190516317b4f35360e01b8152600091612002916317b4f35391611c7f916004016135ac565b60206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906131cb565b6001600160a01b031614611d3d576040808401519051630e9fbf5160e01b815261200291630e9fbf5191611d0691906004016135ac565b600060405180830381600087803b158015611d2057600080fd5b505af1158015611d34573d6000803e3d6000fd5b50505050610a45565b6120006001600160a01b031663f7a251d7600b611d5d866040015161298c565b60006040518463ffffffff1660e01b8152600401611d7d93929190613db5565b600060405180830381600087803b158015611d9757600080fd5b505af1158015611dab573d6000803e3d6000fd5b505050506000611dc0846040015160006129c7565b60405190915081907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a250505050565b61100381565b601481565b61200481565b60005460ff1615611e285760405162461bcd60e51b815260040161064f90613b22565b603260045560966005556000805460ff19166001179055565b601181565b61100081565b600381565b3361100014611e725760405162461bcd60e51b815260040161064f906138e4565b60005460ff16611e945760405162461bcd60e51b815260040161064f906136a1565b600154611ea057612298565b600154600090600019015b80821161226c576000805b82841015611fcf57611ec6612f96565b6002600060018781548110611ed757fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611fb957600460055481611f4457fe5b04816020015103816020018181525050806002600060018881548110611f6657fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611fc3565b6001925050611fcf565b50836001019350611eb6565b82841161216657611fde612f96565b6002600060018681548110611fef57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff1615159082015260055490915060049004816020015111156120d75760046005548161205c57fe5b0481602001510381602001818152505080600260006001878154811061207e57fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff191691151591909117905591506121669050565b60026000600186815481106120e857fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff1916905580548061212c57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055836121595750612166565b5060001990920191611fcf565b8180156121705750805b1561224f57600260006001868154811061218657fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff191690558054849081106121cd57fe5b600091825260209091200154600180546001600160a01b0390921691869081106121f357fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600180548061222c57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b8261225b57505061226c565b505060019091019060001901611eab565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60606122b36122ae836129e3565b6122bb565b90505b919050565b6060815160011480156122ed5750607f60f81b826000815181106122db57fe5b01602001516001600160f81b03191611155b156122f95750806122b6565b6122b361230b8351608060ff16612ac9565b83612b9b565b606081516000141561233257506040805160008152602081019091526122b6565b60608260008151811061234157fe5b602002602001015190506000600190505b8351811015612382576123788285838151811061236b57fe5b6020026020010151612b9b565b9150600101612352565b5061239b612395825160c060ff16612ac9565b82612b9b565b9392505050565b80156123cd576040516375cc7d8960e01b8152612002906375cc7d8990611d06908690600401613574565b6040516375cc7d8960e01b8152612002906375cc7d89906123f2908690600401613574565b600060405180830381600087803b15801561240c57600080fd5b505af192505050801561241d575060015b610a45576040516000815260443d1015612439575060006124d6565b60046000803e60005160e01c6308c379a0811461245a5760009150506124d6565b60043d036004833e81513d602482011167ffffffffffffffff82111715612486576000925050506124d6565b808301805167ffffffffffffffff8111156124a85760009450505050506124d6565b8060208301013d86018111156124c6576000955050505050506124d6565b601f01601f191660405250925050505b806124e15750612518565b836001600160a01b0316600080516020613ea0833981519152848360405161250a9291906135bf565b60405180910390a25061257b565b3d808015612542576040519150601f19603f3d011682016040523d82523d6000602084013e612547565b606091505b50836001600160a01b0316600080516020613ea083398151915284836040516125719291906135bf565b60405180910390a2505b610a45565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161259b5790505090506125c4836001600160a01b0316612c18565b816000815181106125d157fe5b60200260200101819052506125e5436122a0565b816001815181106125f257fe5b602090810291909101015261260760386122a0565b8160028151811061261457fe5b6020026020010181905250612628426122a0565b8160038151811061263557fe5b602002602001018190525061239b81612311565b612651612fb9565b600061265b612fb9565b612663612fcb565b61267461266f86612c3b565b612c60565b90506000805b61268383612caa565b156126bc57806126af5761269e61269984612ccb565b612d19565b63ffffffff168452600191506126b4565b6126bc565b60010161267a565b5091935090915050915091565b6000816040516020016126dc9190613558565b60405160208183030381529060405280519060200120836040516020016127039190613558565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615612742576001915081612748565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b606081526020019060019003908161276c5750506040805160208082528183019092529192506060919080820181803683370190505090506127b185600001516122a0565b826000815181106127be57fe5b60200260200101819052506127d96020866020015183612d9b565b6127e2816122bb565b826001815181106127ef57fe5b602002602001018190525061280785604001516122a0565b8260028151811061281457fe5b602002602001018190525061282f6020866060015183612d9b565b612838816122bb565b8260038151811061284557fe5b602002602001018190525061286b602061285e84612311565b8051906020012083612d9b565b6040805160b080825260e0820190925260609160208201818036833701905050905061289b818360006020612dab565b6128ad81876080015160206060612dab565b6128bb818660806030612dab565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6128f857600080fd5b506001612906826000612dfe565b60ff161461291b57600094505050505061271d565b5060019695505050505050565b8151815160009160019181148083146129445760009250612982565b600160208701838101602088015b60028483851001141561297d5780518351146129715760009650600093505b60209283019201612952565b505050505b5090949350505050565b60408051600480825260a08201909252606091829190816020015b60608152602001906001900390816129a75790505090506125c4836122bb565b600081602001835110156129da57600080fd5b50016020015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416612a2757506018612a4b565b6fffffffffffffffffffffffffffffffff198416612a4757506010612a4b565b5060005b6020811015612a8157818181518110612a6057fe5b01602001516001600160f81b03191615612a7957612a81565b600101612a4b565b60008160200390506060816040519080825280601f01601f191660200182016040528015612ab6576020820181803683370190505b5080830196909652508452509192915050565b6060680100000000000000008310612af35760405162461bcd60e51b815260040161064f90613811565b60408051600180825281830190925260609160208201818036833701905050905060378411612b4d5782840160f81b81600081518110612b2f57fe5b60200101906001600160f81b031916908160001a905350905061271d565b6060612b58856129e3565b90508381510160370160f81b82600081518110612b7157fe5b60200101906001600160f81b031916908160001a905350612b928282612b9b565b95945050505050565b6060806040519050835180825260208201818101602087015b81831015612bcc578051835260209283019201612bb4565b50855184518101855292509050808201602086015b81831015612bf9578051835260209283019201612be1565b508651929092011591909101601f01601f191660405250905092915050565b60408051600560a21b831860148201526034810190915260609061239b816122bb565b612c43612feb565b506040805180820190915281518152602082810190820152919050565b612c68612fcb565b612c7182612e1a565b612c7a57600080fd5b6000612c898360200151612e54565b60208085015160408051808201909152868152920190820152915050919050565b6000612cb4612feb565b505080518051602091820151919092015191011190565b612cd3612feb565b612cdc82612caa565b612ce557600080fd5b60208201516000612cf582612eb7565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590612d2e57508151602110155b612d3757600080fd5b6000612d468360200151612e54565b90508083600001511015612d6c5760405162461bcd60e51b815260040161064f90613b7f565b825160208085015183018051928490039291831015612d9257826020036101000a820491505b50949350505050565b9091018181526020918201910152565b60005b81811015610d4f57838181518110612dc257fe5b602001015160f81c60f81b858480600101955081518110612ddf57fe5b60200101906001600160f81b031916908160001a905350600101612dae565b60008160010183511015612e1157600080fd5b50016001015190565b8051600090612e2b575060006122b6565b6020820151805160001a9060c0821015612e4a576000925050506122b6565b5060019392505050565b8051600090811a6080811015612e6e5760009150506122b6565b60b8811080612e89575060c08110801590612e89575060f881105b15612e985760019150506122b6565b60c0811015612eac5760b5190190506122b6565b60f5190190506122b6565b80516000908190811a6080811015612ed25760019150612f8f565b60b8811015612ee757607e1981019150612f8f565b60c0811015612f3857600060b78203600186019550806020036101000a865104915060018101820193505080831015612f325760405162461bcd60e51b815260040161064f90613934565b50612f8f565b60f8811015612f4d5760be1981019150612f8f565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156127485760405162461bcd60e51b815260040161064f90613934565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b6040518060400160405280612fde612feb565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f830112613015578081fd5b815161302861302382613e08565b613de1565b818152915060208083019084810160005b8481101561309e578151870188603f82011261305457600080fd5b8381015161306461302382613e28565b81815260408b8184860101111561307a57600080fd5b61308983888401838701613e4c565b50865250509282019290820190600101613039565b505050505092915050565b60008083601f8401126130ba578182fd5b50813567ffffffffffffffff8111156130d1578182fd5b6020830191508360208285010111156130e957600080fd5b9250929050565b600082601f830112613100578081fd5b813561310e61302382613e28565b915080825283602082850101111561312557600080fd5b8060208401602084013760009082016020015292915050565b600060a0828403121561314f578081fd5b61315960a0613de1565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff81111561319757600080fd5b6131a3848285016130f0565b60808301525092915050565b6000602082840312156131c0578081fd5b813561239b81613e7c565b6000602082840312156131dc578081fd5b815161239b81613e7c565b6000806000606084860312156131fb578182fd5b833561320681613e7c565b925060208401359150604084013561321d81613e91565b809150509250925092565b6000806040838503121561323a578182fd5b825167ffffffffffffffff80821115613251578384fd5b81850186601f820112613262578485fd5b8051925061327261302384613e08565b80848252602080830192508084018a828389028701011115613292578889fd5b8894505b868510156132bd5780516132a981613e7c565b845260019490940193928101928101613296565b5088015190965093505050808211156132d4578283fd5b506132e185828601613005565b9150509250929050565b6000602082840312156132fc578081fd5b815161239b81613e91565b60008060408385031215613319578182fd5b823567ffffffffffffffff80821115613330578384fd5b61333c868387016130f0565b93506020850135915080821115613351578283fd5b506132e1858286016130f0565b60008060008060408587031215613373578182fd5b843567ffffffffffffffff8082111561338a578384fd5b613396888389016130a9565b909650945060208701359150808211156133ae578384fd5b506133bb878288016130a9565b95989497509550505050565b6000602082840312156133d8578081fd5b813567ffffffffffffffff808211156133ef578283fd5b81840160608187031215613401578384fd5b61340b6060613de1565b925080358281111561341b578485fd5b6134278782840161313e565b84525060208101358281111561343b578485fd5b6134478782840161313e565b60208501525060408101358281111561345e578485fd5b61346a878284016130f0565b6040850152509195945050505050565b60006020828403121561348b578081fd5b5035919050565b6000602082840312156134a3578081fd5b5051919050565b6000806000604084860312156134be578081fd5b833560ff811681146134ce578182fd5b9250602084013567ffffffffffffffff8111156134e9578182fd5b6134f5868287016130a9565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452613544816020860160208601613e4c565b601f01601f19169290920160200192915050565b6000825161356a818460208701613e4c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60006020825261239b602083018461352c565b6000838252604060208301526135d8604083018461352c565b949350505050565b6000604082526135f4604083018688613502565b8281036020840152613607818587613502565b979650505050505050565b60208082526010908201526f195d9a59195b98d9481d1bdbc81bdb1960821b604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b6020808252601690820152751d985b1a59185d1bdc881b9bdd081b5a59dc985d195960521b604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f6c656e677468206f662066656c6f6e79536c61736853636f7065206d69736d616040820152620e8c6d60eb1b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b60208082526029908201527f6c656e677468206f662066656c6f6e79536c617368526577617264526174696f604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b6020808252602a908201527f7468652066656c6f6e7920736c6173682072657761726420726174696f206f7560408201526974206f662072616e676560b01b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252600c908201526b32b6b83a3c903432b0b232b960a11b604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260606020830152613dd1606083018561352c565b9050826040830152949350505050565b60405181810167ffffffffffffffff81118282101715613e0057600080fd5b604052919050565b600067ffffffffffffffff821115613e1e578081fd5b5060209081020190565b600067ffffffffffffffff821115613e3e578081fd5b50601f01601f191660200190565b60005b83811015613e67578181015183820152602001613e4f565b83811115613e76576000848401525b50505050565b6001600160a01b0381168114610c0a57600080fd5b8015158114610c0a57600080fdfed7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1ca164736f6c6343000604000a diff --git a/core/systemcontracts/haber_fix/mainnet/ValidatorContract b/core/systemcontracts/haber_fix/mainnet/ValidatorContract new file mode 100644 index 0000000000..c6acf467f5 --- /dev/null +++ b/core/systemcontracts/haber_fix/mainnet/ValidatorContract @@ -0,0 +1 @@ +6080604052600436106104fb5760003560e01c806388b32f111161028c578063c6d339451161015a578063e40716a1116100cc578063f92eb86b11610085578063f92eb86b14610d2d578063f9a2bbc714610d42578063fc3e590814610d57578063fccc281314610d6c578063fd4ad81f14610d81578063fd6a687914610db057610502565b8063e40716a114610c9b578063ea321e4914610cb0578063eb57e20214610cd0578063eda5868c14610cf0578063f1fad10414610d05578063f340fa0114610d1a57610502565b8063d86222d51161011e578063d86222d514610c1d578063daacdb6614610c32578063dc927faf14610c47578063df8079e914610c5c578063e086c7b114610c71578063e1c7392a14610c8657610502565b8063c6d3394514610bbe578063c81b166214610bd3578063c8509d811461098d578063ce910b0c14610be8578063d68fb56a14610c0857610502565b8063a78abc16116101fe578063ad3c9da6116101b7578063ad3c9da614610b3d578063aef198a914610b5d578063b7ab4db514610b72578063b8cf4ef114610b94578063bf9f4995146106fe578063c466689d14610ba957610502565b8063a78abc1614610ab4578063aa82dce114610ac9578063aad5606314610ade578063aaf5eb6814610af3578063ab51bb9614610b08578063ac43175114610b1d57610502565b806396713da91161025057806396713da914610a365780639dc0926214610a4b5780639fe0f81614610a60578063a0dc275814610a75578063a1a11bf514610a8a578063a5422d5c14610a9f57610502565b806388b32f11146109c25780638a7beb01146109d75780638b5ad0c9146109ec5780638d19a41014610a015780639369d7de14610a2157610502565b806351b4dce3116103c957806370fd5bad1161033b5780637e434d54116102f45780637e434d541461094e57806381650b6214610963578063820dcaa814610978578063831d65d11461098d578063853230aa1461090f57806386249882146109ad57610502565b806370fd5bad146108d0578063718a8aa8146108e557806375d47a0a146108fa57806378dfed4a1461090f5780637942fd05146109245780637a84ca2a1461093957610502565b80635d77156c1161038d5780635d77156c1461082a5780635de1e22c1461083f57806360eba4fe1461085457806362b72cf5146108745780636969a25c146108895780636e47b482146108bb57610502565b806351b4dce3146107ab57806351e80672146107c057806355614fcc146107d5578063565c56b3146107f55780635667515a1461081557610502565b8063300c35671161046d57806343756e5c1161042657806343756e5c1461072057806345cf9daf14610735578063493279b11461074a5780634bf6c8821461076c5780634df6e0c3146107815780635192c82c1461079657610502565b8063300c35671461065b578063321d398a1461067b5780633365af3a1461069b57806335409f7f146106bb5780633b071dcc146106db5780633dffc387146106fe57610502565b8063152ad3b8116104bf578063152ad3b8146105ba5780631e4c1524146105dc5780631ff18069146105fc578063219f22d51461061157806328087028146106265780632a0ffb6e1461063b57610502565b806304c4fec61461050757806307a568471461051e5780630bee7a67146105495780630e2374a51461056b5780631182b8751461058d57610502565b3661050257005b600080fd5b34801561051357600080fd5b5061051c610dc5565b005b34801561052a57600080fd5b50610533610e39565b6040516105409190618f10565b60405180910390f35b34801561055557600080fd5b5061055e610e3f565b6040516105409190618f3a565b34801561057757600080fd5b50610580610e44565b6040516105409190618200565b34801561059957600080fd5b506105ad6105a83660046180e6565b610e4a565b60405161054091906183b6565b3480156105c657600080fd5b506105cf611167565b60405161054091906183ab565b3480156105e857600080fd5b5061051c6105f7366004617ef4565b611170565b34801561060857600080fd5b50610533611846565b34801561061d57600080fd5b5061055e61184c565b34801561063257600080fd5b50610580611851565b34801561064757600080fd5b5061051c610656366004617e54565b611857565b34801561066757600080fd5b5061051c610676366004617e8c565b611904565b34801561068757600080fd5b506105cf610696366004618093565b611c4d565b3480156106a757600080fd5b506105cf6106b6366004618093565b611d1c565b3480156106c757600080fd5b5061051c6106d6366004617e54565b611dcd565b3480156106e757600080fd5b506106f0611f32565b6040516105409291906182c1565b34801561070a57600080fd5b5061071361220e565b6040516105409190618f4b565b34801561072c57600080fd5b50610580612213565b34801561074157600080fd5b50610533612219565b34801561075657600080fd5b5061075f61221f565b6040516105409190618f01565b34801561077857600080fd5b50610713612224565b34801561078d57600080fd5b506106f0612229565b3480156107a257600080fd5b506105336123b5565b3480156107b757600080fd5b506105806123bb565b3480156107cc57600080fd5b506105806123c1565b3480156107e157600080fd5b506105cf6107f0366004617e54565b6123c7565b34801561080157600080fd5b50610533610810366004617e54565b6123fc565b34801561082157600080fd5b5061071361244d565b34801561083657600080fd5b5061055e612452565b34801561084b57600080fd5b50610533612457565b34801561086057600080fd5b506105ad61086f366004618093565b61245d565b34801561088057600080fd5b50610533612503565b34801561089557600080fd5b506108a96108a4366004618093565b612509565b6040516105409695949392919061822d565b3480156108c757600080fd5b5061058061256d565b3480156108dc57600080fd5b50610713612573565b3480156108f157600080fd5b50610713612578565b34801561090657600080fd5b5061058061257d565b34801561091b57600080fd5b50610533612583565b34801561093057600080fd5b50610713612589565b34801561094557600080fd5b5061053361258e565b34801561095a57600080fd5b50610580612594565b34801561096f57600080fd5b5061055e61259a565b34801561098457600080fd5b5061053361259f565b34801561099957600080fd5b5061051c6109a83660046180e6565b6125a5565b3480156109b957600080fd5b50610533612606565b3480156109ce57600080fd5b5061053361260c565b3480156109e357600080fd5b506105cf612612565b3480156109f857600080fd5b5061053361261b565b348015610a0d57600080fd5b50610533610a1c366004617e54565b612621565b348015610a2d57600080fd5b5061051c612661565b348015610a4257600080fd5b50610713612775565b348015610a5757600080fd5b5061058061277a565b348015610a6c57600080fd5b50610533612780565b348015610a8157600080fd5b50610533612785565b348015610a9657600080fd5b5061058061278a565b348015610aab57600080fd5b506105ad612790565b348015610ac057600080fd5b506105cf6127af565b348015610ad557600080fd5b506105806127b8565b348015610aea57600080fd5b506105806127be565b348015610aff57600080fd5b506105336127c4565b348015610b1457600080fd5b5061055e61244d565b348015610b2957600080fd5b5061051c610b38366004618037565b6127cd565b348015610b4957600080fd5b50610533610b58366004617e54565b613086565b348015610b6957600080fd5b50610533613098565b348015610b7e57600080fd5b50610b876130a5565b60405161054091906182ae565b348015610ba057600080fd5b50610533613191565b348015610bb557600080fd5b50610533613196565b348015610bca57600080fd5b50610533612573565b348015610bdf57600080fd5b5061058061319c565b348015610bf457600080fd5b506105ad610c03366004618093565b6131a2565b348015610c1457600080fd5b506105336131af565b348015610c2957600080fd5b506105336131ee565b348015610c3e57600080fd5b506105336131fa565b348015610c5357600080fd5b50610580613200565b348015610c6857600080fd5b50610580613206565b348015610c7d57600080fd5b50610533610e3f565b348015610c9257600080fd5b5061051c61320c565b348015610ca757600080fd5b506105336133bb565b348015610cbc57600080fd5b506105cf610ccb366004617ff8565b6133c1565b348015610cdc57600080fd5b5061051c610ceb366004617e54565b613547565b348015610cfc57600080fd5b5061055e61364b565b348015610d1157600080fd5b50610713613650565b61051c610d28366004617e54565b613655565b348015610d3957600080fd5b506105336139d4565b348015610d4e57600080fd5b506105806139da565b348015610d6357600080fd5b50610713612780565b348015610d7857600080fd5b506105806139e0565b348015610d8d57600080fd5b50610da1610d9c366004618093565b6139e6565b60405161054093929190618f19565b348015610dbc57600080fd5b50610580613aa8565b6000610dd033612621565b9050600b8181548110610ddf57fe5b600091825260209091206001601690920201015460ff16610e1b5760405162461bcd60e51b8152600401610e1290618b1c565b60405180910390fd5b6000610e256131af565b9050610e343383836001613aae565b505050565b60095481565b606481565b61200181565b60005460609060ff16610e6f5760405162461bcd60e51b8152600401610e12906185dd565b3361200014610e905760405162461bcd60e51b8152600401610e1290618d1d565b600b54610f4e57610e9f617a00565b60015460005b81811015610f4a57600b8054600181018255600091909152835160008051602061901d833981519152601690920291820190815560208086015160008051602061964c8339815191528401805460ff1916911515919091179055604086015180518794610f269360008051602061903d833981519152909101920190617a2f565b506060820151610f3c9060038301906013617aa9565b505050806001019050610ea5565b5050505b610f56617ad6565b6000610f9785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613d8392505050565b9150915080610fb357610faa6064613f3f565b92505050611160565b815160009060ff16610fd857610fd183602001518460400151613fa0565b905061112c565b825160ff16600114156111285782602001515160011461101d57600080516020618ffd83398151915260405161100d906189d5565b60405180910390a1506067611123565b6000836020015160008151811061103057fe5b602090810291909101810151516001600160a01b03811660009081526004909252604090912054909150801580611091575060018082038154811061107157fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b156110cf576040516001600160a01b038316907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a261111c565b60006110de8360018403615162565b90508061111a576040516001600160a01b038416907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a25b505b6000925050505b61112c565b5060655b63ffffffff811661115157505060408051600081526020810190915291506111609050565b61115a81613f3f565b93505050505b9392505050565b60075460ff1681565b33411461118f5760405162461bcd60e51b8152600401610e1290618d6c565b3a156111ad5760405162461bcd60e51b8152600401610e1290618a5b565b82516040805182815260208084028201019091526060908280156111eb57816020015b6111d8617afa565b8152602001906001900390816111d05790505b50905060005b82811015611295576040518060c0016040528087838151811061121057fe5b60200260200101516001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200186838151811061125257fe5b60200260200101516001600160401b03168152602001600015158152602001600081525082828151811061128257fe5b60209081029190910101526001016111f1565b5060405163d31f968d60e01b81526120009063d31f968d906112c09061100090600890600401618292565b60206040518083038186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190617fd8565b15611633578051601554818111156113b257815b818110156113b057601580548061133757fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055601680548061138a57fe5b6001900381819060005260206000200160006113a69190617b2f565b9055600101611324565b505b60005b828110156115f2578181106114da5760158482815181106113d257fe5b602090810291909101810151825460018181018555600094855293839020825160049092020180546001600160a01b039283166001600160a01b0319918216178255938301519481018054958316958516959095179094556040820151600285018054606085015160808601511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590961692909716919091179290921692909217169290921790915560a0015160039091015585516016908790839081106114a257fe5b602090810291909101810151825460018101845560009384529282902081516114d49491909101929190910190617a2f565b506115ea565b8381815181106114e657fe5b6020026020010151601582815481106114fb57fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015585518690829081106115b657fe5b6020026020010151601682815481106115cb57fe5b9060005260206000200190805190602001906115e8929190617a2f565b505b6001016113b5565b507fb8e726330a0dad1cf3d04e925663b17e391f1ed547d79b7f4e5f344119b44246826040516116229190618f10565b60405180910390a150505050610e34565b6060806116408386615525565b9150915060005b6001548110156117365760006001828154811061166057fe5b90600052602060002090600402016003015490508060001461172d5760006001838154811061168b57fe5b9060005260206000209060040201600301819055506120026001600160a01b031663092193ab82600185815481106116bf57fe5b60009182526020909120600491820201546040516001600160e01b031960e086901b1681526116fa926001600160a01b039092169101618200565b6000604051808303818588803b15801561171357600080fd5b505af1158015611727573d6000803e3d6000fd5b50505050505b50600101611647565b5047156117a4577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d4760405161176c9190618f10565b60405180910390a1604051611002904780156108fc02916000818181858888f193505050501580156117a2573d6000803e3d6000fd5b505b600060038190556005558151156117bf576117bf8282615a0f565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117fc57600080fd5b505af1158015611810573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a150505050505050565b60035481565b606881565b61200581565b33612002146118785760405162461bcd60e51b8152600401610e1290618eca565b60005b60155481101561190057816001600160a01b03166015828154811061189c57fe5b60009182526020909120600490910201546001600160a01b031614156118f8576001601582815481106118cb57fe5b9060005260206000209060040201600201601c6101000a81548160ff021916908315150217905550611900565b60010161187b565b5050565b3341146119235760405162461bcd60e51b8152600401610e1290618d6c565b60105443116119445760405162461bcd60e51b8152600401610e1290618770565b3a156119625760405162461bcd60e51b8152600401610e1290618a5b565b60005460ff166119845760405162461bcd60e51b8152600401610e12906185dd565b60006110023168056bc75e2d631000008111156119bb576119b48168056bc75e2d6310000063ffffffff6161fe16565b91506119c2565b5050611c43565b6040516309a99b4f60e41b815261100290639a99b4f0906119e99030908690600401618214565b602060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b91906180ab565b915081611a49575050611c43565b6000805b84811015611a7757858582818110611a6157fe5b9050602002013582019150806001019050611a4d565b5080611a8557505050611c43565b6000806000805b89811015611c3b5784898983818110611aa157fe5b90506020020135880281611ab157fe5b0493508a8a82818110611ac057fe5b9050602002016020810190611ad59190617e54565b6001600160a01b03811660009081526004602052604090205490935091508115611bf1576000600180840381548110611b0a57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615611b7757836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8586604051611b6a9190618f10565b60405180910390a2611beb565b600354611b8a908663ffffffff61624016565b6003908155810154611ba2908663ffffffff61624016565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611be2908890618f10565b60405180910390a25b50611c33565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d8585604051611c2a9190618f10565b60405180910390a25b600101611a8c565b505050505050505b5050436010555050565b6001546000908210611c6157506000611d17565b60006001600160a01b031660018381548110611c7957fe5b60009182526020909120600490910201546001600160a01b03161480611ca957506008541580611ca95750600a54155b80611cb8575060085460095410155b80611cc95750611cc782611d1c565b155b80611cf257506000600b8381548110611cde57fe5b906000526020600020906016020160000154115b80611d0657506001611d026130a5565b5111155b15611d1357506000611d17565b5060015b919050565b6001546000908210611d3057506000611d17565b600b548210611d6d5760018281548110611d4657fe5b9060005260206000209060040201600201601c9054906101000a900460ff16159050611d17565b60018281548110611d7a57fe5b9060005260206000209060040201600201601c9054906101000a900460ff16158015611dc75750600b8281548110611dae57fe5b600091825260209091206001601690920201015460ff16155b92915050565b600b54611e8b57611ddc617a00565b60015460005b81811015611e8757600b8054600181018255600091909152835160008051602061901d833981519152601690920291820190815560208086015160008051602061964c8339815191528401805460ff1916911515919091179055604086015180518794611e639360008051602061903d833981519152909101920190617a2f565b506060820151611e799060038301906013617aa9565b505050806001019050611de2565b5050505b336110011480611e9c575033612002145b611eb85760405162461bcd60e51b8152600401610e1290618614565b6001600160a01b03811660009081526004602052604090205480611edc5750611f2f565b6001810390506000600b8281548110611ef157fe5b600091825260209091206001601690920201015460ff169050611f148383615162565b8015611f1d5750805b15610e34576009805460001901905550505b50565b60015460609081906000805b82811015611f855760018181548110611f5357fe5b9060005260206000209060040201600201601c9054906101000a900460ff16611f7d576001909101905b600101611f3e565b50606081604051908082528060200260200182016040528015611fb2578160200160208202803683370190505b509050606082604051908082528060200260200182016040528015611feb57816020015b6060815260200190600190039081611fd65790505b50600b54600094509091508414156121665760005b84811015612160576001818154811061201557fe5b9060005260206000209060040201600201601c9054906101000a900460ff16612158576001818154811061204557fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061207057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b818154811061209d57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156121355780601f1061210a57610100808354040283529160200191612135565b820191906000526020600020905b81548152906001019060200180831161211857829003601f168201915b505050505082858151811061214657fe5b60209081029190910101526001909301925b600101612000565b50612202565b60005b84811015612200576001818154811061217e57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166121f857600181815481106121ae57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106121d957fe5b6001600160a01b03909216602092830291909101909101526001909301925b600101612169565b505b909450925050505b9091565b600181565b61100181565b60085481565b603881565b600881565b6060806000600e549050600080600c5411612245576015612249565b600c545b905060606122556130a5565b9050606061226282616265565b90508282511161227957909450925061220a915050565b8383835103101561228b578282510393505b83156122c15760c843046122a783838388880360008a8a6163d3565b6122bf8383838888038989038a8b8b8b5103016163d3565b505b6060836040519080825280602002602001820160405280156122ed578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561232657816020015b60608152602001906001900390816123115790505b50905060005b858110156123a75784818151811061234057fe5b602002602001015183828151811061235457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061238057fe5b602002602001015182828151811061239457fe5b602090810291909101015260010161232c565b509096509450505050509091565b60065481565b61200681565b61200081565b6001600160a01b038116600090815260046020526040812054806123ef576000915050611d17565b6000190161116081611d1c565b6001600160a01b03811660009081526004602052604081205480612424576000915050611d17565b60018082038154811061243357fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b6012818154811061246a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152935090918301828280156124fb5780601f106124d0576101008083540402835291602001916124fb565b820191906000526020600020905b8154815290600101906020018083116124de57829003601f168201915b505050505081565b60105481565b6001818154811061251657fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b61200381565b606681565b61271081565b33612000146125c65760405162461bcd60e51b8152600401610e1290618d1d565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f389021016058383836040516125f993929190618f59565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b038116600090815260046020526040812054806126575760405162461bcd60e51b8152600401610e1290618ca5565b6000190192915050565b600b5461271f57612670617a00565b60015460005b8181101561271b57600b8054600181018255600091909152835160008051602061901d833981519152601690920291820190815560208086015160008051602061964c8339815191528401805460ff19169115159190911790556040860151805187946126f79360008051602061903d833981519152909101920190617a2f565b50606082015161270d9060038301906013617aa9565b505050806001019050612676565b5050505b60085461272c5760036008555b600a54612739576002600a555b600061274433612621565b905061274f81611c4d565b61276b5760405162461bcd60e51b8152600401610e1290618992565b611f2f338261652a565b600981565b61100781565b600381565b60c881565b61100681565b6040518061062001604052806105ef815260200161905d6105ef913981565b60005460ff1681565b61200281565b61300081565b6402540be40081565b60005460ff166127ef5760405162461bcd60e51b8152600401610e12906185dd565b33611007146128105760405162461bcd60e51b8152600401610e1290618a89565b61287a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506165c29050565b15612917576020811461289f5760405162461bcd60e51b8152600401610e1290618c5f565b604080516020601f84018190048102820181019092528281526000916128dd9185858083850183828082843760009201919091525061661b92505050565b9050606481101580156128f35750620186a08111155b61290f5760405162461bcd60e51b8152600401610e1290618882565b600255613043565b61297784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506165c29050565b15612a1a576020811461299c5760405162461bcd60e51b8152600401610e12906183fb565b604080516020601f84018190048102820181019092528281526000916129da9185858083850183828082843760009201919091525061661b92505050565b90506127106129f4600f548361624090919063ffffffff16565b1115612a125760405162461bcd60e51b8152600401610e1290618432565b600655613043565b612a8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506165c29050565b15612b1e5760208114612aa95760405162461bcd60e51b8152600401610e129061849a565b604080516020601f8401819004810282018101909252828152600091612ae79185858083850183828082843760009201919091525061661b92505050565b600c5490915080612af6575060155b808210612b155760405162461bcd60e51b8152600401610e12906187da565b50600855613043565b612b8784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506165c29050565b15612c205760208114612bac5760405162461bcd60e51b8152600401610e1290618563565b604080516020601f8401819004810282018101909252828152600091612bea9185858083850183828082843760009201919091525061661b92505050565b9050600081118015612bfc5750600a81105b612c185760405162461bcd60e51b8152600401610e1290618dfd565b600a55613043565b612c9484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506165c29050565b15612d235760208114612cb95760405162461bcd60e51b8152600401610e1290618517565b604080516020601f8401819004810282018101909252828152600091612cf79185858083850183828082843760009201919091525061661b92505050565b9050600d54811115612d1b5760405162461bcd60e51b8152600401610e12906188f8565b600e55613043565b612d8c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506165c29050565b15612e0e5760208114612db15760405162461bcd60e51b8152600401610e1290618ad7565b604080516020601f8401819004810282018101909252828152600091612def9185858083850183828082843760009201919091525061661b92505050565b600d819055600e54909150811015612e0857600d54600e555b50613043565b612e7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506165c29050565b15612f205760208114612e975760405162461bcd60e51b8152600401610e12906185a8565b604080516020601f8401819004810282018101909252828152600091612ed59185858083850183828082843760009201919091525061661b92505050565b905060008111612ef75760405162461bcd60e51b8152600401610e1290618682565b6064811115612f185760405162461bcd60e51b8152600401610e12906186ca565b600c55613043565b612f8884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506165c29050565b1561302b5760208114612fad5760405162461bcd60e51b8152600401610e1290618db9565b604080516020601f8401819004810282018101909252828152600091612feb9185858083850183828082843760009201919091525061661b92505050565b90506127106130056006548361624090919063ffffffff16565b11156130235760405162461bcd60e51b8152600401610e1290618bc0565b600f55613043565b60405162461bcd60e51b8152600401610e1290618e5a565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161307894939291906183c9565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156130d4576130c081611d1c565b156130cc578160010191505b6001016130af565b50606081604051908082528060200260200182016040528015613101578160200160208202803683370190505b5090506000915060005b838110156131885761311c81611d1c565b15613180576001818154811061312e57fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061315957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b60010161310b565b50925050505b90565b601581565b61027181565b61100281565b6013818154811061246a57fe5b60006131b96130a5565b519050600080600c54116131ce5760156131d2565b600c545b9050808211156131e0578091505b816131ea57600191505b5090565b67016345785d8a000081565b60055481565b61100381565b61200481565b60005460ff161561322f5760405162461bcd60e51b8152600401610e1290618b89565b613237617ad6565b600061325d6040518061062001604052806105ef815260200161905d6105ef9139613d83565b915091508061327e5760405162461bcd60e51b8152600401610e1290618cdc565b60005b8260200151518110156133a3576001836020015182815181106132a057fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061337657fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101613281565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b818110156134ca576134b285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060138054909250859150811061341a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156134a85780601f1061347d576101008083540402835291602001916134a8565b820191906000526020600020905b81548152906001019060200180831161348b57829003601f168201915b5050505050616620565b156134c257600192505050611dc7565b6001016133c9565b5060125460005b8181101561353b5761352286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060128054909250859150811061341a57fe5b156135335760019350505050611dc7565b6001016134d1565b50600095945050505050565b33611001146135685760405162461bcd60e51b8152600401610e1290618e81565b600b5461362657613577617a00565b60015460005b8181101561362257600b8054600181018255600091909152835160008051602061901d833981519152601690920291820190815560208086015160008051602061964c8339815191528401805460ff19169115159190911790556040860151805187946135fe9360008051602061903d833981519152909101920190617a2f565b5060608201516136149060038301906013617aa9565b50505080600101905061357d565b5050505b600061363182616684565b905061363c81611c4d565b1561190057611900828261652a565b606581565b601181565b3341146136745760405162461bcd60e51b8152600401610e1290618d6c565b60005460ff166136965760405162461bcd60e51b8152600401610e12906185dd565b600034116136b65760405162461bcd60e51b8152600401610e12906188c9565b3a156136d45760405162461bcd60e51b8152600401610e1290618a5b565b6001600160a01b03811660009081526004602052604090205460145434919060ff1661371457610271600f556103e86006556014805460ff191660011790555b60008211801561372657506000600f54115b156137d8576000613754612710613748600f543461680790919063ffffffff16565b9063ffffffff61684116565b905080156137d6576040516110029082156108fc029083906000818181858888f1935050505015801561378b573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d816040516137bb9190618f10565b60405180910390a16137d3838263ffffffff6161fe16565b92505b505b6000821180156137ea57506000600654115b1561389057600061380c6127106137486006543461680790919063ffffffff16565b9050801561388e5760405161dead9082156108fc029083906000818181858888f19350505050158015613843573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee5816040516138739190618f10565b60405180910390a161388b838263ffffffff6161fe16565b92505b505b801561398e5760006001808303815481106138a757fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff161561391457836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4846040516139079190618f10565b60405180910390a2613988565b600354613927908463ffffffff61624016565b600390815581015461393f908463ffffffff61624016565b60038201556040516001600160a01b038516907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc0559061397f908690618f10565b60405180910390a25b50610e34565b826001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b4836040516139c79190618f10565b60405180910390a2505050565b600e5481565b61100081565b61dead81565b600b81815481106139f357fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff90911694919291830182828015613a9e5780601f10613a7357610100808354040283529160200191613a9e565b820191906000526020600020905b815481529060010190602001808311613a8157829003601f168201915b5050505050905083565b61100481565b6000600a5460001480613abf575082155b80613aca5750600954155b15613ad757506000613d7b565b60096000815460019003919050819055506000613b22600a5461374886613748600b8a81548110613b0457fe5b6000918252602090912060169091020154439063ffffffff6161fe16565b90506000600b8681548110613b3357fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b158015613b9857600080fd5b505afa158015613bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd091906180c3565b9150915060009350808310613d3157613be98888615162565b5060405163436aa28360e11b8152600090612002906386d5450690613c12908c90600401618200565b60206040518083038186803b158015613c2a57600080fd5b505afa158015613c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c629190617e70565b6001600160a01b031614613cd0576040516328aa02b160e01b8152611001906328aa02b190613c99908b9087908a9060040161826f565b600060405180830381600087803b158015613cb357600080fd5b505af1158015613cc7573d6000803e3d6000fd5b50505050613d28565b6040516305bfb49960e41b815261100190635bfb499090613cf5908b90600401618200565b600060405180830381600087803b158015613d0f57600080fd5b505af1158015613d23573d6000803e3d6000fd5b505050505b60019350613d43565b818310613d4357613d4188616684565b505b6040516001600160a01b038916907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050505b949350505050565b613d8b617ad6565b6000613d95617ad6565b613d9d617b73565b613dae613da986616883565b6168a8565b90506000805b613dbd836168f2565b15613f315780613de257613dd8613dd384616913565b616961565b60ff168452613f29565b8060011415613f24576060613dfe613df985616913565b6169e1565b90508051604051908082528060200260200182016040528015613e3b57816020015b613e28617afa565b815260200190600190039081613e205790505b5085602001819052508051604051908082528060200260200182016040528015613e7957816020015b6060815260200190600190039081613e645790505b50604086015260005b8151811015613f1957613e93617afa565b60606000613eb3858581518110613ea657fe5b6020026020010151616ab2565b92509250925080613ed3578860009a509a50505050505050505050613f3a565b8289602001518581518110613ee457fe5b60200260200101819052508189604001518581518110613f0057fe5b6020026020010181905250505050806001019050613e82565b506001925050613f29565b613f31565b600101613db4565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b6060815260200190600190039081613f59579050509050613f7f8363ffffffff16616bcc565b81600081518110613f8c57fe5b602002602001018190525061116081616bdf565b6000606483511115613fd757600080516020618ffd833981519152604051613fc790618727565b60405180910390a1506066611dc7565b60005b83518110156140755760005b8181101561406c57848181518110613ffa57fe5b6020026020010151600001516001600160a01b031685838151811061401b57fe5b6020026020010151600001516001600160a01b0316141561406457600080516020618ffd83398151915260405161405190618837565b60405180910390a1606692505050611dc7565b600101613fe6565b50600101613fda565b5060608060606015805480602002602001604051908101604052809291908181526020016000905b828210156141275760008481526020908190206040805160c0810182526004860290920180546001600160a01b039081168452600180830154821685870152600283015491821693850193909352600160a01b81046001600160401b03166060850152600160e01b900460ff16151560808401526003015460a0830152908352909201910161409d565b50505050905060606016805480602002602001604051908101604052809291908181526020016000905b828210156141fc5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156141e85780601f106141bd576101008083540402835291602001916141e8565b820191906000526020600020905b8154815290600101906020018083116141cb57829003601f168201915b505050505081526020019060010190614151565b50505050905060005b82518110156142595782818151811061421a57fe5b60200260200101516060015160030283828151811061423557fe5b60209081029190910101516001600160401b03909116606090910152600101614205565b5060608061426989898686616c69565b915091506142778282615525565b600154604080518281526020808402820101909152929850909650600095508594509250606091508280156142b6578160200160208202803683370190505b50905060005b828110156144475760006001600160a01b03166120026001600160a01b03166386d54506600184815481106142ed57fe5b60009182526020909120600491820201546040516001600160e01b031960e085901b168152614328926001600160a01b039092169101618200565b60206040518083038186803b15801561434057600080fd5b505afa158015614354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143789190617e70565b6001600160a01b0316146143da57600182828151811061439457fe5b602002602001019060ff16908160ff1681525050600181815481106143b557fe5b9060005260206000209060040201600301546000146143d5578360010193505b61443f565b67016345785d8a0000600182815481106143f057fe5b906000526020600020906004020160030154106144125784600101945061443f565b6001818154811061441f57fe5b90600052602060002090600402016003015460001461443f578360010193505b6001016142bc565b50606084604051908082528060200260200182016040528015614474578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156144a3578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156144d2578160200160208202803683370190505b509050606087604051908082528060200260200182016040528015614501578160200160208202803683370190505b5090506000606088604051908082528060200260200182016040528015614532578160200160208202803683370190505b509050606089604051908082528060200260200182016040528015614561578160200160208202803683370190505b50905060009a506000995060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156145a957600080fd5b505afa1580156145bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e191906180ab565b905067016345785d8a000081111561462d57600080516020618ffd83398151915260405161460e90618b48565b60405180910390a160689e505050505050505050505050505050611dc7565b60005b8a8110156149c15789818151811061464457fe5b602002602001015160ff166001141561473a576001818154811061466457fe5b906000526020600020906004020160030154600014614735576001818154811061468a57fe5b600091825260209091206004909102015484516001600160a01b039091169085908e9081106146b557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600181815481106146e257fe5b906000526020600020906004020160030154838d8151811061470057fe5b60200260200101818152505060018a8d8151811061471a57fe5b602002602001019060ff16908160ff16815250508b6001019b505b6149b9565b67016345785d8a00006001828154811061475057fe5b906000526020600020906004020160030154106148d5576001818154811061477457fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898e815181106147a557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106147da57fe5b906000526020600020906004020160030154816147f357fe5b066001838154811061480157fe5b90600052602060002090600402016003015403905061482983826161fe90919063ffffffff16565b898f8151811061483557fe5b6020026020010181815250506001828154811061484e57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878f8151811061487f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888f815181106148ac57fe5b60209081029190910101526148c7868263ffffffff61624016565b95508d6001019d50506149b9565b600181815481106148e257fe5b9060005260206000209060040201600301546000146149b9576001818154811061490857fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848d8151811061493957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001818154811061496657fe5b906000526020600020906004020160030154838d8151811061498457fe5b60200260200101818152505060008a8d8151811061499e57fe5b602002602001019060ff16908160ff16815250508b6001019b505b600101614630565b5060008415614c37576002546040516303702b2960e51b815261100491636e0565209188916149fb918e918e918d91420190600401618331565b6020604051808303818588803b158015614a1457600080fd5b505af193505050508015614a45575060408051601f3d908101601f19168201909252614a4291810190617fd8565b60015b614bbc576040516000815260443d1015614a6157506000614afc565b60046000803e60005160e01c6308c379a08114614a82576000915050614afc565b60043d036004833e81513d60248201116001600160401b0382111715614aad57600092505050614afc565b80830180516001600160401b03811115614ace576000945050505050614afc565b8060208301013d8601811115614aec57600095505050505050614afc565b601f01601f191660405250925050505b80614b075750614b49565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051614b3b91906183b6565b60405180910390a250614bb7565b3d808015614b73576040519150601f19603f3d011682016040523d82523d6000602084013e614b78565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051614bad91906183b6565b60405180910390a2505b614c37565b8015614bfe577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051614bf19190618f10565b60405180910390a1614c35565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051614c2c906184e0565b60405180910390a25b505b8015614ded5760005b8751811015614deb576000888281518110614c5757fe5b60200260200101519050600060018281548110614c7057fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110614ca157fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015614d5d5760018281548110614ce257fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110614d3157fe5b906000526020600020906004020160030154604051614d509190618f10565b60405180910390a2614de1565b60018281548110614d6a57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110614db957fe5b906000526020600020906004020160030154604051614dd89190618f10565b60405180910390a25b5050600101614c40565b505b835115614fe35760005b8451811015614fe1578a8181518110614e0c57fe5b602002602001015160ff1660011415614eab576120026001600160a01b031663092193ab858381518110614e3c57fe5b6020026020010151878481518110614e5057fe5b60200260200101516040518363ffffffff1660e01b8152600401614e749190618200565b6000604051808303818588803b158015614e8d57600080fd5b505af1158015614ea1573d6000803e3d6000fd5b5050505050614fd9565b6000858281518110614eb957fe5b60200260200101516001600160a01b03166108fc868481518110614ed957fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015614f6f57858281518110614f0f57fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110614f4d57fe5b6020026020010151604051614f629190618f10565b60405180910390a2614fd7565b858281518110614f7b57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110614fb957fe5b6020026020010151604051614fce9190618f10565b60405180910390a25b505b600101614df7565b505b5050505050505050505050505060005b600154811015615050576001818154811061500a57fe5b9060005260206000209060040201600301546000146150485760006001828154811061503257fe5b9060005260206000209060040201600301819055505b600101614ff3565b5047156150be577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516150869190618f10565b60405180910390a1604051611002904780156108fc02916000818181858888f193505050501580156150bc573d6000803e3d6000fd5b505b600060038190556005558151156150d9576150d98282615a0f565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561511657600080fd5b505af115801561512a573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b6000806001838154811061517257fe5b9060005260206000209060040201600301549050600060018080549050039050600161519c6130a5565b51116151d1576000600185815481106151b157fe5b906000526020600020906004020160030181905550600092505050611dc7565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a708360405161520a9190618f10565b60405180910390a26001600160a01b038516600090815260046020526040812055835b600154600019018110156153f7576001816001018154811061524b57fe5b90600052602060002090600402016001828154811061526657fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b80549091830190811061532757fe5b9060005260206000209060160201600b828154811061534257fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff1990921691909117905560028084018054615399938386019390821615610100026000190190911604617b93565b506153ac60038281019084016013617c08565b509050508060010160046000600184815481106153c557fe5b600091825260208083206004909202909101546001600160a01b0316835282019290925260400190205560010161522d565b50600180548061540357fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061545657fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154886002830182617b2f565b615496600383016000617c32565b5050905560008183816154a557fe5b04905080156155195760015460005b81811015615516576154ed83600183815481106154cd57fe5b90600052602060002090600402016003015461624090919063ffffffff16565b600182815481106154fa57fe5b60009182526020909120600360049092020101556001016154b4565b50505b50600195945050505050565b6060806000808080806155366131af565b6001549091505b801561576857600181039250600b838154811061555657fe5b600091825260209091206001601690920201015460ff166155765761575f565b6001838154811061558357fe5b600091825260208220600490910201546001600160a01b031695506155ad90869085908590613aae565b9350836155b95761575f565b60405163436aa28360e11b81526000908190612002906386d54506906155e3908a90600401618200565b60206040518083038186803b1580156155fb57600080fd5b505afa15801561560f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156339190617e70565b90506001600160a01b038116156156bc576040516302ceee9160e11b81526120029063059ddd2290615669908490600401618200565b60206040518083038186803b15801561568157600080fd5b505afa158015615695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156b99190617e70565b91505b60005b8c5181101561575b57876001600160a01b03168d82815181106156de57fe5b6020026020010151600001516001600160a01b031614806157275750826001600160a01b03168d828151811061571057fe5b6020026020010151600001516001600160a01b0316145b156157535760018d828151811061573a57fe5b602090810291909101015190151560809091015261575b565b6001016156bf565b5050505b6000190161553d565b5060005b89518110156157d55789818151811061578157fe5b602002602001015160800151806157c1575060006001600160a01b03168a82815181106157aa57fe5b6020026020010151600001516001600160a01b0316145b156157cd578560010195505b60010161576c565b50885185106158bd5760408051600180825281830190925290816020015b6157fb617afa565b8152602001906001900390816157f3575050604080516001808252818301909252919850602082015b60608152602001906001900390816158245790505095508860008151811061584857fe5b60200260200101518760008151811061585d57fe5b60200260200101819052508760008151811061587557fe5b60200260200101518660008151811061588a57fe5b60200260200101819052506000876000815181106158a457fe5b6020908102919091010151901515608090910152615a02565b848951036040519080825280602002602001820160405280156158fa57816020015b6158e7617afa565b8152602001906001900390816158df5790505b5096508489510360405190808252806020026020018201604052801561593457816020015b606081526020019060019003908161591f5790505b5095506000915060005b8951811015615a005789818151811061595357fe5b602002602001015160800151158015615996575060006001600160a01b03168a828151811061597e57fe5b6020026020010151600001516001600160a01b031614155b156159f8578981815181106159a757fe5b60200260200101518884815181106159bb57fe5b60200260200101819052508881815181106159d257fe5b60200260200101518784815181106159e657fe5b60200260200101819052508260010192505b60010161593e565b505b50505050505b9250929050565b600154825160005b82811015615b2c576001615a29617afa565b60018381548110615a3657fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b84811015615b0057878181518110615ac657fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b03161415615af85760009250615b00565b600101615ab2565b508115615b225780516001600160a01b03166000908152600460205260408120555b5050600101615a17565b5080821115615beb57805b82811015615be9576001805480615b4a57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b805480615b9d57fe5b60008281526020812060166000199093019283020181815560018101805460ff1916905590615bcf6002830182617b2f565b615bdd600383016000617c32565b50509055600101615b37565b505b6000818310615bfa5781615bfc565b825b905060005b81811015615fa057615cae868281518110615c1857fe5b602002602001015160018381548110615c2d57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152617035565b615e62578060010160046000888481518110615cc657fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550858181518110615d0257fe5b602002602001015160018281548110615d1757fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a0909101516003909101558451859082908110615dd257fe5b6020026020010151600b8281548110615de757fe5b90600052602060002090601602016002019080519060200190615e0b929190617a2f565b506000600b8281548110615e1b57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615e4c57fe5b6000918252602090912060169091020155615f98565b858181518110615e6e57fe5b60200260200101516060015160018281548110615e8757fe5b906000526020600020906004020160020160146101000a8154816001600160401b0302191690836001600160401b03160217905550615f4d858281518110615ecb57fe5b6020026020010151600b8381548110615ee057fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156134a85780601f1061347d576101008083540402835291602001916134a8565b615f9857848181518110615f5d57fe5b6020026020010151600b8281548110615f7257fe5b90600052602060002090601602016002019080519060200190615f96929190617a2f565b505b600101615c01565b508282111561617857615fb1617a00565b835b8381101561617557858181518110615fc757fe5b602002602001015182604001819052506001878281518110615fe557fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b805492830181559093528451601690910260008051602061901d83398151915281019182558583015160008051602061964c8339815191528201805491151560ff199092169190911790559285015180518694929361611b9360008051602061903d83398151915201920190617a2f565b5060608201516161319060038301906013617aa9565b505050806001016004600089848151811061614857fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615fb3565b50505b616180617091565b616188617279565b6000600981905560015493505b838110156161f6576000600b82815481106161ac57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b8054839081106161dd57fe5b6000918252602090912060169091020155600101616195565b505050505050565b600061116083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250617467565b6000828201838110156111605760405162461bcd60e51b8152600401610e129061864b565b6001548151604080518281526020808402820101909152606092919083908280156162a457816020015b606081526020019060019003908161628f5790505b50600b5490915083146162bb579250611d17915050565b60005b828110156163ca57600b6001600460008985815181106162da57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061630e57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156163a65780601f1061637b576101008083540402835291602001916163a6565b820191906000526020600020905b81548152906001019060200180831161638957829003601f168201915b50505050508282815181106163b757fe5b60209081029190910101526001016162be565b50949350505050565b60005b8281101561652057600082878388016040516020016163f69291906181f2565b6040516020818303038152906040528051906020012060001c8161641657fe5b06905080850182870114616517576000898388018151811061643457fe5b602002602001015190506060898489018151811061644e57fe5b602002602001015190508a8388018151811061646657fe5b60200260200101518b858a018151811061647c57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106164ab57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505089838801815181106164d957fe5b60200260200101518a858a01815181106164ef57fe5b6020026020010181905250808a8489018151811061650957fe5b602002602001018190525050505b506001016163d6565b5050505050505050565b600980546001908101909155600b80548390811061654457fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b828154811061657a57fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b6000816040516020016165d591906181d6565b60405160208183030381529060405280519060200120836040516020016165fc91906181d6565b6040516020818303038152906040528051906020012014905092915050565b015190565b81518151600091600191811480831461663c576000925061667a565b600160208701838101602088015b6002848385100114156166755780518351146166695760009650600093505b6020928301920161664a565b505050505b5090949350505050565b6001600160a01b038116600090815260046020526040812054806166ad57506000199050611d17565b6001810390506000600182815481106166c257fe5b90600052602060002090600402016003015490506000600183815481106166e557fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d9061673e908590618f10565b60405180910390a28061675657829350505050611d17565b600081838161676157fe5b04905080156167fd5760005b848110156167af5761678682600183815481106154cd57fe5b6001828154811061679357fe5b600091825260209091206003600490920201015560010161676d565b50600180549085015b818110156167fa576167d183600183815481106154cd57fe5b600182815481106167de57fe5b60009182526020909120600360049092020101556001016167b8565b50505b5091949350505050565b60008261681657506000611dc7565b8282028284828161682357fe5b04146111605760405162461bcd60e51b8152600401610e1290618a1a565b600061116083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250617493565b61688b617c41565b506040805180820190915281518152602082810190820152919050565b6168b0617b73565b6168b9826174ca565b6168c257600080fd5b60006168d18360200151617504565b60208085015160408051808201909152868152920190820152915050919050565b60006168fc617c41565b505080518051602091820151919092015191011190565b61691b617c41565b616924826168f2565b61692d57600080fd5b6020820151600061693d82617567565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061697657508151602110155b61697f57600080fd5b600061698e8360200151617504565b905080836000015110156169b45760405162461bcd60e51b8152600401610e1290618c28565b8251602080850151830180519284900392918310156163ca57506020919091036101000a90049392505050565b60606169ec826174ca565b6169f557600080fd5b6000616a0083617648565b9050606081604051908082528060200260200182016040528015616a3e57816020015b616a2b617c41565b815260200190600190039081616a235790505b5090506000616a508560200151617504565b60208601510190506000805b84811015616aa757616a6d83617567565b9150604051806040016040528083815260200184815250848281518110616a9057fe5b602090810291909101015291810191600101616a5c565b509195945050505050565b616aba617afa565b60606000616ac6617afa565b6060616ad0617b73565b616ad9876168a8565b90506000805b616ae8836168f2565b15616bbd5780616b1357616b03616afe84616913565b6176a4565b6001600160a01b03168552616bb5565b8060011415616b3b57616b28616afe84616913565b6001600160a01b03166020860152616bb5565b8060021415616b6357616b50616afe84616913565b6001600160a01b03166040860152616bb5565b8060031415616b8f57616b78613dd384616913565b6001600160401b0316606086015260019150616bb5565b8060041415616bb057616ba9616ba484616913565b6176be565b9350616bb5565b616bbd565b600101616adf565b50929791965091945092505050565b6060611dc7616bda8361772e565b617814565b6060815160001415616c005750604080516000815260208101909152611d17565b606082600081518110616c0f57fe5b602002602001015190506000600190505b8351811015616c5057616c4682858381518110616c3957fe5b6020026020010151617866565b9150600101616c20565b50611160616c63825160c060ff166178e3565b82617866565b60608060006120026001600160a01b031663c473318f6040518163ffffffff1660e01b815260040160206040518083038186803b158015616ca957600080fd5b505afa158015616cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616ce191906180ab565b90508085518851011015616cf6575083518651015b606081604051908082528060200260200182016040528015616d3257816020015b616d1f617afa565b815260200190600190039081616d175790505b509050606082604051908082528060200260200182016040528015616d6b57816020015b6060815260200190600190039081616d565790505b50905060008060005b8b51831080616d835750895182105b8015616d8e57508581105b15617023578b51831415616dfe57898281518110616da857fe5b6020026020010151858281518110616dbc57fe5b6020026020010181905250888281518110616dd357fe5b6020026020010151848281518110616de757fe5b602090810291909101015260019182019101616d74565b8951821415616e69578b8381518110616e1357fe5b6020026020010151858281518110616e2757fe5b60200260200101819052508a8381518110616e3e57fe5b6020026020010151848281518110616e5257fe5b602090810291909101015260019283019201616d74565b898281518110616e7557fe5b6020026020010151606001516001600160401b03168c8481518110616e9657fe5b6020026020010151606001516001600160401b03161115616f12578b8381518110616ebd57fe5b6020026020010151858281518110616ed157fe5b60200260200101819052508a8381518110616ee857fe5b6020026020010151848281518110616efc57fe5b602002602001018190525082600101925061701b565b898281518110616f1e57fe5b6020026020010151606001516001600160401b03168c8481518110616f3f57fe5b6020026020010151606001516001600160401b03161015616fbb57898281518110616f6657fe5b6020026020010151858281518110616f7a57fe5b6020026020010181905250888281518110616f9157fe5b6020026020010151848281518110616fa557fe5b602002602001018190525081600101915061701b565b898281518110616fc757fe5b6020026020010151600001516001600160a01b03168c8481518110616fe857fe5b6020026020010151600001516001600160a01b0316101561700f578b8381518110616ebd57fe5b898281518110616da857fe5b600101616d74565b50929a91995090975050505050505050565b805182516000916001600160a01b03918216911614801561706f575081602001516001600160a01b031683602001516001600160a01b0316145b80156111605750506040908101519101516001600160a01b0390811691161490565b601254601354808211156170dc57805b828110156170da5760128054806170b457fe5b6001900381819060005260206000200160006170d09190617b2f565b90556001016170a1565b505b60008183106170eb57816170ed565b825b905060005b81811015617205576171aa6012828154811061710a57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156171985780601f1061716d57610100808354040283529160200191617198565b820191906000526020600020905b81548152906001019060200180831161717b57829003601f168201915b50505050506013838154811061341a57fe5b6171fd57601381815481106171bb57fe5b90600052602060002001601282815481106171d257fe5b9060005260206000200190805460018160011615610100020316600290046171fb929190617b93565b505b6001016170f2565b5082821115610e3457825b828110156172735760126013828154811061722757fe5b600091825260208083208454600181810187559585529190932092909101805461726a949390920192909160026101009282161592909202600019011604617b93565b50600101617210565b50505050565b601354600b54808211156172c457805b828110156172c257601380548061729c57fe5b6001900381819060005260206000200160006172b89190617b2f565b9055600101617289565b505b60008183106172d357816172d5565b825b905060005b818110156173f457617392601382815481106172f257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156173805780601f1061735557610100808354040283529160200191617380565b820191906000526020600020905b81548152906001019060200180831161736357829003601f168201915b5050505050600b8381548110615ee057fe5b6173ec57600b81815481106173a357fe5b9060005260206000209060160201600201601382815481106173c157fe5b9060005260206000200190805460018160011615610100020316600290046173ea929190617b93565b505b6001016172da565b5082821115610e3457825b82811015617273576013600b828154811061741657fe5b60009182526020808320845460018082018755958552919093206016929092029092016002908101805461745e95939094019390926000199082161561010002011604617b93565b506001016173ff565b6000818484111561748b5760405162461bcd60e51b8152600401610e1291906183b6565b505050900390565b600081836174b45760405162461bcd60e51b8152600401610e1291906183b6565b5060008385816174c057fe5b0495945050505050565b80516000906174db57506000611d17565b6020820151805160001a9060c08210156174fa57600092505050611d17565b5060019392505050565b8051600090811a608081101561751e576000915050611d17565b60b8811080617539575060c08110801590617539575060f881105b15617548576001915050611d17565b60c081101561755c5760b519019050611d17565b60f519019050611d17565b80516000908190811a60808110156175825760019150617641565b60b881101561759757607e1981019150617641565b60c08110156175e857600060b78203600186019550806020036101000a8651049150600181018201935050808310156175e25760405162461bcd60e51b8152600401610e1290618967565b50617641565b60f88110156175fd5760be1981019150617641565b600060f78203600186019550806020036101000a86510491506001810182019350508083101561763f5760405162461bcd60e51b8152600401610e1290618967565b505b5092915050565b805160009061765957506000611d17565b6000809050600061766d8460200151617504565b602085015185519181019250015b8082101561769b5761768c82617567565b8201915082600101925061767b565b50909392505050565b80516000906015146176b557600080fd5b611dc782616961565b80516060906176cc57600080fd5b60006176db8360200151617504565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015617712576020820181803683370190505b50905060008160200190506163ca8487602001510182856179b5565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff19841661777257506018617796565b6fffffffffffffffffffffffffffffffff19841661779257506010617796565b5060005b60208110156177cc578181815181106177ab57fe5b01602001516001600160f81b031916156177c4576177cc565b600101617796565b60008160200390506060816040519080825280601f01601f191660200182016040528015617801576020820181803683370190505b5080830196909652508452509192915050565b6060815160011480156178465750607f60f81b8260008151811061783457fe5b01602001516001600160f81b03191611155b15617852575080611d17565b611dc76178648351608060ff166178e3565b835b6060806040519050835180825260208201818101602087015b8183101561789757805183526020928301920161787f565b50855184518101855292509050808201602086015b818310156178c45780518352602092830192016178ac565b508651929092011591909101601f01601f191660405250905092915050565b606068010000000000000000831061790d5760405162461bcd60e51b8152600401610e12906187b2565b604080516001808252818301909252606091602082018180368337019050509050603784116179675782840160f81b8160008151811061794957fe5b60200101906001600160f81b031916908160001a9053509050611dc7565b60606179728561772e565b90508381510160370160f81b8260008151811061798b57fe5b60200101906001600160f81b031916908160001a9053506179ac8282617866565b95945050505050565b806179bf57610e34565b5b602081106179df578251825260209283019290910190601f19016179c0565b915181516020939093036101000a6000190180199091169216919091179052565b60405180608001604052806000815260200160001515815260200160608152602001617a2a617c5b565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617a7057805160ff1916838001178555617a9d565b82800160010185558215617a9d579182015b82811115617a9d578251825591602001919060010190617a82565b506131ea929150617c7a565b8260138101928215617a9d5791602002820182811115617a9d578251825591602001919060010190617a82565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b50805460018160011615610100020316600290046000825580601f10617b555750611f2f565b601f016020900490600052602060002090810190611f2f9190617c7a565b6040518060400160405280617b86617c41565b8152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617bcc5780548555617a9d565b82800160010185558215617a9d57600052602060002091601f016020900482015b82811115617a9d578254825591600101919060010190617bed565b8260138101928215617a9d5791820182811115617a9d578254825591600101919060010190617bed565b50611f2f906013810190617c7a565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b61318e91905b808211156131ea5760008155600101617c80565b8035611dc781618fe7565b60008083601f840112617cb0578182fd5b5081356001600160401b03811115617cc6578182fd5b6020830191508360208083028501011115615a0857600080fd5b6000601f8381840112617cf1578182fd5b8235617d04617cff82618f9c565b618f76565b818152925060208084019085810160005b84811015617d96578135880189603f820112617d3057600080fd5b838101356001600160401b03811115617d4857600080fd5b617d59818901601f19168601618f76565b81815260408c81848601011115617d6f57600080fd5b82818501888401375060009181018601919091528552509282019290820190600101617d15565b50505050505092915050565b600082601f830112617db2578081fd5b8135617dc0617cff82618f9c565b818152915060208083019084810181840286018201871015617de157600080fd5b6000805b85811015617d965782356001600160401b0381168114617e03578283fd5b85529383019391830191600101617de5565b60008083601f840112617e26578182fd5b5081356001600160401b03811115617e3c578182fd5b602083019150836020828501011115615a0857600080fd5b600060208284031215617e65578081fd5b813561116081618fe7565b600060208284031215617e81578081fd5b815161116081618fe7565b60008060008060408587031215617ea1578283fd5b84356001600160401b0380821115617eb7578485fd5b617ec388838901617c9f565b90965094506020870135915080821115617edb578384fd5b50617ee887828801617c9f565b95989497509550505050565b600080600060608486031215617f08578283fd5b83356001600160401b0380821115617f1e578485fd5b81860187601f820112617f2f578586fd5b80359250617f3f617cff84618f9c565b80848252602080830192508084018b828389028701011115617f5f57898afd5b8994505b86851015617f8957617f758c82617c94565b845260019490940193928101928101617f63565b509097508801359350505080821115617fa0578384fd5b617fac87838801617da2565b93506040860135915080821115617fc1578283fd5b50617fce86828701617ce0565b9150509250925092565b600060208284031215617fe9578081fd5b81518015158114611160578182fd5b6000806020838503121561800a578182fd5b82356001600160401b0381111561801f578283fd5b61802b85828601617e15565b90969095509350505050565b6000806000806040858703121561804c578384fd5b84356001600160401b0380821115618062578586fd5b61806e88838901617e15565b90965094506020870135915080821115618086578384fd5b50617ee887828801617e15565b6000602082840312156180a4578081fd5b5035919050565b6000602082840312156180bc578081fd5b5051919050565b600080604083850312156180d5578182fd5b505080516020909101519092909150565b6000806000604084860312156180fa578081fd5b833560ff8116811461810a578182fd5b925060208401356001600160401b03811115618124578182fd5b61813086828701617e15565b9497909650939450505050565b6000815180845260208085019450808401835b838110156181755781516001600160a01b031687529582019590820190600101618150565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526181c2816020860160208601618fbb565b601f01601f19169290920160200192915050565b600082516181e8818460208701618fbb565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b6001600160a01b0392909216825260ff16602082015260400190565b600060208252611160602083018461813d565b6000604082526182d4604083018561813d565b602083820381850152818551808452828401915082838202850101838801865b8381101561832257601f198784030185526183108383516181aa565b948601949250908501906001016182f4565b50909998505050505050505050565b600060808252618344608083018761813d565b828103602084810191909152865180835287820192820190845b8181101561837a5784518352938301939183019160010161835e565b5050848103604086015261838e818861813d565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b60006020825261116060208301846181aa565b6000604082526183dd604083018688618180565b82810360208401526183f0818587618180565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526042908201527f746865206275726e526174696f20706c75732073797374656d5265776172645260408201527f6174696f206d757374206265206e6f2067726561746572207468616e20313030606082015261030360f41b608082015260a00190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601f908201527f6f6e6c7920736c617368206f72207374616b6548756220636f6e747261637400604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b60208082526042908201527f7468652073797374656d526577617264526174696f20706c7573206275726e5260408201527f6174696f206d757374206265206e6f2067726561746572207468616e20313030606082015261030360f41b608082015260a00190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206d757374206265207374616b6548756200604082015260600190565b61ffff91909116815260200190565b90815260200190565b60008482528315156020830152606060408301526179ac60608301846181aa565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff85168252604060208301526179ac604083018486618180565b6040518181016001600160401b0381118282101715618f9457600080fd5b604052919050565b60006001600160401b03821115618fb1578081fd5b5060209081020190565b60005b83811015618fd6578181015183820152602001618fbe565b838111156172735750506000910152565b6001600160a01b0381168114611f2f57600080fdfe70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbbf905ec80f905e8f846942a7cdd959bfe8d9487b2a43b33565295a698f7e294b6a7edd747c0554875d3fc531d19ba1497992c5e941ff80f3f7f110ffd8920a3ac38fdef318fe94a3f86048c27395000f846946488aa4d1955ee33403f8ccb1d4de5fb97c7ade294220f003d8bdfaadf52aa1e55ae4cc485e6794875941a87e90e440a39c99aa9cb5cea0ad6a3f0b2407b86048c27395000f846949ef9f4360c606c7ab4db26b016007d3ad0ab86a0946103af86a874b705854033438383c82575f25bc29418e2db06cbff3e3c5f856410a1838649e760175786048c27395000f84694ee01c3b1283aa067c58eab4709f85e99d46de5fe94ee4b9bfb1871c64e2bcabb1dc382dc8b7c4218a29415904ab26ab0e99d70b51c220ccdcccabee6e29786048c27395000f84694685b1ded8013785d6623cc18d214320b6bb6475994a20ef4e5e4e7e36258dbf51f4d905114cb1b34bc9413e39085dc88704f4394d35209a02b1a9520320c86048c27395000f8469478f3adfc719c99674c072166708589033e2d9afe9448a30d5eaa7b64492a160f139e2da2800ec3834e94055838358c29edf4dcc1ba1985ad58aedbb6be2b86048c27395000f84694c2be4ec20253b8642161bc3f444f53679c1f3d479466f50c616d737e60d7ca6311ff0d9c434197898a94d1d678a2506eeaa365056fe565df8bc8659f28b086048c27395000f846942f7be8361c80a4c1e7e9aaf001d0877f1cfde218945f93992ac37f3e61db2ef8a587a436a161fd210b94ecbc4fb1a97861344dad0867ca3cba2b860411f086048c27395000f84694ce2fd7544e0b2cc94692d4a704debef7bcb613289444abc67b4b2fba283c582387f54c9cba7c34bafa948acc2ab395ded08bb75ce85bf0f95ad2abc51ad586048c27395000f84694b8f7166496996a7da21cf1f1b04d9b3e26a3d077946770572763289aac606e4f327c2f6cc1aa3b3e3b94882d745ed97d4422ca8da1c22ec49d880c4c097286048c27395000f846942d4c407bbe49438ed859fe965b140dcf1aab71a9943ad0939e120f33518fbba04631afe7a3ed6327b194b2bbb170ca4e499a2b0f3cc85ebfa6e8c4dfcbea86048c27395000f846946bbad7cf34b5fa511d8e963dbba288b1960e75d694853b0f6c324d1f4e76c8266942337ac1b0af1a229442498946a51ca5924552ead6fc2af08b94fcba648601d1a94a2000f846944430b3230294d12c6ab2aac5c2cd68e80b16b581947b107f4976a252a6939b771202c28e64e03f52d694795811a7f214084116949fc4f53cedbf189eeab28601d1a94a2000f84694ea0a6e3c511bbd10f4519ece37dc24887e11b55d946811ca77acfb221a49393c193f3a22db829fcc8e9464feb7c04830dd9ace164fc5c52b3f5a29e5018a8601d1a94a2000f846947ae2f5b9e386cd1b50a4550696d957cb4900f03a94e83bcc5077e6b873995c24bac871b5ad856047e19464e48d4057a90b233e026c1041e6012ada897fe88601d1a94a2000f8469482012708dafc9e1b880fd083b32182b869be8e09948e5adc73a2d233a1b496ed3115464dd6c7b887509428b383d324bc9a37f4e276190796ba5a8947f5ed8601d1a94a2000f8469422b81f8e175ffde54d797fe11eb03f9e3bf75f1d94a1c3ef7ca38d8ba80cce3bfc53ebd2903ed21658942767f7447f7b9b70313d4147b795414aecea54718601d1a94a2000f8469468bf0b8b6fb4e317a0f9d6f03eaf8ce6675bc60d94675cfe570b7902623f47e7f59c9664b5f5065dcf94d84f0d2e50bcf00f2fc476e1c57f5ca2d57f625b8601d1a94a2000f846948c4d90829ce8f72d0163c1d5cf348a862d5506309485c42a7b34309bee2ed6a235f86d16f059deec5894cc2cedc53f0fa6d376336efb67e43d167169f3b78601d1a94a2000f8469435e7a025f4da968de7e4d7e4004197917f4070f194b1182abaeeb3b4d8eba7e6a4162eac7ace23d57394c4fd0d870da52e73de2dd8ded19fe3d26f43a1138601d1a94a2000f84694d6caa02bbebaebb5d7e581e4b66559e635f805ff94c07335cf083c1c46a487f0325769d88e163b653694efaff03b42e41f953a925fc43720e45fb61a19938601d1a94a20000175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a diff --git a/core/systemcontracts/haber_fix/types.go b/core/systemcontracts/haber_fix/types.go new file mode 100644 index 0000000000..186f1abd86 --- /dev/null +++ b/core/systemcontracts/haber_fix/types.go @@ -0,0 +1,19 @@ +package haber_fix + +import _ "embed" + +// contract codes for Chapel upgrade +var ( + //go:embed chapel/ValidatorContract + ChapelValidatorContract string + //go:embed chapel/SlashContract + ChapelSlashContract string +) + +// contract codes for Mainnet upgrade +var ( + //go:embed mainnet/ValidatorContract + MainnetValidatorContract string + //go:embed mainnet/SlashContract + MainnetSlashContract string +) diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go index 393b529113..341fe7e512 100644 --- a/core/systemcontracts/upgrade.go +++ b/core/systemcontracts/upgrade.go @@ -4,17 +4,16 @@ import ( "encoding/hex" "fmt" "math/big" + "strings" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/core/systemcontracts/bruno" "github.com/ethereum/go-ethereum/core/systemcontracts/euler" "github.com/ethereum/go-ethereum/core/systemcontracts/feynman" feynmanFix "github.com/ethereum/go-ethereum/core/systemcontracts/feynman_fix" "github.com/ethereum/go-ethereum/core/systemcontracts/gibbs" + haberFix "github.com/ethereum/go-ethereum/core/systemcontracts/haber_fix" "github.com/ethereum/go-ethereum/core/systemcontracts/kepler" "github.com/ethereum/go-ethereum/core/systemcontracts/luban" "github.com/ethereum/go-ethereum/core/systemcontracts/mirror" @@ -23,6 +22,8 @@ import ( "github.com/ethereum/go-ethereum/core/systemcontracts/planck" "github.com/ethereum/go-ethereum/core/systemcontracts/plato" "github.com/ethereum/go-ethereum/core/systemcontracts/ramanujan" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" ) type UpgradeConfig struct { @@ -75,6 +76,8 @@ var ( feynmanUpgrade = make(map[string]*Upgrade) feynmanFixUpgrade = make(map[string]*Upgrade) + + haberFixUpgrade = make(map[string]*Upgrade) ) func init() { @@ -701,6 +704,38 @@ func init() { }, }, } + + haberFixUpgrade[mainNet] = &Upgrade{ + UpgradeName: "haberFix", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b743ce3f1f1e94c349b175cd6593bc263463b33b", + Code: haberFix.MainnetValidatorContract, + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b743ce3f1f1e94c349b175cd6593bc263463b33b", + Code: haberFix.MainnetSlashContract, + }, + }, + } + + haberFixUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "haberFix", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b743ce3f1f1e94c349b175cd6593bc263463b33b", + Code: haberFix.ChapelValidatorContract, + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b743ce3f1f1e94c349b175cd6593bc263463b33b", + Code: haberFix.ChapelSlashContract, + }, + }, + } } func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, lastBlockTime uint64, blockTime uint64, statedb *state.StateDB) { @@ -777,6 +812,10 @@ func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I applySystemContractUpgrade(feynmanFixUpgrade[network], blockNumber, statedb, logger) } + if config.IsOnHaberFix(blockNumber, lastBlockTime, blockTime) { + applySystemContractUpgrade(haberFixUpgrade[network], blockNumber, statedb, logger) + } + /* apply other upgrades */ @@ -799,7 +838,7 @@ func applySystemContractUpgrade(upgrade *Upgrade, blockNumber *big.Int, statedb } } - newContractCode, err := hex.DecodeString(cfg.Code) + newContractCode, err := hex.DecodeString(strings.TrimSpace(cfg.Code)) if err != nil { panic(fmt.Errorf("failed to decode new contract code: %s", err.Error())) } diff --git a/params/config.go b/params/config.go index e8d7049c36..cce876aaff 100644 --- a/params/config.go +++ b/params/config.go @@ -153,6 +153,7 @@ var ( FeynmanFixTime: newUint64(1713419340), // 2024-04-18 05:49:00 AM UTC CancunTime: newUint64(1718863500), // 2024-06-20 06:05:00 AM UTC HaberTime: newUint64(1718863500), // 2024-06-20 06:05:00 AM UTC + HaberFixTime: newUint64(1720591588), // 2024-07-10 06:06:28 AM UTC BohrTime: nil, Parlia: &ParliaConfig{ @@ -193,6 +194,7 @@ var ( FeynmanFixTime: newUint64(1711342800), // 2024-03-25 5:00:00 AM UTC CancunTime: newUint64(1713330442), // 2024-04-17 05:07:22 AM UTC HaberTime: newUint64(1716962820), // 2024-05-29 06:07:00 AM UTC + HaberFixTime: newUint64(1719986788), // 2024-07-03 06:06:28 AM UTC BohrTime: nil, Parlia: &ParliaConfig{ @@ -234,6 +236,7 @@ var ( FeynmanFixTime: newUint64(0), CancunTime: newUint64(0), HaberTime: newUint64(0), + HaberFixTime: newUint64(0), BohrTime: newUint64(0), Parlia: &ParliaConfig{ @@ -512,6 +515,7 @@ type ChainConfig struct { FeynmanFixTime *uint64 `json:"feynmanFixTime,omitempty"` // FeynmanFix switch time (nil = no fork, 0 = already activated) CancunTime *uint64 `json:"cancunTime,omitempty"` // Cancun switch time (nil = no fork, 0 = already on cancun) HaberTime *uint64 `json:"haberTime,omitempty"` // Haber switch time (nil = no fork, 0 = already on haber) + HaberFixTime *uint64 `json:"haberFixTime,omitempty"` // HaberFix switch time (nil = no fork, 0 = already on haberFix) BohrTime *uint64 `json:"bohrTime,omitempty"` // Bohr switch time (nil = no fork, 0 = already on bohr) PragueTime *uint64 `json:"pragueTime,omitempty"` // Prague switch time (nil = no fork, 0 = already on prague) VerkleTime *uint64 `json:"verkleTime,omitempty"` // Verkle switch time (nil = no fork, 0 = already on verkle) @@ -623,12 +627,17 @@ func (c *ChainConfig) String() string { HaberTime = big.NewInt(0).SetUint64(*c.HaberTime) } + var HaberFixTime *big.Int + if c.HaberFixTime != nil { + HaberFixTime = big.NewInt(0).SetUint64(*c.HaberFixTime) + } + var BohrTime *big.Int if c.BohrTime != nil { BohrTime = big.NewInt(0).SetUint64(*c.BohrTime) } - return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, Hertzfix: %v, ShanghaiTime: %v, KeplerTime: %v, FeynmanTime: %v, FeynmanFixTime: %v, CancunTime: %v, HaberTime: %v, BohrTime: %v, Engine: %v}", + return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, Hertzfix: %v, ShanghaiTime: %v, KeplerTime: %v, FeynmanTime: %v, FeynmanFixTime: %v, CancunTime: %v, HaberTime: %v, HaberFixTime: %v, BohrTime: %v, Engine: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -666,6 +675,7 @@ func (c *ChainConfig) String() string { FeynmanFixTime, CancunTime, HaberTime, + HaberFixTime, BohrTime, engine, ) @@ -939,6 +949,20 @@ func (c *ChainConfig) IsHaber(num *big.Int, time uint64) bool { return c.IsLondon(num) && isTimestampForked(c.HaberTime, time) } +// IsHaberFix returns whether time is either equal to the HaberFix fork time or greater. +func (c *ChainConfig) IsHaberFix(num *big.Int, time uint64) bool { + return c.IsLondon(num) && isTimestampForked(c.HaberFixTime, time) +} + +// IsOnHaberFix returns whether currentBlockTime is either equal to the HaberFix fork time or greater firstly. +func (c *ChainConfig) IsOnHaberFix(currentBlockNumber *big.Int, lastBlockTime uint64, currentBlockTime uint64) bool { + lastBlockNumber := new(big.Int) + if currentBlockNumber.Cmp(big.NewInt(1)) >= 0 { + lastBlockNumber.Sub(currentBlockNumber, big.NewInt(1)) + } + return !c.IsHaberFix(lastBlockNumber, lastBlockTime) && c.IsHaberFix(currentBlockNumber, currentBlockTime) +} + // IsBohr returns whether time is either equal to the Bohr fork time or greater. func (c *ChainConfig) IsBohr(num *big.Int, time uint64) bool { return c.IsLondon(num) && isTimestampForked(c.BohrTime, time) @@ -1017,6 +1041,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error { {name: "feynmanFixTime", timestamp: c.FeynmanFixTime}, {name: "cancunTime", timestamp: c.CancunTime}, {name: "haberTime", timestamp: c.HaberTime}, + {name: "haberFixTime", timestamp: c.HaberFixTime}, {name: "bohrTime", timestamp: c.BohrTime}, {name: "pragueTime", timestamp: c.PragueTime, optional: true}, {name: "verkleTime", timestamp: c.VerkleTime, optional: true}, @@ -1165,6 +1190,15 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, headNumber *big.Int, if isForkTimestampIncompatible(c.CancunTime, newcfg.CancunTime, headTimestamp) { return newTimestampCompatError("Cancun fork timestamp", c.CancunTime, newcfg.CancunTime) } + if isForkTimestampIncompatible(c.HaberTime, newcfg.HaberTime, headTimestamp) { + return newTimestampCompatError("Haber fork timestamp", c.HaberTime, newcfg.HaberTime) + } + if isForkTimestampIncompatible(c.HaberFixTime, newcfg.HaberFixTime, headTimestamp) { + return newTimestampCompatError("HaberFix fork timestamp", c.HaberFixTime, newcfg.HaberFixTime) + } + if isForkTimestampIncompatible(c.BohrTime, newcfg.BohrTime, headTimestamp) { + return newTimestampCompatError("Bohr fork timestamp", c.BohrTime, newcfg.BohrTime) + } if isForkTimestampIncompatible(c.PragueTime, newcfg.PragueTime, headTimestamp) { return newTimestampCompatError("Prague fork timestamp", c.PragueTime, newcfg.PragueTime) } From d52628aa82b0856b51c5ce6c3a4857e2c3bfcd8a Mon Sep 17 00:00:00 2001 From: zoro <296179868@qq.com> Date: Thu, 27 Jun 2024 17:24:49 +0800 Subject: [PATCH 3/4] doc: add changelog for v1.4.11 (#2548) --- CHANGELOG.md | 8 ++++++++ params/config.go | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56ec8d070c..026883ef23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,12 @@ # Changelog + +## v1.4.11 + +### BUGFIX +* [\#2534](https://github.com/bnb-chain/bsc/pull/2534) fix: nil pointer when clear simulating bid +* [\#2535](https://github.com/bnb-chain/bsc/pull/2535) upgrade: add HaberFix hardfork + + ## v1.4.10 ### FEATURE NA diff --git a/params/config.go b/params/config.go index cce876aaff..14cc6cff53 100644 --- a/params/config.go +++ b/params/config.go @@ -153,7 +153,7 @@ var ( FeynmanFixTime: newUint64(1713419340), // 2024-04-18 05:49:00 AM UTC CancunTime: newUint64(1718863500), // 2024-06-20 06:05:00 AM UTC HaberTime: newUint64(1718863500), // 2024-06-20 06:05:00 AM UTC - HaberFixTime: newUint64(1720591588), // 2024-07-10 06:06:28 AM UTC + HaberFixTime: nil, // TBD BohrTime: nil, Parlia: &ParliaConfig{ From c2226a0c9fadbe4a8f10a82eec329d127719f6b7 Mon Sep 17 00:00:00 2001 From: zoro <296179868@qq.com> Date: Thu, 27 Jun 2024 17:35:46 +0800 Subject: [PATCH 4/4] release: bump version to 1.4.11 (#2550) --- params/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/params/version.go b/params/version.go index 93aae8c7b3..aa6c0c2c7d 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 4 // Minor version component of the current release - VersionPatch = 10 // Patch version component of the current release + VersionPatch = 11 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string )