{
  "_format": "hh-sol-artifact-1",
  "contractName": "StakingModule",
  "sourceName": "contracts/protocol/modules/v1/StakingModule.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IController",
          "name": "_controller",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_stakingContract",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_componentPositionUnits",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "contract IStakingAdapter",
          "name": "_adapter",
          "type": "address"
        }
      ],
      "name": "ComponentStaked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_stakingContract",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_componentPositionUnits",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "contract IStakingAdapter",
          "name": "_adapter",
          "type": "address"
        }
      ],
      "name": "ComponentUnstaked",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "name": "componentIssueHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "name": "componentRedeemHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract IController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        }
      ],
      "name": "getStakingContracts",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stakeContract",
          "type": "address"
        }
      ],
      "name": "getStakingPosition",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "adapterHash",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "componentPositionUnits",
              "type": "uint256"
            }
          ],
          "internalType": "struct StakingModule.StakingPosition",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stakeContract",
          "type": "address"
        }
      ],
      "name": "getStakingPositionUnit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stakeContract",
          "type": "address"
        }
      ],
      "name": "hasStakingPosition",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        }
      ],
      "name": "moduleIssueHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        }
      ],
      "name": "moduleRedeemHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "removeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stakeContract",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_adapterName",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_componentPositionUnits",
          "type": "uint256"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stakeContract",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_adapterName",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_componentPositionUnits",
          "type": "uint256"
        }
      ],
      "name": "unstake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620030503803806200305083398101604081905262000034916200005a565b600080546001600160a01b0319166001600160a01b03929092169190911790556200008a565b6000602082840312156200006c578081fd5b81516001600160a01b038116811462000083578182fd5b9392505050565b612fb6806200009a6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063a0c5ef361161008c578063c4d66de811610066578063c4d66de814610193578063ca1a249c146101a6578063db736183146101b9578063f77c4791146101d9576100cf565b8063a0c5ef3614610160578063c137f4d714610180578063c153dd0714610112576100cf565b80630551822f146100d45780630fb96b21146100fd5780633fe6106b14610112578063482104b814610125578063523f33bb14610138578063847ef08d14610158575b600080fd5b6100e76100e2366004612718565b6101ee565b6040516100f49190612938565b60405180910390f35b61011061010b3660046127c5565b610272565b005b61011061012036600461279a565b610301565b610110610133366004612661565b610305565b61014b610146366004612750565b610439565b6040516100f49190612985565b61011061045d565b61017361016e366004612750565b61055e565b6040516100f49190612ec2565b61011061018e3660046127c5565b610577565b6101106101a1366004612645565b6105f0565b6101106101b4366004612661565b61065f565b6101cc6101c7366004612750565b610786565b6040516100f49190612eab565b6101e16107dc565b6040516100f4919061287a565b6001600160a01b03808316600090815260016020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561026457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610246575b505050505090505b92915050565b8361027c816107eb565b606061028886856101ee565b905060005b81518110156102f85761029e6123e1565b6102bc88878585815181106102af57fe5b6020026020010151610786565b90506102ef888484815181106102ce57fe5b6020026020010151886102e48560000151610930565b85602001518c6109ed565b5060010161028d565b50505050505050565b5050565b8461030f81610bbd565b8161031b87868861055e565b10156103425760405162461bcd60e51b815260040161033990612c9a565b60405180910390fd5b600061034d84610c08565b90506103cd87878784878c6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561039057600080fd5b505afa1580156103a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c89190612836565b610c26565b6103d987878786610e7f565b856001600160a01b0316856001600160a01b0316886001600160a01b03167f73ea6957dfd247b502b5e495d1d5ebfe33d5d3151569ebb5bf6dde77c399f5c88685604051610428929190612ecb565b60405180910390a450505050505050565b60006104558261044986866101ee565b9063ffffffff6110ec16565b949350505050565b60003390506060816001600160a01b03166399d50d5d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561049d57600080fd5b505afa1580156104b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104d9919081019061254b565b905060005b8151811015610559576001600160a01b0383166000908152600160205260408120835190919084908490811061051057fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002054156105515760405162461bcd60e51b815260040161033990612b9b565b6001016104de565b505050565b600061056b848484610786565b60200151949350505050565b83610581816107eb565b606061058d86856101ee565b905060005b81518110156102f8576105a36123e1565b6105b488878585815181106102af57fe5b90506105e7888484815181106105c657fe5b6020026020010151886105dc8560000151610930565b85602001518c610c26565b50600101610592565b80336105fc8282611102565b8261060681611128565b836001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561064157600080fd5b505af1158015610655573d6000803e3d6000fd5b5050505050505050565b8461066981610bbd565b6106836001600160a01b038716858463ffffffff6111e916565b61069f5760405162461bcd60e51b815260040161033990612c22565b60006106aa84610c08565b905061072a87878784878c6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ed57600080fd5b505afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190612836565b6109ed565b610737878787878761127a565b856001600160a01b0316856001600160a01b0316886001600160a01b03167fc54d6e2d37daa93204f86f89bce56ac6dbae5b1f2413c32f3ede589408ab8af98685604051610428929190612ecb565b61078e6123e1565b506001600160a01b0380841660009081526001602081815260408084208786168552825280842094861684529382018152918390208351808501909452805484520154908201529392505050565b6000546001600160a01b031681565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e529061081990339060040161287a565b60206040518083038186803b15801561083157600080fd5b505afa158015610845573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108699190612817565b600281111561087457fe5b146108915760405162461bcd60e51b815260040161033990612b64565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e389906108c190339060040161287a565b60206040518083038186803b1580156108d957600080fd5b505afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906125f6565b61092d5760405162461bcd60e51b815260040161033990612da9565b50565b600080548190610948906001600160a01b031661146a565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b81526004016109759291906128f8565b60206040518083038186803b15801561098d57600080fd5b505afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c591906124d7565b90506001600160a01b03811661026c5760405162461bcd60e51b815260040161033990612b00565b60006109ff828463ffffffff6114e916565b90506000846001600160a01b0316630e8edd86886040518263ffffffff1660e01b8152600401610a2f919061287a565b60206040518083038186803b158015610a4757600080fd5b505afa158015610a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7f91906124d7565b9050610a9c6001600160a01b03891687838563ffffffff6114fb16565b6000806060876001600160a01b0316630d6976038b876040518363ffffffff1660e01b8152600401610acf9291906128f8565b60006040518083038186803b158015610ae757600080fd5b505afa158015610afb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2391908101906124f3565b9250925092508a6001600160a01b0316638f6f03328484846040518463ffffffff1660e01b8152600401610b5993929190612911565b600060405180830381600087803b158015610b7357600080fd5b505af1158015610b87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610baf9190810190612612565b505050505050505050505050565b610bc781336115ca565b610be35760405162461bcd60e51b815260040161033990612e30565b610bec81611658565b61092d5760405162461bcd60e51b815260040161033990612a09565b600080610c148361175c565b9050610c1f81610930565b9392505050565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190610c55908a9060040161287a565b60206040518083038186803b158015610c6d57600080fd5b505afa158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca59190612836565b90506000610cb9838563ffffffff6114e916565b90506000806060876001600160a01b0316639971c1658b866040518363ffffffff1660e01b8152600401610cee9291906128f8565b60006040518083038186803b158015610d0657600080fd5b505afa158015610d1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d4291908101906124f3565b9250925092508a6001600160a01b0316638f6f03328484846040518463ffffffff1660e01b8152600401610d7893929190612911565b600060405180830381600087803b158015610d9257600080fd5b505af1158015610da6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dce9190810190612612565b506040516370a0823160e01b81526000906001600160a01b038b16906370a0823190610dfe908f9060040161287a565b60206040518083038186803b158015610e1657600080fd5b505afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190612836565b905080610e61878763ffffffff61176716565b1115610baf5760405162461bcd60e51b815260040161033990612d13565b6000610e9c82610e9087868861055e565b9063ffffffff61178c16565b90508015610ee0576001600160a01b038086166000908152600160208181526040808420888616855282528084209489168452938201905291902001819055610f6f565b610efa84610eee87866101ee565b9063ffffffff6117ce16565b6001600160a01b03808716600090815260016020908152604080832093881683529281529190208251610f3393919291909101906123f8565b506001600160a01b0380861660009081526001602081815260408084208886168552825280842094891684529382019052918120818155909101555b600061100583610ff9886001600160a01b03166366cb8d2f886040518263ffffffff1660e01b8152600401610fa4919061287a565b60206040518083038186803b158015610fbc57600080fd5b505afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff49190612836565b611816565b9063ffffffff61176716565b90506110216001600160a01b038716858363ffffffff61183c16565b60006110b961102f8561199c565b6040516308bafae960e21b81526001600160a01b038a16906322ebeba49061105d908a90309060040161288e565b60206040518083038186803b15801561107557600080fd5b505afa158015611089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ad9190612836565b9063ffffffff6119c116565b90506102f8853083604051806020016040528060008152508b6001600160a01b0316611a0790949392919063ffffffff16565b6000806110f98484611fc0565b95945050505050565b61110c82826115ca565b6103015760405162461bcd60e51b815260040161033990612e30565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061115890849060040161287a565b60206040518083038186803b15801561117057600080fd5b505afa158015611184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a891906125f6565b6111c45760405162461bcd60e51b815260040161033990612ded565b6111cd81612026565b61092d5760405162461bcd60e51b815260040161033990612a88565b60006111f48261199c565b6040516366cb8d2f60e01b81526001600160a01b038616906366cb8d2f9061122090879060040161287a565b60206040518083038186803b15801561123857600080fd5b505afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112709190612836565b1215949350505050565b611285858486610439565b156112df576112a561129886858761055e565b829063ffffffff61176716565b6001600160a01b03808716600090815260016020818152604080842089861685528252808420948a16845293820190529190200155611381565b6001600160a01b0385811660009081526001602081815260408084208886168552825280842080549384018155845292200180546001600160a01b031916928716929092179091558051808201909152806113398461175c565b815260209081018390526001600160a01b0380881660009081526001808452604080832089851684528552808320938a16835292810184529190208351815592909101519101555b60006113b682610e90886001600160a01b03166366cb8d2f886040518263ffffffff1660e01b8152600401610fa4919061287a565b90506113d26001600160a01b038716858363ffffffff61183c16565b60006110b96113e08461199c565b6040516308bafae960e21b81526001600160a01b038a16906322ebeba49061140e908a90309060040161288e565b60206040518083038186803b15801561142657600080fd5b505afa15801561143a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145e9190612836565b9063ffffffff61205516565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690611499908490600401612ec2565b60206040518083038186803b1580156114b157600080fd5b505afa1580156114c5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c91906124d7565b6000610c1f838363ffffffff61209b16565b606082826040516024016115109291906128f8565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f03329061156c9087906000908690600401612911565b600060405180830381600087803b15801561158657600080fd5b505af115801561159a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115c29190810190612612565b505050505050565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b15801561160f57600080fd5b505afa158015611623573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164791906124d7565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061168990859060040161287a565b60206040518083038186803b1580156116a157600080fd5b505afa1580156116b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d991906125f6565b801561026c57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c9061170c90309060040161287a565b60206040518083038186803b15801561172457600080fd5b505afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c91906125f6565b805160209091012090565b600082820183811015610c1f5760405162461bcd60e51b815260040161033990612a51565b6000610c1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120c5565b60606000806117dd8585611fc0565b91509150806117fe5760405162461bcd60e51b8152600401610339906129a3565b606061180a86846120f1565b50935061026c92505050565b6000808212156118385760405162461bcd60e51b815260040161033990612b2f565b5090565b60006118488484612220565b9050801580156118585750600082115b156118cf5761186784846122a7565b6118ca576040516304e3532760e41b81526001600160a01b03851690634e3532709061189790869060040161287a565b600060405180830381600087803b1580156118b157600080fd5b505af11580156118c5573d6000803e3d6000fd5b505050505b61194c565b8080156118da575081155b1561194c576118e984846122a7565b61194c57604051636f86c89760e01b81526001600160a01b03851690636f86c8979061191990869060040161287a565b600060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d17846119658561199c565b6040518363ffffffff1660e01b81526004016119829291906128f8565b600060405180830381600087803b15801561064157600080fd5b6000600160ff1b82106118385760405162461bcd60e51b815260040161033990612d61565b60008183038183128015906119d65750838113155b806119eb57506000831280156119eb57508381135b610c1f5760405162461bcd60e51b815260040161033990612e67565b8115611cfc5760405163df5e9b2960e01b81526001600160a01b0386169063df5e9b2990611a3990879060040161287a565b60206040518083038186803b158015611a5157600080fd5b505afa158015611a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8991906125f6565b611b50576040516304e3532760e41b81526001600160a01b03861690634e35327090611ab990879060040161287a565b600060405180830381600087803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b505060405163ea0ee55960e01b81526001600160a01b038816925063ea0ee5599150611b19908790879060040161288e565b600060405180830381600087803b158015611b3357600080fd5b505af1158015611b47573d6000803e3d6000fd5b50505050611c33565b604051637d96659360e01b81526001600160a01b03861690637d96659390611b7e908790879060040161288e565b60206040518083038186803b158015611b9657600080fd5b505afa158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce91906125f6565b611c335760405163ea0ee55960e01b81526001600160a01b0386169063ea0ee55990611c00908790879060040161288e565b600060405180830381600087803b158015611c1a57600080fd5b505af1158015611c2e573d6000803e3d6000fd5b505050505b6040516363a90fc160e01b81526001600160a01b038616906363a90fc190611c63908790879087906004016128d4565b600060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b50506040516326898fe160e01b81526001600160a01b03881692506326898fe19150611cc5908790879086906004016128a8565b600060405180830381600087803b158015611cdf57600080fd5b505af1158015611cf3573d6000803e3d6000fd5b50505050611fb9565b805115611d1b5760405162461bcd60e51b815260040161033990612cdc565b6040516308bafae960e21b81526001600160a01b038616906322ebeba490611d49908790879060040161288e565b60206040518083038186803b158015611d6157600080fd5b505afa158015611d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d999190612836565b15611fb95760405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad0390611dcd90889060040161287a565b60006040518083038186803b158015611de557600080fd5b505afa158015611df9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e21919081019061254b565b6040516366cb8d2f60e01b81529091506001600160a01b038716906366cb8d2f90611e5090889060040161287a565b60206040518083038186803b158015611e6857600080fd5b505afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190612836565b158015611eae575080516001145b15611f5757836001600160a01b031681600081518110611eca57fe5b60200260200101516001600160a01b031614611ef85760405162461bcd60e51b815260040161033990612bd2565b604051636f86c89760e01b81526001600160a01b03871690636f86c89790611f2490889060040161287a565b600060405180830381600087803b158015611f3e57600080fd5b505af1158015611f52573d6000803e3d6000fd5b505050505b60405163acf3f07760e01b81526001600160a01b0387169063acf3f07790611f85908890889060040161288e565b600060405180830381600087803b158015611f9f57600080fd5b505af1158015611fb3573d6000803e3d6000fd5b50505050505b5050505050565b81516000908190815b8181101561201357846001600160a01b0316868281518110611fe757fe5b60200260200101516001600160a01b0316141561200b5792506001915061201f9050565b600101611fc9565b50600019600092509250505b9250929050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f79061170c90309060040161287a565b600082820181831280159061206a5750838112155b8061207f575060008312801561207f57508381125b610c1f5760405162461bcd60e51b815260040161033990612abf565b6000610c1f670de0b6b3a76400006120b9858563ffffffff61233316565b9063ffffffff61236d16565b600081848411156120e95760405162461bcd60e51b81526004016103399190612990565b505050900390565b81516060906000908084106121185760405162461bcd60e51b8152600401610339906129d2565b60606001820367ffffffffffffffff8111801561213457600080fd5b5060405190808252806020026020018201604052801561215e578160200160208202803683370190505b50905060005b858110156121ac5786818151811061217857fe5b602002602001015182828151811061218c57fe5b6001600160a01b0390921660209283029190910190910152600101612164565b50600185015b828110156121fd578681815181106121c657fe5b60200260200101518260018303815181106121dd57fe5b6001600160a01b03909216602092830291909101909101526001016121b2565b508086868151811061220b57fe5b60200260200101519350935050509250929050565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b815260040161224f919061287a565b60206040518083038186803b15801561226757600080fd5b505afa15801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f9190612836565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b81526004016122d6919061287a565b60006040518083038186803b1580156122ee57600080fd5b505afa158015612302573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261232a919081019061254b565b51119392505050565b6000826123425750600061026c565b8282028284828161234f57fe5b0414610c1f5760405162461bcd60e51b815260040161033990612c59565b6000610c1f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836123cb5760405162461bcd60e51b81526004016103399190612990565b5060008385816123d757fe5b0495945050505050565b604080518082019091526000808252602082015290565b82805482825590600052602060002090810192821561244d579160200282015b8281111561244d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612418565b50611838926124779250905b808211156118385780546001600160a01b0319168155600101612459565b90565b805161026c81612f5d565b600082601f830112612495578081fd5b81516124a86124a382612f09565b612ee2565b91508082528360208285010111156124bf57600080fd5b6124d0816020840160208601612f2d565b5092915050565b6000602082840312156124e8578081fd5b8151610c1f81612f5d565b600080600060608486031215612507578182fd5b835161251281612f5d565b60208501516040860151919450925067ffffffffffffffff811115612535578182fd5b61254186828701612485565b9150509250925092565b6000602080838503121561255d578182fd5b825167ffffffffffffffff80821115612574578384fd5b81850186601f820112612585578485fd5b8051925081831115612595578485fd5b83830291506125a5848301612ee2565b8381528481019082860184840187018a10156125bf578788fd5b8794505b858510156125e9576125d58a8261247a565b8352600194909401939186019186016125c3565b5098975050505050505050565b600060208284031215612607578081fd5b8151610c1f81612f72565b600060208284031215612623578081fd5b815167ffffffffffffffff811115612639578182fd5b61045584828501612485565b600060208284031215612656578081fd5b8135610c1f81612f5d565b600080600080600060a08688031215612678578081fd5b853561268381612f5d565b9450602086013561269381612f5d565b935060408601356126a381612f5d565b9250606086013567ffffffffffffffff8111156126be578182fd5b80870188601f8201126126cf578283fd5b803591506126df6124a383612f09565b8281528960208484010111156126f3578384fd5b8260208301602083013791820160200192909252949793965091946080013592915050565b6000806040838503121561272a578182fd5b823561273581612f5d565b9150602083013561274581612f5d565b809150509250929050565b600080600060608486031215612764578283fd5b833561276f81612f5d565b9250602084013561277f81612f5d565b9150604084013561278f81612f5d565b809150509250925092565b600080604083850312156127ac578182fd5b82356127b781612f5d565b946020939093013593505050565b600080600080608085870312156127da578081fd5b84356127e581612f5d565b93506020850135925060408501356127fc81612f5d565b9150606085013561280c81612f72565b939692955090935050565b600060208284031215612828578081fd5b815160038110610c1f578182fd5b600060208284031215612847578081fd5b5051919050565b60008151808452612866816020860160208601612f2d565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b038481168252831660208201526060604082018190526000906110f99083018461284e565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b0385168252836020830152606060408301526110f9606083018461284e565b6020808252825182820181905260009190848201906040850190845b818110156129795783516001600160a01b031683529284019291840191600101612954565b50909695505050505050565b901515815260200190565b600060208252610c1f602083018461284e565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b60208082526018908201527f496e646578206d757374206265203c2041206c656e6774680000000000000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b6020808252601d908201527f4f70656e20706f736974696f6e73206d75737420626520636c6f736564000000604082015260600190565b60208082526030908201527f45787465726e616c20706f736974696f6e73206d757374206265203020746f2060408201526f1c995b5bdd994818dbdb5c1bdb995b9d60821b606082015260800190565b6020808252601d908201527f4e6f7420656e6f75676820636f6d706f6e656e7420746f207374616b65000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526022908201527f4e6f7420656e6f75676820636f6d706f6e656e7420746f6b656e73207374616b604082015261195960f21b606082015260800190565b60208082526018908201527f5061737365642064617461206d757374206265206e756c6c0000000000000000604082015260600190565b6020808252602e908201527f4e6f7420656e6f75676820746f6b656e732072657475726e65642066726f6d2060408201526d1cdd185ad94818dbdb9d1c9858dd60921b606082015260800190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b815181526020918201519181019190915260400190565b90815260200190565b9182526001600160a01b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715612f0157600080fd5b604052919050565b600067ffffffffffffffff821115612f1f578081fd5b50601f01601f191660200190565b60005b83811015612f48578181015183820152602001612f30565b83811115612f57576000848401525b50505050565b6001600160a01b038116811461092d57600080fd5b801515811461092d57600080fdfea26469706673582212208b778576016382a5b4e6473692d34681e6c71da9725521011ca265f10fb3b1d764736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063a0c5ef361161008c578063c4d66de811610066578063c4d66de814610193578063ca1a249c146101a6578063db736183146101b9578063f77c4791146101d9576100cf565b8063a0c5ef3614610160578063c137f4d714610180578063c153dd0714610112576100cf565b80630551822f146100d45780630fb96b21146100fd5780633fe6106b14610112578063482104b814610125578063523f33bb14610138578063847ef08d14610158575b600080fd5b6100e76100e2366004612718565b6101ee565b6040516100f49190612938565b60405180910390f35b61011061010b3660046127c5565b610272565b005b61011061012036600461279a565b610301565b610110610133366004612661565b610305565b61014b610146366004612750565b610439565b6040516100f49190612985565b61011061045d565b61017361016e366004612750565b61055e565b6040516100f49190612ec2565b61011061018e3660046127c5565b610577565b6101106101a1366004612645565b6105f0565b6101106101b4366004612661565b61065f565b6101cc6101c7366004612750565b610786565b6040516100f49190612eab565b6101e16107dc565b6040516100f4919061287a565b6001600160a01b03808316600090815260016020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561026457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610246575b505050505090505b92915050565b8361027c816107eb565b606061028886856101ee565b905060005b81518110156102f85761029e6123e1565b6102bc88878585815181106102af57fe5b6020026020010151610786565b90506102ef888484815181106102ce57fe5b6020026020010151886102e48560000151610930565b85602001518c6109ed565b5060010161028d565b50505050505050565b5050565b8461030f81610bbd565b8161031b87868861055e565b10156103425760405162461bcd60e51b815260040161033990612c9a565b60405180910390fd5b600061034d84610c08565b90506103cd87878784878c6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561039057600080fd5b505afa1580156103a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c89190612836565b610c26565b6103d987878786610e7f565b856001600160a01b0316856001600160a01b0316886001600160a01b03167f73ea6957dfd247b502b5e495d1d5ebfe33d5d3151569ebb5bf6dde77c399f5c88685604051610428929190612ecb565b60405180910390a450505050505050565b60006104558261044986866101ee565b9063ffffffff6110ec16565b949350505050565b60003390506060816001600160a01b03166399d50d5d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561049d57600080fd5b505afa1580156104b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104d9919081019061254b565b905060005b8151811015610559576001600160a01b0383166000908152600160205260408120835190919084908490811061051057fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002054156105515760405162461bcd60e51b815260040161033990612b9b565b6001016104de565b505050565b600061056b848484610786565b60200151949350505050565b83610581816107eb565b606061058d86856101ee565b905060005b81518110156102f8576105a36123e1565b6105b488878585815181106102af57fe5b90506105e7888484815181106105c657fe5b6020026020010151886105dc8560000151610930565b85602001518c610c26565b50600101610592565b80336105fc8282611102565b8261060681611128565b836001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561064157600080fd5b505af1158015610655573d6000803e3d6000fd5b5050505050505050565b8461066981610bbd565b6106836001600160a01b038716858463ffffffff6111e916565b61069f5760405162461bcd60e51b815260040161033990612c22565b60006106aa84610c08565b905061072a87878784878c6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ed57600080fd5b505afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190612836565b6109ed565b610737878787878761127a565b856001600160a01b0316856001600160a01b0316886001600160a01b03167fc54d6e2d37daa93204f86f89bce56ac6dbae5b1f2413c32f3ede589408ab8af98685604051610428929190612ecb565b61078e6123e1565b506001600160a01b0380841660009081526001602081815260408084208786168552825280842094861684529382018152918390208351808501909452805484520154908201529392505050565b6000546001600160a01b031681565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e529061081990339060040161287a565b60206040518083038186803b15801561083157600080fd5b505afa158015610845573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108699190612817565b600281111561087457fe5b146108915760405162461bcd60e51b815260040161033990612b64565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e389906108c190339060040161287a565b60206040518083038186803b1580156108d957600080fd5b505afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906125f6565b61092d5760405162461bcd60e51b815260040161033990612da9565b50565b600080548190610948906001600160a01b031661146a565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b81526004016109759291906128f8565b60206040518083038186803b15801561098d57600080fd5b505afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c591906124d7565b90506001600160a01b03811661026c5760405162461bcd60e51b815260040161033990612b00565b60006109ff828463ffffffff6114e916565b90506000846001600160a01b0316630e8edd86886040518263ffffffff1660e01b8152600401610a2f919061287a565b60206040518083038186803b158015610a4757600080fd5b505afa158015610a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7f91906124d7565b9050610a9c6001600160a01b03891687838563ffffffff6114fb16565b6000806060876001600160a01b0316630d6976038b876040518363ffffffff1660e01b8152600401610acf9291906128f8565b60006040518083038186803b158015610ae757600080fd5b505afa158015610afb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2391908101906124f3565b9250925092508a6001600160a01b0316638f6f03328484846040518463ffffffff1660e01b8152600401610b5993929190612911565b600060405180830381600087803b158015610b7357600080fd5b505af1158015610b87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610baf9190810190612612565b505050505050505050505050565b610bc781336115ca565b610be35760405162461bcd60e51b815260040161033990612e30565b610bec81611658565b61092d5760405162461bcd60e51b815260040161033990612a09565b600080610c148361175c565b9050610c1f81610930565b9392505050565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190610c55908a9060040161287a565b60206040518083038186803b158015610c6d57600080fd5b505afa158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca59190612836565b90506000610cb9838563ffffffff6114e916565b90506000806060876001600160a01b0316639971c1658b866040518363ffffffff1660e01b8152600401610cee9291906128f8565b60006040518083038186803b158015610d0657600080fd5b505afa158015610d1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d4291908101906124f3565b9250925092508a6001600160a01b0316638f6f03328484846040518463ffffffff1660e01b8152600401610d7893929190612911565b600060405180830381600087803b158015610d9257600080fd5b505af1158015610da6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dce9190810190612612565b506040516370a0823160e01b81526000906001600160a01b038b16906370a0823190610dfe908f9060040161287a565b60206040518083038186803b158015610e1657600080fd5b505afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190612836565b905080610e61878763ffffffff61176716565b1115610baf5760405162461bcd60e51b815260040161033990612d13565b6000610e9c82610e9087868861055e565b9063ffffffff61178c16565b90508015610ee0576001600160a01b038086166000908152600160208181526040808420888616855282528084209489168452938201905291902001819055610f6f565b610efa84610eee87866101ee565b9063ffffffff6117ce16565b6001600160a01b03808716600090815260016020908152604080832093881683529281529190208251610f3393919291909101906123f8565b506001600160a01b0380861660009081526001602081815260408084208886168552825280842094891684529382019052918120818155909101555b600061100583610ff9886001600160a01b03166366cb8d2f886040518263ffffffff1660e01b8152600401610fa4919061287a565b60206040518083038186803b158015610fbc57600080fd5b505afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff49190612836565b611816565b9063ffffffff61176716565b90506110216001600160a01b038716858363ffffffff61183c16565b60006110b961102f8561199c565b6040516308bafae960e21b81526001600160a01b038a16906322ebeba49061105d908a90309060040161288e565b60206040518083038186803b15801561107557600080fd5b505afa158015611089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ad9190612836565b9063ffffffff6119c116565b90506102f8853083604051806020016040528060008152508b6001600160a01b0316611a0790949392919063ffffffff16565b6000806110f98484611fc0565b95945050505050565b61110c82826115ca565b6103015760405162461bcd60e51b815260040161033990612e30565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061115890849060040161287a565b60206040518083038186803b15801561117057600080fd5b505afa158015611184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a891906125f6565b6111c45760405162461bcd60e51b815260040161033990612ded565b6111cd81612026565b61092d5760405162461bcd60e51b815260040161033990612a88565b60006111f48261199c565b6040516366cb8d2f60e01b81526001600160a01b038616906366cb8d2f9061122090879060040161287a565b60206040518083038186803b15801561123857600080fd5b505afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112709190612836565b1215949350505050565b611285858486610439565b156112df576112a561129886858761055e565b829063ffffffff61176716565b6001600160a01b03808716600090815260016020818152604080842089861685528252808420948a16845293820190529190200155611381565b6001600160a01b0385811660009081526001602081815260408084208886168552825280842080549384018155845292200180546001600160a01b031916928716929092179091558051808201909152806113398461175c565b815260209081018390526001600160a01b0380881660009081526001808452604080832089851684528552808320938a16835292810184529190208351815592909101519101555b60006113b682610e90886001600160a01b03166366cb8d2f886040518263ffffffff1660e01b8152600401610fa4919061287a565b90506113d26001600160a01b038716858363ffffffff61183c16565b60006110b96113e08461199c565b6040516308bafae960e21b81526001600160a01b038a16906322ebeba49061140e908a90309060040161288e565b60206040518083038186803b15801561142657600080fd5b505afa15801561143a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145e9190612836565b9063ffffffff61205516565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690611499908490600401612ec2565b60206040518083038186803b1580156114b157600080fd5b505afa1580156114c5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c91906124d7565b6000610c1f838363ffffffff61209b16565b606082826040516024016115109291906128f8565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f03329061156c9087906000908690600401612911565b600060405180830381600087803b15801561158657600080fd5b505af115801561159a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115c29190810190612612565b505050505050565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b15801561160f57600080fd5b505afa158015611623573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164791906124d7565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061168990859060040161287a565b60206040518083038186803b1580156116a157600080fd5b505afa1580156116b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d991906125f6565b801561026c57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c9061170c90309060040161287a565b60206040518083038186803b15801561172457600080fd5b505afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c91906125f6565b805160209091012090565b600082820183811015610c1f5760405162461bcd60e51b815260040161033990612a51565b6000610c1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120c5565b60606000806117dd8585611fc0565b91509150806117fe5760405162461bcd60e51b8152600401610339906129a3565b606061180a86846120f1565b50935061026c92505050565b6000808212156118385760405162461bcd60e51b815260040161033990612b2f565b5090565b60006118488484612220565b9050801580156118585750600082115b156118cf5761186784846122a7565b6118ca576040516304e3532760e41b81526001600160a01b03851690634e3532709061189790869060040161287a565b600060405180830381600087803b1580156118b157600080fd5b505af11580156118c5573d6000803e3d6000fd5b505050505b61194c565b8080156118da575081155b1561194c576118e984846122a7565b61194c57604051636f86c89760e01b81526001600160a01b03851690636f86c8979061191990869060040161287a565b600060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d17846119658561199c565b6040518363ffffffff1660e01b81526004016119829291906128f8565b600060405180830381600087803b15801561064157600080fd5b6000600160ff1b82106118385760405162461bcd60e51b815260040161033990612d61565b60008183038183128015906119d65750838113155b806119eb57506000831280156119eb57508381135b610c1f5760405162461bcd60e51b815260040161033990612e67565b8115611cfc5760405163df5e9b2960e01b81526001600160a01b0386169063df5e9b2990611a3990879060040161287a565b60206040518083038186803b158015611a5157600080fd5b505afa158015611a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8991906125f6565b611b50576040516304e3532760e41b81526001600160a01b03861690634e35327090611ab990879060040161287a565b600060405180830381600087803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b505060405163ea0ee55960e01b81526001600160a01b038816925063ea0ee5599150611b19908790879060040161288e565b600060405180830381600087803b158015611b3357600080fd5b505af1158015611b47573d6000803e3d6000fd5b50505050611c33565b604051637d96659360e01b81526001600160a01b03861690637d96659390611b7e908790879060040161288e565b60206040518083038186803b158015611b9657600080fd5b505afa158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce91906125f6565b611c335760405163ea0ee55960e01b81526001600160a01b0386169063ea0ee55990611c00908790879060040161288e565b600060405180830381600087803b158015611c1a57600080fd5b505af1158015611c2e573d6000803e3d6000fd5b505050505b6040516363a90fc160e01b81526001600160a01b038616906363a90fc190611c63908790879087906004016128d4565b600060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b50506040516326898fe160e01b81526001600160a01b03881692506326898fe19150611cc5908790879086906004016128a8565b600060405180830381600087803b158015611cdf57600080fd5b505af1158015611cf3573d6000803e3d6000fd5b50505050611fb9565b805115611d1b5760405162461bcd60e51b815260040161033990612cdc565b6040516308bafae960e21b81526001600160a01b038616906322ebeba490611d49908790879060040161288e565b60206040518083038186803b158015611d6157600080fd5b505afa158015611d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d999190612836565b15611fb95760405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad0390611dcd90889060040161287a565b60006040518083038186803b158015611de557600080fd5b505afa158015611df9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e21919081019061254b565b6040516366cb8d2f60e01b81529091506001600160a01b038716906366cb8d2f90611e5090889060040161287a565b60206040518083038186803b158015611e6857600080fd5b505afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190612836565b158015611eae575080516001145b15611f5757836001600160a01b031681600081518110611eca57fe5b60200260200101516001600160a01b031614611ef85760405162461bcd60e51b815260040161033990612bd2565b604051636f86c89760e01b81526001600160a01b03871690636f86c89790611f2490889060040161287a565b600060405180830381600087803b158015611f3e57600080fd5b505af1158015611f52573d6000803e3d6000fd5b505050505b60405163acf3f07760e01b81526001600160a01b0387169063acf3f07790611f85908890889060040161288e565b600060405180830381600087803b158015611f9f57600080fd5b505af1158015611fb3573d6000803e3d6000fd5b50505050505b5050505050565b81516000908190815b8181101561201357846001600160a01b0316868281518110611fe757fe5b60200260200101516001600160a01b0316141561200b5792506001915061201f9050565b600101611fc9565b50600019600092509250505b9250929050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f79061170c90309060040161287a565b600082820181831280159061206a5750838112155b8061207f575060008312801561207f57508381125b610c1f5760405162461bcd60e51b815260040161033990612abf565b6000610c1f670de0b6b3a76400006120b9858563ffffffff61233316565b9063ffffffff61236d16565b600081848411156120e95760405162461bcd60e51b81526004016103399190612990565b505050900390565b81516060906000908084106121185760405162461bcd60e51b8152600401610339906129d2565b60606001820367ffffffffffffffff8111801561213457600080fd5b5060405190808252806020026020018201604052801561215e578160200160208202803683370190505b50905060005b858110156121ac5786818151811061217857fe5b602002602001015182828151811061218c57fe5b6001600160a01b0390921660209283029190910190910152600101612164565b50600185015b828110156121fd578681815181106121c657fe5b60200260200101518260018303815181106121dd57fe5b6001600160a01b03909216602092830291909101909101526001016121b2565b508086868151811061220b57fe5b60200260200101519350935050509250929050565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b815260040161224f919061287a565b60206040518083038186803b15801561226757600080fd5b505afa15801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f9190612836565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b81526004016122d6919061287a565b60006040518083038186803b1580156122ee57600080fd5b505afa158015612302573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261232a919081019061254b565b51119392505050565b6000826123425750600061026c565b8282028284828161234f57fe5b0414610c1f5760405162461bcd60e51b815260040161033990612c59565b6000610c1f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836123cb5760405162461bcd60e51b81526004016103399190612990565b5060008385816123d757fe5b0495945050505050565b604080518082019091526000808252602082015290565b82805482825590600052602060002090810192821561244d579160200282015b8281111561244d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612418565b50611838926124779250905b808211156118385780546001600160a01b0319168155600101612459565b90565b805161026c81612f5d565b600082601f830112612495578081fd5b81516124a86124a382612f09565b612ee2565b91508082528360208285010111156124bf57600080fd5b6124d0816020840160208601612f2d565b5092915050565b6000602082840312156124e8578081fd5b8151610c1f81612f5d565b600080600060608486031215612507578182fd5b835161251281612f5d565b60208501516040860151919450925067ffffffffffffffff811115612535578182fd5b61254186828701612485565b9150509250925092565b6000602080838503121561255d578182fd5b825167ffffffffffffffff80821115612574578384fd5b81850186601f820112612585578485fd5b8051925081831115612595578485fd5b83830291506125a5848301612ee2565b8381528481019082860184840187018a10156125bf578788fd5b8794505b858510156125e9576125d58a8261247a565b8352600194909401939186019186016125c3565b5098975050505050505050565b600060208284031215612607578081fd5b8151610c1f81612f72565b600060208284031215612623578081fd5b815167ffffffffffffffff811115612639578182fd5b61045584828501612485565b600060208284031215612656578081fd5b8135610c1f81612f5d565b600080600080600060a08688031215612678578081fd5b853561268381612f5d565b9450602086013561269381612f5d565b935060408601356126a381612f5d565b9250606086013567ffffffffffffffff8111156126be578182fd5b80870188601f8201126126cf578283fd5b803591506126df6124a383612f09565b8281528960208484010111156126f3578384fd5b8260208301602083013791820160200192909252949793965091946080013592915050565b6000806040838503121561272a578182fd5b823561273581612f5d565b9150602083013561274581612f5d565b809150509250929050565b600080600060608486031215612764578283fd5b833561276f81612f5d565b9250602084013561277f81612f5d565b9150604084013561278f81612f5d565b809150509250925092565b600080604083850312156127ac578182fd5b82356127b781612f5d565b946020939093013593505050565b600080600080608085870312156127da578081fd5b84356127e581612f5d565b93506020850135925060408501356127fc81612f5d565b9150606085013561280c81612f72565b939692955090935050565b600060208284031215612828578081fd5b815160038110610c1f578182fd5b600060208284031215612847578081fd5b5051919050565b60008151808452612866816020860160208601612f2d565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b038481168252831660208201526060604082018190526000906110f99083018461284e565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b0385168252836020830152606060408301526110f9606083018461284e565b6020808252825182820181905260009190848201906040850190845b818110156129795783516001600160a01b031683529284019291840191600101612954565b50909695505050505050565b901515815260200190565b600060208252610c1f602083018461284e565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b60208082526018908201527f496e646578206d757374206265203c2041206c656e6774680000000000000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b6020808252601d908201527f4f70656e20706f736974696f6e73206d75737420626520636c6f736564000000604082015260600190565b60208082526030908201527f45787465726e616c20706f736974696f6e73206d757374206265203020746f2060408201526f1c995b5bdd994818dbdb5c1bdb995b9d60821b606082015260800190565b6020808252601d908201527f4e6f7420656e6f75676820636f6d706f6e656e7420746f207374616b65000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526022908201527f4e6f7420656e6f75676820636f6d706f6e656e7420746f6b656e73207374616b604082015261195960f21b606082015260800190565b60208082526018908201527f5061737365642064617461206d757374206265206e756c6c0000000000000000604082015260600190565b6020808252602e908201527f4e6f7420656e6f75676820746f6b656e732072657475726e65642066726f6d2060408201526d1cdd185ad94818dbdb9d1c9858dd60921b606082015260800190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b815181526020918201519181019190915260400190565b90815260200190565b9182526001600160a01b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715612f0157600080fd5b604052919050565b600067ffffffffffffffff821115612f1f578081fd5b50601f01601f191660200190565b60005b83811015612f48578181015183820152602001612f30565b83811115612f57576000848401525b50505050565b6001600160a01b038116811461092d57600080fd5b801515811461092d57600080fdfea26469706673582212208b778576016382a5b4e6473692d34681e6c71da9725521011ca265f10fb3b1d764736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
