solc-0.8.36-doubleshift20 0x83bc649fcdb2c8da146b2154a559ddedf937ef12 optimized-low-runs
20563 bytes
608060405260043610610364575f3560e01c806303dcfbdc1461041657806306be9c53146104485780630716e2421461046857806308061aeb1461048957806308388426146104c7578063086e16c0146104e657806308c73259146105045780630de371e2146105305780630ea9e8521461054f57806310ddce8e1461056f57806312c53c9b146105a2578063158f8f59146105c25780631665f66d146105e15780631729d10b1461060057806317e51e801461061f5780631991c2251461063e5780631aab9ef11461065d5780631e95e60e1461067c5780631ee665c41461069b57806322828cc2146106ba57806326d5d54a146106d957806328a947d91461073257806328ac82e7146107475780632db004a31461076657806335876476146107915780633659cfe6146107b057806337cfdaca146107cf578063397a1b28146107e35780633a53acb014610802578063439766ce14610821578063456a23a6146108355780634690484014610854578063469963aa1461087357806346d4b714146108925780634c73f498146108b15780634f1ef286146108d057806351199700146108e357806352d1902d1461090257806353f3fcb114610916578063546017261461092f578063561bddf81461094f57806356f1199b1461096e5780635c975abb1461098d578063616e6c1b146109ad578063715018a6146109cc57806371cb700f146109e05780637346f1aa146109ff5780637c8dc44014610a1f5780637c90fbf014610a3e5780638da5cb5b14610a64578063917266fa14610a785780639795947314610a975780639a8a302b14610ac5578063aaf10f4214610ae4578063b46a130e14610af8578063baaff11614610b17578063bac1520314610b36578063c00b2d6114610b4a578063c00c2d7314610b69578063c98bea5b14610b88578063d0e30db014610baf578063d67b8fee14610bb7578063d6951aa914610bd6578063da79205814610bf5578063da8ed1f714610c19578063dcbfb6c314610c38578063de70b59f14610c57578063e453793414610c76578063e74b981b14610cae578063e939482314610ccd578063ee30511614610d00578063f2c5998a14610d1f578063f2fde38b14610d3e578063f340fa0114610d5d578063f3fef3a314610d70578063f9609f0814610d8f578063fc6dfe4e14610da2575f5ffd5b36610412576001600160801b033411156103915760405163162908e360e11b815260040160405180910390fd5b60cf80543491905f906103ae9084906001600160801b03166141e4565b92506101000a8154816001600160801b03021916908360801b60801c02179055503460cf60108282829054906101000a900460801b60801c6103f09190614203565b92506101000a8154816001600160801b03021916908360801b60801c02179055005b5f5ffd5b348015610421575f5ffd5b50610435610430366004614236565b610dd0565b6040519081526020015b60405180910390f35b348015610453575f5ffd5b506104355f5160206150135f395f51905f5281565b348015610473575f5ffd5b506104876104823660046142c3565b610e99565b005b348015610494575f5ffd5b506104b76104a3366004614301565b60db6020525f908152604090205460ff1681565b604051901515815260200161043f565b3480156104d2575f5ffd5b506104876104e1366004614360565b610f90565b3480156104f1575f5ffd5b5061048761050036600461447c565b5050565b34801561050f575f5ffd5b5060e054610523906001600160a01b031681565b60405161043f91906144ad565b34801561053b575f5ffd5b5060ce54610523906001600160a01b031681565b34801561055a575f5ffd5b506104355f5160206150335f395f51905f5281565b34801561057a575f5ffd5b5060d45461059590600160801b90046001600160801b031681565b60405161043f91906144c1565b3480156105ad575f5ffd5b5060ce546104b790600160a01b900460ff1681565b3480156105cd575f5ffd5b506104876105dc366004614301565b611567565b3480156105ec575f5ffd5b506104876105fb3660046144e9565b6116b8565b34801561060b575f5ffd5b5060de54610523906001600160a01b031681565b34801561062a575f5ffd5b5060dd54610523906001600160a01b031681565b348015610649575f5ffd5b506104876106583660046144e9565b61172a565b348015610668575f5ffd5b50610435610677366004614504565b6117ac565b348015610687575f5ffd5b50610523610696366004614536565b6118f3565b3480156106a6575f5ffd5b506104876106b536600461454d565b61191b565b3480156106c5575f5ffd5b5060c954610523906001600160a01b031681565b3480156106e4575f5ffd5b506107156106f33660046145ce565b60d76020525f908152604090205463ffffffff80821691600160201b90041682565b6040805163ffffffff93841681529290911660208301520161043f565b34801561073d575f5ffd5b5061043560e15481565b348015610752575f5ffd5b5060cb54610523906001600160a01b031681565b348015610771575f5ffd5b50610435610780366004614536565b60d86020525f908152604090205481565b34801561079c575f5ffd5b506104876107ab3660046145ec565b6119bd565b3480156107bb575f5ffd5b506104876107ca366004614301565b611be2565b3480156107da575f5ffd5b50610435611ca9565b3480156107ee575f5ffd5b506104356107fd36600461467d565b611cd8565b34801561080d575f5ffd5b5061043561081c366004614536565b611df5565b34801561082c575f5ffd5b50610487611e8f565b348015610840575f5ffd5b5060cf54610595906001600160801b031681565b34801561085f575f5ffd5b5060d054610523906001600160a01b031681565b34801561087e575f5ffd5b5060ca54610523906001600160a01b031681565b34801561089d575f5ffd5b506104876108ac3660046146a7565b61201f565b3480156108bc575f5ffd5b506104876108cb3660046146a7565b612159565b6104876108de366004614704565b6121f5565b3480156108ee575f5ffd5b506104356108fd366004614301565b6122aa565b34801561090d575f5ffd5b506104356123b9565b348015610921575f5ffd5b5060dc546104b79060ff1681565b34801561093a575f5ffd5b506104355f516020614fac5f395f51905f5281565b34801561095a575f5ffd5b50610435610969366004614536565b612465565b348015610979575f5ffd5b50610487610988366004614301565b6124ef565b348015610998575f5ffd5b5060dc546104b790600160881b900460ff1681565b3480156109b8575f5ffd5b506104876109c7366004614536565b612648565b3480156109d7575f5ffd5b50610487612725565b3480156109eb575f5ffd5b5060d254610523906001600160a01b031681565b348015610a0a575f5ffd5b5060d9546104b790600160a01b900460ff1681565b348015610a2a575f5ffd5b50610487610a39366004614790565b612738565b348015610a49575f5ffd5b5060cf5461059590600160801b90046001600160801b031681565b348015610a6f575f5ffd5b50610523612898565b348015610a83575f5ffd5b50610435610a92366004614536565b6128a7565b348015610aa2575f5ffd5b506104b7610ab1366004614301565b60da6020525f908152604090205460ff1681565b348015610ad0575f5ffd5b5060d154610523906001600160a01b031681565b348015610aef575f5ffd5b50610523612962565b348015610b03575f5ffd5b50610435610b123660046147b0565b612970565b348015610b22575f5ffd5b50610487610b313660046147ef565b6129f3565b348015610b41575f5ffd5b50610487612bcc565b348015610b55575f5ffd5b50610487610b64366004614836565b612d47565b348015610b74575f5ffd5b5060d954610523906001600160a01b031681565b348015610b93575f5ffd5b5060d5546107159063ffffffff80821691600160201b90041682565b610435612e53565b348015610bc2575f5ffd5b5060cd54610523906001600160a01b031681565b348015610be1575f5ffd5b5060d454610595906001600160801b031681565b348015610c00575f5ffd5b5060dc546105959061010090046001600160801b031681565b348015610c24575f5ffd5b50610487610c33366004614863565b612e5d565b348015610c43575f5ffd5b5060df54610523906001600160a01b031681565b348015610c62575f5ffd5b50610487610c7136600461454d565b612f0b565b348015610c81575f5ffd5b5060d054610c9990600160a01b900463ffffffff1681565b60405163ffffffff909116815260200161043f565b348015610cb9575f5ffd5b50610487610cc8366004614301565b61303c565b348015610cd8575f5ffd5b506105237f000000000000000000000000000000000000000000000000000000000000000081565b348015610d0b575f5ffd5b5060cc54610523906001600160a01b031681565b348015610d2a575f5ffd5b50610487610d39366004614536565b613122565b348015610d49575f5ffd5b50610487610d58366004614301565b6131fd565b610435610d6b366004614301565b613273565b348015610d7b575f5ffd5b50610435610d8a36600461467d565b6132bb565b610435610d9d3660046146a7565b6136f6565b348015610dad575f5ffd5b506104b7610dbc366004614301565b60d66020525f908152604090205460ff1681565b5f610dd9613760565b60ce546001600160a01b031663d505accf333085356020870135610e036060890160408a0161487e565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501526044840191909152606483015260ff166084820152606085013560a4820152608085013560c482015260e4015f604051808303815f87803b158015610e73575f5ffd5b505af1925050508015610e84575060015b50610e8f8484611cd8565b90505b9392505050565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490610ed8905f5160206150335f395f51905f5290339060040161489e565b602060405180830381865afa158015610ef3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1791906148b5565b610f345760405163209296a360e01b815260040160405180910390fd5b5f5b81811015610f8b57828282818110610f5057610f506148d0565b905060200201357f339b23d24a078f6403801d644f7cba5045424e28175a49da36de4445b66387da60405160405180910390a2600101610f36565b505050565b610f98613760565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490610fd7905f5160206150135f395f51905f5290339060040161489e565b602060405180830381865afa158015610ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101691906148b5565b6110335760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec80000060e15410806110565750686f05b59d3b2000000060e154115b1561107457604051633f4219cd60e21b815260040160405180910390fd5b84511580611083575084518314155b8061108f575084518114155b156110ad5760405163a9854bc960e01b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af11580156110f5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111991906148e4565b60e15461112691906148fb565b90505f86516001600160401b038111156111425761114261431c565b60405190808252806020026020018201604052801561119d57816020015b61118a604051806080016040528060608152602001606081526020015f8152602001606081525090565b8152602001906001900390816111605790505b5090505f5b87518110156114e05760ca5488515f916001600160a01b03169063b165e295908b90859081106111d4576111d46148d0565b60200260200101516040518263ffffffff1660e01b81526004016111fa91815260200190565b602060405180830381865afa158015611215573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611239919061490e565b90505f8160601b60601c63bcbb073a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611275573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611299919061490e565b60ca54604051632a25a9af60e11b81529192505f916001600160a01b039091169063544b535e906112ce9085906004016144ad565b5f60405180830381865afa1580156112e8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261130f9190810190614929565b60c9549091505f906001600160a01b031663125ae56b8c8c88818110611337576113376148d0565b9050602002810190611349919061499d565b8c8c8a81811061135b5761135b6148d0565b905060200281019061136d919061499d565b878d6040518763ffffffff1660e01b815260040161139096959493929190614a35565b602060405180830381865afa1580156113ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113cf91906148e4565b90505f60405180608001604052808d8d898181106113ef576113ef6148d0565b9050602002810190611401919061499d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018b8b8981811061144c5761144c6148d0565b905060200281019061145e919061499d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506020808301869052604080519182018152918152910152875190915081908890889081106114c3576114c36148d0565b6020026020010181905250505050505080806001019150506111a2565b505f8751836114ef9190614a83565b90506114fa816137ad565b60c95460e154604051635d57f88b60e11b81526001600160a01b039092169163baaff11691849161152f918791600401614a9a565b5f604051808303818588803b158015611546575f5ffd5b505af1158015611558573d5f5f3e3d5ffd5b50505050505050505050505050565b6001600160a01b0381165f90815260db602052604090205460ff166115c45760405162461bcd60e51b815260206004820152600e60248201526d139bdd081c9959da5cdd195c995960921b60448201526064015b60405180910390fd5b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490611603905f5160206150335f395f51905f5290339060040161489e565b602060405180830381865afa15801561161e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164291906148b5565b61165e5760405162461bcd60e51b81526004016115bb90614b50565b6001600160a01b0381165f90815260db602052604090819020805460ff19169055517f8a5afe4e68ed1b812242442424ef608ee7b0a23b6111c6183e781ac4656e8173906116ad9083906144ad565b60405180910390a150565b60d9546001600160a01b031633146116e3576040516317fe949f60e01b815260040160405180910390fd5b60dc805482919060019061170690849061010090046001600160801b0316614203565b92506101000a8154816001600160801b03021916908360801b60801c021790555050565b60d9546001600160a01b03163314611755576040516317fe949f60e01b815260040160405180910390fd5b7fafea3ee583ed00355634c0a2f47d947b6af95fda2bc1dbe0ff919c45166789d48160405161178491906144c1565b60405180910390a160d054610500906001600160a01b03166001600160801b0383165f612970565b5f6117b5613760565b60cc546001600160a01b031633146117e0576040516317fe949f60e01b815260040160405180910390fd5b5f6117ea84611df5565b90506001600160601b038411806117ff575083155b80611808575080155b156118265760405163162908e360e11b815260040160405180910390fd5b60d25460ce54611845916001600160a01b03918216913391168761380c565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb09061187b90889086908b908a90600401614b7a565b6020604051808303815f875af1158015611897573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118bb91906148e4565b60405190915033905f516020614ff35f395f51905f52906118e29089908990600290614bcc565b60405180910390a295945050505050565b60d38181548110611902575f80fd5b5f918252602090912001546001600160a01b0316905081565b611923613760565b335f90815260db602052604090205460ff166119515760405162461bcd60e51b81526004016115bb90614b50565b60c954604051637c561c3960e11b81526001600160a01b039091169063f8ac3872906119899088908890889088908890600401614d03565b5f604051808303815f87803b1580156119a0575f5ffd5b505af11580156119b2573d5f5f3e3d5ffd5b505050505050505050565b5f54610100900460ff16158080156119db57505f54600160ff909116105b806119fb57506119ea3061386c565b1580156119fb57505f5460ff166001145b611a5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016115bb565b5f805460ff191660011790558015611a7f575f805461ff0019166101001790555b6001600160a01b0388161580611a9c57506001600160a01b038716155b80611aae57506001600160a01b038616155b80611ac057506001600160a01b038516155b80611ad257506001600160a01b038416155b15611af05760405163baca868960e01b815260040160405180910390fd5b611af861387b565b611b006138a9565b60ce80546001600160a01b03199081166001600160a01b038b81169190911790925560c9805482168a841617905560ca8054821689841617905560cc8054821688841617905560cd8054821687841617905560dc8054600160881b6001600160901b031990911617905560d98054821686841617905560d2805490911691841691909117905560de805460ff60a01b191690558015611bd8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611c2a5760405162461bcd60e51b81526004016115bb90614d62565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611c5c6138cf565b6001600160a01b031614611c825760405162461bcd60e51b81526004016115bb90614d9b565b611c8b816138ea565b604080515f80825260208201909252611ca691839190613942565b50565b60cf545f90611cca906001600160801b03600160801b820481169116614203565b6001600160801b0316919050565b5f611ce1613760565b5f611ceb83611df5565b90506001600160601b03831180611d00575082155b80611d09575080155b15611d275760405163162908e360e11b815260040160405180910390fd5b60d25460ce54611d46916001600160a01b03918216913391168661380c565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb090611d7c90879086908a908790600401614b7a565b6020604051808303815f875af1158015611d98573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dbc91906148e4565b60405190915033905f516020614ff35f395f51905f5290611de39088908890600190614bcc565b60405180910390a29150505b92915050565b5f5f611dff611ca9565b9050805f03611e1057505f92915050565b60ce5460408051633a98ef3960e01b8152905183926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015611e57573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7b91906148e4565b611e859085614a83565b610e929190614dd4565b60e05460408051633bd48c9f60e11b815290516001600160a01b03909216916391d148549183916377a9193e916004808201926020929091908290030181865afa158015611edf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0391906148e4565b336040518363ffffffff1660e01b8152600401611f2192919061489e565b602060405180830381865afa158015611f3c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6091906148b5565b611f7d5760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff1615611fd25760405162461bcd60e51b815260206004820152601860248201527714185d5cd8589b194e88185b1c9958591e481c185d5cd95960421b60448201526064016115bb565b60dc805460ff60881b1916600160881b1790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906120159033906144ad565b60405180910390a1565b612027613aa9565b60df546001600160a01b031615801561204857506001600160a01b03811615155b6120645760405162461bcd60e51b81526004016115bb90614df3565b60e0546001600160a01b0316156120b35760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016115bb565b60df80546001600160a01b038084166001600160a01b03199283161790925560e08054928516929091169190911790555f6120ec611ca9565b60cf80546001600160801b03478116600160801b908102928216929092179283905592935061211e92910416826141e4565b60cf80546001600160801b0319166001600160801b0392909216919091179055612146611ca9565b6001600160801b03821614610f8b575f5ffd5b612161613aa9565b6001600160a01b0382161580159061218157506001600160a01b03811615155b8015612196575060dd546001600160a01b0316155b80156121ab575060de546001600160a01b0316155b6121c75760405162461bcd60e51b81526004016115bb90614df3565b60dd80546001600160a01b039384166001600160a01b03199182161790915560de8054929093169116179055565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361223d5760405162461bcd60e51b81526004016115bb90614d62565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661226f6138cf565b6001600160a01b0316146122955760405162461bcd60e51b81526004016115bb90614d9b565b61229e826138ea565b61050082826001613942565b60ce5460408051633a98ef3960e01b815290515f92839283926001600160a01b0390921691633a98ef39916004808201926020929091908290030181865afa1580156122f8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061231c91906148e4565b905080156123b25760ce5460405163673e156160e11b815282916001600160a01b03169063ce7c2ac2906123549088906004016144ad565b602060405180830381865afa15801561236f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239391906148e4565b61239b611ca9565b6123a59190614a83565b6123af9190614dd4565b91505b5092915050565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146124535760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60648201526084016115bb565b505f516020614f8c5f395f51905f5290565b60ce5460408051633a98ef3960e01b815290515f9283926001600160a01b0390911691633a98ef39916004808201926020929091908290030181865afa1580156124b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d591906148e4565b9050805f036124e657505f92915050565b80611e7b611ca9565b60e054604051632474521560e21b81526001600160a01b03909116906391d148549061252e905f5160206150335f395f51905f5290339060040161489e565b602060405180830381865afa158015612549573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061256d91906148b5565b61258a5760405163209296a360e01b815260040160405180910390fd5b6001600160a01b0381165f90815260db602052604090205460ff16156125e75760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064016115bb565b6040805160208082018352600182526001600160a01b0384165f90815260db9091528290209051815460ff1916901515179055517f8bef88cac8d05094711d367d04bf4f2fcb4b589ca12a6ed8c8f375000e1e848e906116ad9083906144ad565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612687905f5160206150335f395f51905f5290339060040161489e565b602060405180830381865afa1580156126a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c691906148b5565b6126e35760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec8000008110806127025750686f05b59d3b2000000081115b1561272057604051633f4219cd60e21b815260040160405180910390fd5b60e155565b61272d613aa9565b6127365f613b08565b565b5f612742826128a7565b60df549091506001600160a01b03163314612770576040516317fe949f60e01b815260040160405180910390fd5b82158061277b575081155b156127995760405163162908e360e11b815260040160405180910390fd5b828111156127ba5760405163162908e360e11b815260040160405180910390fd5b60cf80548391905f906127d79084906001600160801b03166141e4565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b81526001600160a01b039091169063ee7a7c049061282c9033908790600401614e14565b5f604051808303815f87803b158015612843575f5ffd5b505af1158015612855573d5f5f3e3d5ffd5b505060408051868152602081018690527f888a2432cd9af74ee23f9ebdf262368f5434dffe681b3c7426880c6639b2a74a935001905060405180910390a1505050565b6033546001600160a01b031690565b5f5f6128b1611ca9565b9050805f036128c257505f92915050565b60ce5460408051633a98ef3960e01b815290515f926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015612909573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292d91906148e4565b6129379085614a83565b90508160016129468284614e2d565b61295091906148fb565b61295a9190614dd4565b949350505050565b5f61296b6138cf565b905090565b5f612979613760565b60de546001600160a01b031633148061299c575060d9546001600160a01b031633145b6129b85760405162461bcd60e51b81526004016115bb90614b50565b8360601b60601c5f516020614f4c5f395f51905f52846001856040516129e093929190614e40565b60405180910390a2610e8f845f85613b59565b6129fb613760565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612a3a905f5160206150135f395f51905f5290339060040161489e565b602060405180830381865afa158015612a55573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a7991906148b5565b612a965760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec800000811080612ab55750686f05b59d3b2000000081115b15612ad357604051633f4219cd60e21b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af1158015612b1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b3f91906148e4565b612b4990836148fb565b90505f612b568483614a83565b9050612b61816137ad565b60c954604051635d57f88b60e11b81526001600160a01b039091169063baaff116908390612b9790899089908990600401614e6d565b5f604051808303818588803b158015612bae575f5ffd5b505af1158015612bc0573d5f5f3e3d5ffd5b50505050505050505050565b60e0546040805163421d0eb360e01b815290516001600160a01b03909216916391d1485491839163421d0eb3916004808201926020929091908290030181865afa158015612c1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c4091906148e4565b336040518363ffffffff1660e01b8152600401612c5e92919061489e565b602060405180830381865afa158015612c79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c9d91906148b5565b612cba5760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff16612d0a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016115bb565b60dc805460ff60881b191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906120159033906144ad565b60cc546001600160a01b03163314612d72576040516317fe949f60e01b815260040160405180910390fd5b60cf54612d899082906001600160801b0316614e90565b60cf80546001600160801b0319166001600160801b03929092169190911790557f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511612dd2611ca9565b60ce5460408051633a98ef3960e01b815290516001600160a01b0390921691633a98ef39916004808201926020929091908290030181865afa158015612e1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e3e91906148e4565b604080519283526020830191909152016116ad565b5f61296b5f613273565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612e9c905f5160206150335f395f51905f5290339060040161489e565b602060405180830381865afa158015612eb7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612edb91906148b5565b612ef85760405163209296a360e01b815260040160405180910390fd5b60dc805460ff1916911515919091179055565b612f13613760565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612f52905f516020614fac5f395f51905f5290339060040161489e565b602060405180830381865afa158015612f6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906148b5565b612fae5760405163209296a360e01b815260040160405180910390fd5b5f612fc183670de0b6b3a7640000614a83565b9050612fcc816137ad565b60c954604051632dc4817560e21b81526001600160a01b039091169063b71205d4908390613006908a908a908a908a908a90600401614d03565b5f604051808303818588803b15801561301d575f5ffd5b505af115801561302f573d5f5f3e3d5ffd5b5050505050505050505050565b60e054604051632474521560e21b81526001600160a01b03909116906391d148549061307b905f5160206150335f395f51905f5290339060040161489e565b602060405180830381865afa158015613096573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ba91906148b5565b6130d75760405163209296a360e01b815260040160405180910390fd5b60d080546001600160a01b0319166001600160a01b0383161790556040517fbf5406678e9fe702eaea01d92d3b62ac5be0a14e1802562e2a428364d30d1b11906116ad9083906144ad565b60df546001600160a01b03163314801590613148575060d2546001600160a01b03163314155b801561317d5750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b1561319b576040516317fe949f60e01b815260040160405180910390fd5b60ce54604051633b9e9f0160e21b81526001600160a01b039091169063ee7a7c04906131cd9033908590600401614e14565b5f604051808303815f87803b1580156131e4575f5ffd5b505af11580156131f6573d5f5f3e3d5ffd5b5050505050565b613205613aa9565b6001600160a01b03811661326a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016115bb565b611ca681613b08565b5f61327c613760565b60405133905f516020614f4c5f395f51905f52906132a09034906001908790614e40565b60405180910390a26132b333345f613b59565b90505b919050565b5f6132c4613760565b5f6132ce836128a7565b60d2549091506001600160a01b03163314806132f4575060cc546001600160a01b031633145b80613309575060df546001600160a01b031633145b8061333c5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6133585760405162461bcd60e51b81526004016115bb90614b50565b60cf54600160801b90046001600160801b03168311806133e4575060ce546040516370a0823160e01b815284916001600160a01b0316906370a08231906133a39033906004016144ad565b602060405180830381865afa1580156133be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133e291906148e4565b105b156134025760405163bb55fd2760e01b815260040160405180910390fd5b6001600160801b03831180613415575082155b8061341e575080155b1561343c5760405163162908e360e11b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156134a5575060dc5460cf54849161349a916001600160801b03610100909204821691600160801b909104166141e4565b6001600160801b0316105b156134c35760405163bb55fd2760e01b815260040160405180910390fd5b60d2546001600160a01b031633036136455760dc5461010090046001600160801b03168311156135065760405163bb55fd2760e01b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001615613600575f7f000000000000000000000000000000000000000000000000000000000000000060601b60601c63341c6b3b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561358f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b39190614ebd565b60cf5490915084906135d6908390600160801b90046001600160801b03166141e4565b6001600160801b031610156135fe5760405163bb55fd2760e01b815260040160405180910390fd5b505b60dc805484919060019061362390849061010090046001600160801b03166141e4565b92506101000a8154816001600160801b03021916908360801b60801c02179055505b60cf805484919060109061366a908490600160801b90046001600160801b03166141e4565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b81526001600160a01b039091169063ee7a7c04906136bf9033908590600401614e14565b5f604051808303815f87803b1580156136d6575f5ffd5b505af11580156136e8573d5f5f3e3d5ffd5b50505050610e928484613c95565b5f6136ff613760565b60cc546001600160a01b031633146137295760405162461bcd60e51b81526004016115bb90614b50565b60405133905f516020614f4c5f395f51905f529061374d9034906002908790614e40565b60405180910390a2610e9233345f613b59565b60dc54600160881b900460ff16156127365760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016115bb565b60cf80548291905f906137ca9084906001600160801b0316614203565b92506101000a8154816001600160801b03021916908360801b60801c02179055508060cf60108282829054906101000a900460801b60801c61170691906141e4565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613866908590613d35565b50505050565b6001600160a01b03163b151590565b5f54610100900460ff166138a15760405162461bcd60e51b81526004016115bb90614ed8565b612736613dfe565b5f54610100900460ff166127365760405162461bcd60e51b81526004016115bb90614ed8565b5f516020614f8c5f395f51905f52546001600160a01b031690565b60e054604051635006bb7b60e01b81526001600160a01b0390911690635006bb7b9061391a9033906004016144ad565b5f6040518083038186803b158015613930575f5ffd5b505afa1580156131f6573d5f5f3e3d5ffd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561397557610f8b83613e2d565b8260601b60601c6352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156139cc575060408051601f3d908101601f191682019092526139c9918101906148e4565b60015b613a2f5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016115bb565b5f516020614f8c5f395f51905f528114613a9d5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016115bb565b50610f8b838383613ec6565b33613ab2612898565b6001600160a01b0316146127365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016115bb565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cf80545f918491601090613b7f908490600160801b90046001600160801b0316614203565b82546101009290920a6001600160801b0381810219909316918316021790915560cf805485935090915f91613bb691859116614203565b92506101000a8154816001600160801b03021916908360801b60801c02179055505f8284613be49190614e2d565b90505f613bf082613eea565b90506001600160801b03821180613c05575081155b80613c0e575080155b15613c2c5760405163162908e360e11b815260040160405180910390fd5b60ce546040516329460cc560e11b81526001600160a01b039091169063528c198a90613c5e9089908590600401614e14565b5f604051808303815f87803b158015613c75575f5ffd5b505af1158015613c87573d5f5f3e3d5ffd5b509298975050505050505050565b60405147905f906001600160a01b0385169084908381818185875af1925050503d805f8114613cdf576040519150601f19603f3d011682016040523d82523d5f602084013e613ce4565b606091505b50509050808015613cfe5750613cfa83836148fb565b4710155b6138665760405162461bcd60e51b815260206004820152600860248201526714d95b9911985a5b60c21b60448201526064016115bb565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201525f90613d81906001600160a01b038516908490613f0f565b805190915015610f8b5780806020019051810190613d9f91906148b5565b610f8b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016115bb565b5f54610100900460ff16613e245760405162461bcd60e51b81526004016115bb90614ed8565b61273633613b08565b613e368161386c565b613e985760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016115bb565b5f516020614f8c5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b613ecf83613f1d565b5f82511180613edb5750805b15610f8b576138668383613f5c565b5f5f82613ef5611ca9565b613eff91906148fb565b9050805f03611e10575090919050565b6060610e8f84845f85614047565b613f2681613e2d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060613f678361386c565b613fc25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016115bb565b5f5f8460601b60601c84604051613fd99190614f23565b5f60405180830381855af49150503d805f8114614011576040519150601f19603f3d011682016040523d82523d5f602084013e614016565b606091505b509150915061403e8282604051806060016040528060278152602001614fcc6027913961411b565b95945050505050565b6060824710156140a85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016115bb565b5f5f8660601b60601c85876040516140c09190614f23565b5f6040518083038185875af1925050503d805f81146140fa576040519150601f19603f3d011682016040523d82523d5f602084013e6140ff565b606091505b509150915061411087838387614134565b979650505050505050565b6060831561412a575081610e92565b610e9283836141a6565b606083156141a05782515f036141995761414d8561386c565b6141995760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115bb565b508161295a565b61295a83835b8151156141b65781518083602001fd5b8060405162461bcd60e51b81526004016115bb9190614f39565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b038281168282160390811115611def57611def6141d0565b6001600160801b038181168382160190811115611def57611def6141d0565b6001600160a01b0381168114611ca6575f5ffd5b5f5f5f83850360e0811215614249575f5ffd5b843561425481614222565b93506020850135925060a0603f198201121561426e575f5ffd5b506040840190509250925092565b5f5f83601f84011261428c575f5ffd5b5081356001600160401b038111156142a2575f5ffd5b6020830191508360208260051b85010111156142bc575f5ffd5b9250929050565b5f5f602083850312156142d4575f5ffd5b82356001600160401b038111156142e9575f5ffd5b6142f58582860161427c565b90969095509350505050565b5f60208284031215614311575f5ffd5b8135610e9281614222565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156143585761435861431c565b604052919050565b5f5f5f5f5f60608688031215614374575f5ffd5b85356001600160401b03811115614389575f5ffd5b8601601f81018813614399575f5ffd5b80356001600160401b038111156143b2576143b261431c565b8060051b6143c260208201614330565b9182526020818401810192908101908b8411156143dd575f5ffd5b6020850194505b83851015614403578435808352602095860195909350909101906143e4565b9850505050602087013590506001600160401b03811115614422575f5ffd5b61442e8882890161427c565b90955093505060408601356001600160401b0381111561444c575f5ffd5b6144588882890161427c565b969995985093965092949392505050565b803563ffffffff811681146132b6575f5ffd5b5f5f6040838503121561448d575f5ffd5b61449683614469565b91506144a460208401614469565b90509250929050565b6001600160a01b0391909116815260200190565b6001600160801b0391909116815260200190565b6001600160801b0381168114611ca6575f5ffd5b5f602082840312156144f9575f5ffd5b8135610e92816144d5565b5f5f5f60608486031215614516575f5ffd5b833561452181614222565b95602085013595506040909401359392505050565b5f60208284031215614546575f5ffd5b5035919050565b5f5f5f5f5f60608688031215614561575f5ffd5b85356001600160401b03811115614576575f5ffd5b6145828882890161427c565b90965094505060208601356001600160401b038111156145a0575f5ffd5b6145ac8882890161427c565b90945092505060408601356145c081614222565b809150509295509295909350565b5f602082840312156145de575f5ffd5b813560048110610e92575f5ffd5b5f5f5f5f5f5f5f60e0888a031215614602575f5ffd5b873561460d81614222565b9650602088013561461d81614222565b9550604088013561462d81614222565b9450606088013561463d81614222565b9350608088013561464d81614222565b925060a088013561465d81614222565b915060c088013561466d81614222565b8091505092959891949750929550565b5f5f6040838503121561468e575f5ffd5b823561469981614222565b946020939093013593505050565b5f5f604083850312156146b8575f5ffd5b82356146c381614222565b915060208301356146d381614222565b809150509250929050565b5f6001600160401b038211156146f6576146f661431c565b50601f01601f191660200190565b5f5f60408385031215614715575f5ffd5b823561472081614222565b915060208301356001600160401b0381111561473a575f5ffd5b8301601f8101851361474a575f5ffd5b803561475d614758826146de565b614330565b818152866020838501011115614771575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156147a1575f5ffd5b50508035926020909101359150565b5f5f5f606084860312156147c2575f5ffd5b83356147cd81614222565b92506020840135915060408401356147e481614222565b809150509250925092565b5f5f5f60408486031215614801575f5ffd5b83356001600160401b03811115614816575f5ffd5b6148228682870161427c565b909790965060209590950135949350505050565b5f60208284031215614846575f5ffd5b813580600f0b8114610e92575f5ffd5b8015158114611ca6575f5ffd5b5f60208284031215614873575f5ffd5b8135610e9281614856565b5f6020828403121561488e575f5ffd5b813560ff81168114610e92575f5ffd5b9182526001600160a01b0316602082015260400190565b5f602082840312156148c5575f5ffd5b8151610e9281614856565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156148f4575f5ffd5b5051919050565b81810381811115611def57611def6141d0565b5f6020828403121561491e575f5ffd5b8151610e9281614222565b5f60208284031215614939575f5ffd5b81516001600160401b0381111561494e575f5ffd5b8201601f8101841361495e575f5ffd5b805161496c614758826146de565b818152856020838501011115614980575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f8335601e198436030181126149b2575f5ffd5b8301803591506001600160401b038211156149cb575f5ffd5b6020019150368190038213156142bc575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b608081525f614a4860808301888a6149df565b8281036020840152614a5b8187896149df565b90508281036040840152614a6f8186614a07565b915050826060830152979650505050505050565b8082028115828204841417611def57611def6141d0565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b82811015614b3c57605f198786030184528151805160808752614ae66080880182614a07565b905060208201518782036020890152614aff8282614a07565b91505060408201516040880152606082015191508681036060880152614b258183614a07565b965050506020938401939190910190600101614ac0565b505050506020929092019290925292915050565b60208082526010908201526f24b731b7b93932b1ba1021b0b63632b960811b604082015260600190565b6001600160601b0394851681529290931660208301526001600160a01b03166040820152606081019190915260800190565b60048110614bc857634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b0384168152602081018390526060810161295a6040830184614bac565b5f5f8335601e19843603018112614c05575f5ffd5b83016020810192503590506001600160401b03811115614c23575f5ffd5b8036038213156142bc575f5ffd5b5f8383855260208501945060208460051b820101835f5b86811015614cf757838303601f19018852813536879003607e19018112614c6d575f5ffd5b8601614c798180614bf0565b60808652614c8b6080870182846149df565b915050614c9b6020830183614bf0565b8683036020880152614cae8382846149df565b9250505060408201356040860152614cc96060830183614bf0565b92508582036060870152614cde8284836149df565b60209b8c019b9096509490940193505050600101614c48565b50909695505050505050565b606081525f614d16606083018789614c31565b82810360208401528481526001600160fb1b03851115614d34575f5ffd5b8460051b808760208401376001600160a01b0394909416604093909301929092525001602001949350505050565b6020808252602c908201525f516020614f6c5f395f51905f5260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201525f516020614f6c5f395f51905f5260408201526b6163746976652070726f787960a01b606082015260800190565b5f82614dee57634e487b7160e01b5f52601260045260245ffd5b500490565b602080825260079082015266125b9d985b1a5960ca1b604082015260600190565b6001600160a01b03929092168252602082015260400190565b80820180821115611def57611def6141d0565b83815260608101614e546020830185614bac565b6001600160a01b03929092166040919091015292915050565b604081525f614e80604083018587614c31565b9050826020830152949350505050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715611def57611def6141d0565b5f60208284031215614ecd575f5ffd5b8151610e92816144d5565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f82518060208501845e5f920191825250919050565b602081525f610e926020830184614a0756fea241faf62e66ce518d1934ce4c936d806a02289ba483fac23beb8c15755be90d46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc20e7d93f475a4a8dd621285797dd2d68da59e4450b89aea5ca9bf079e95c1db5416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564b9da3f3df62c28aca604806cc6ee9678189d7591ef511a77bb040fa8361e9e02c6ace799356a5a236ccaa6708c68b77b7de838b1700b6e0c40f48a1407a5eef00e8d94121b3383f03d9ae60b39295aa793469d7230d51a3f62cbf47cd45481d9