{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockPriceSubmitter",
  "sourceName": "contracts/ftso/priceProviderMockContracts/PriceProviderMockContracts.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "submitter",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "epochId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "HashSubmitted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "epochId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "contract IFtsoGenesis[]",
          "name": "ftsos",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "prices",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "random",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "PricesRevealed",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MINIMAL_RANDOM",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RANDOM_EPOCH_CYCLIC_BUFFER_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAddressUpdater",
      "outputs": [
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrentRandom",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFtsoManager",
      "outputs": [
        {
          "internalType": "contract IFtsoManagerGenesis",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFtsoRegistry",
      "outputs": [
        {
          "internalType": "contract IFtsoRegistryGenesis",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_epochId",
          "type": "uint256"
        }
      ],
      "name": "getRandom",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVoterWhitelister",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_epochId",
          "type": "uint256"
        },
        {
          "internalType": "uint256[]",
          "name": "_ftsoIndices",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_prices",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_random",
          "type": "uint256"
        }
      ],
      "name": "revealPrices",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        }
      ],
      "name": "setAddressUpdater",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_epochId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_hash",
          "type": "bytes32"
        }
      ],
      "name": "submitHash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "_contractNameHashes",
          "type": "bytes32[]"
        },
        {
          "internalType": "address[]",
          "name": "_contractAddresses",
          "type": "address[]"
        }
      ],
      "name": "updateContractAddresses",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_voter",
          "type": "address"
        }
      ],
      "name": "voterWhitelistBitmap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_voter",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_ftsoIndex",
          "type": "uint256"
        }
      ],
      "name": "voterWhitelisted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_removedVoters",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "_ftsoIndex",
          "type": "uint256"
        }
      ],
      "name": "votersRemovedFromWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620065d6380380620065d6833981016040819052620000349162000496565b80620000408162000448565b503060405162000050906200046c565b6200005c91906200052d565b604051809103906000f08015801562000079573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b03929092169190911790556040513090620000aa906200047a565b620000b691906200052d565b604051809103906000f080158015620000d3573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392831617908190556000546040516317f1580560e21b815291831692635fc56014926200011e92909116906004016200052d565b600060405180830381600087803b1580156200013957600080fd5b505af11580156200014e573d6000803e3d6000fd5b50506040805161018081018252600361014082018181526229a3a160e91b6101608401528252825180840184528181526205852560ec1b6020828101919091528084019190915283518085018552828152624c544360e81b81830152838501528351808501855282815262584c4d60e81b818301526060840152835180850185528281526258444760e81b818301526080840152835180850185528281526241444160e81b8183015260a0840152835180850185526004815263414c474f60e01b8183015260c0840152835180850185528281526208486960eb1b8183015260e084015283518085018552828152622223a160e91b8183015261010084015283518085019094529083526242544360e81b908301526101208101919091529150600090505b600a8110156200043f5760008282600a81106200028c57fe5b6020020151905060008130607842036078601e604051620002ad9062000488565b620002bd95949392919062000556565b604051809103906000f080158015620002da573d6000803e3d6000fd5b50600054604051630998fc6d60e21b81529192506001600160a01b031690632663f1b4906200030e9084906004016200052d565b600060405180830381600087803b1580156200032957600080fd5b505af11580156200033e573d6000803e3d6000fd5b505060008054604051630e848da360e41b81529193506001600160a01b0316915063e848da30906200037590869060040162000541565b60206040518083038186803b1580156200038e57600080fd5b505afa158015620003a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c99190620004c6565b600154604051630d15c16960e21b81529192506001600160a01b03169063345705a490620003fc90849060040162000598565b600060405180830381600087803b1580156200041757600080fd5b505af11580156200042c573d6000803e3d6000fd5b5050505050505080600101905062000273565b505050620005a1565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b612b188062001ae283390190565b610c3880620045fa83390190565b6113a4806200523283390190565b600060208284031215620004a8578081fd5b81516001600160a01b0381168114620004bf578182fd5b9392505050565b600060208284031215620004d8578081fd5b5051919050565b60008151808452815b818110156200050657602081850181015186830182015201620004e8565b81811115620005185782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b600060208252620004bf6020830184620004df565b600060a082526200056b60a0830188620004df565b6001600160a01b039690961660208301525060408101939093526060830191909152608090910152919050565b90815260200190565b61153180620005b16000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639d986f9111610097578063c0156bcc11610066578063c0156bcc146101b9578063cd4b6914146101c1578063d89601fd146101d4578063e2db5a52146101dc576100f5565b80639d986f9114610178578063aea36b531461018b578063b00c0b761461019e578063b39c6858146101b1576100f5565b806376794efb116100d357806376794efb146101355780637ac420ad1461014a5780638c9d28b61461015d5780638fc6f66714610165576100f5565b80633b56f098146100fa5780635267a15d1461011857806371e1fad91461012d575b600080fd5b6101026101ef565b60405161010f91906113d5565b60405180910390f35b6101206101f7565b60405161010f91906112af565b61012061021c565b610148610143366004611003565b61022c565b005b610102610158366004610fb5565b6102e8565b610120610303565b610148610173366004611254565b610312565b610148610186366004610fd8565b610573565b610148610199366004610fb5565b6105f5565b6101486101ac366004611046565b610658565b610120610703565b61010261071d565b6101026101cf3660046111b2565b610722565b61010261073c565b6101486101ea3660046111e2565b610861565b600160801b81565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b6001546001600160a01b03165b90565b600154604080518082019091526016815275566f7465722077686974656c6973746572206f6e6c7960501b6020820152906001600160a01b0316331461028e5760405162461bcd60e51b815260040161028591906113de565b60405180910390fd5b5060005b82518110156102e357816001901b19600260008584815181106102b157fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091169055600101610292565b505050565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031690565b6000805460405163d75f6d8160e01b81526001600160a01b039091169063d75f6d81906103439084906004016113d5565b60206040518083038186803b15801561035b57600080fd5b505afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190611196565b9050806001600160a01b031663a29a839f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ce57600080fd5b505afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040691906111ca565b83146040518060400160405280600e81526020016d15dc9bdb99c8195c1bd8da081a5960921b8152509061044d5760405162461bcd60e51b815260040161028591906113de565b506000838152600360209081526040808320338452825291829020548251808401909352601983527f4475706c6963617465207375626d697420696e2065706f63680000000000000091830191909152156104bb5760405162461bcd60e51b815260040161028591906113de565b5033600090815260026020908152604091829020548251808401909352600f83526e139bdd081dda1a5d195b1a5cdd1959608a1b918301919091526105135760405162461bcd60e51b815260040161028591906113de565b5060008381526003602090815260408083203380855292529182902084905590518491907f5e2f64e70eafef31c2f48c8ef140b36406531c36ab0faaede30843202c16f6a89061056690869042906113c7565b60405180910390a3505050565b600154604080518082019091526016815275566f7465722077686974656c6973746572206f6e6c7960501b6020820152906001600160a01b031633146105cc5760405162461bcd60e51b815260040161028591906113de565b506001600160a01b0390911660009081526002602052604090208054600190921b919091179055565b60006105ff6101f7565b6001600160a01b0316146040518060400160405280600b81526020016a105b1c9958591e481cd95d60aa1b8152509061064b5760405162461bcd60e51b815260040161028591906113de565b5061065581610cea565b50565b6106606101f7565b6001600160a01b0316336001600160a01b0316146106bc576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b6106f56106f083836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250610d0e565b610cea565b6106ff8282610e3b565b5050565b600060405162461bcd60e51b815260040161028590611431565b606481565b60006004606483066064811061073457fe5b015492915050565b6000805460405163d75f6d8160e01b815282916001600160a01b03169063d75f6d819061076d9084906004016113d5565b60206040518083038186803b15801561078557600080fd5b505afa158015610799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd9190611196565b90506000816001600160a01b031663a29a839f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fa57600080fd5b505afa15801561080e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083291906111ca565b90508061084457600092505050610229565b600460646000198301066064811061085857fe5b01549250505090565b8251825160408051808201909152601a81527f4172726179206c656e6774687320646f206e6f74206d6174636800000000000060208201529082146108b95760405162461bcd60e51b815260040161028591906113de565b5060408051808201909152601781527f546f6f20736d616c6c2072616e646f6d206e756d6265720000000000000000006020820152600160801b8310156109135760405162461bcd60e51b815260040161028591906113de565b508383833360405160200161092b9493929190611380565b60408051601f19818403018152828252805160209182012060008981526003835283812033825283528390205460608501909352602380855292149291906114d9908301399061098e5760405162461bcd60e51b815260040161028591906113de565b50600080546040516313968ea760e31b81526001600160a01b0390911690639cb47538906109c090889060040161136d565b60006040518083038186803b1580156109d857600080fd5b505afa1580156109ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a1491908101906110fd565b3360009081526002602052604081205491925083610a33576000610ac7565b82600081518110610a4057fe5b60200260200101516001600160a01b031663f72cab28338a6040518363ffffffff1660e01b8152600401610a759291906112c3565b602060405180830381600087803b158015610a8f57600080fd5b505af1158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac791906111ca565b90506000805b85811015610c3f578015801590610af75750888181518110610aeb57fe5b60200260200101518210155b15610b4757604080518082018252601b81527f4654534f20696e6469636573206e6f7420696e6372656173696e6700000000006020820152905162461bcd60e51b815261028591906004016113de565b888181518110610b5357fe5b60200260200101519150816001901b841660001415610ba957604080518082018252600f81526e139bdd081dda1a5d195b1a5cdd1959608a1b6020820152905162461bcd60e51b815261028591906004016113de565b848181518110610bb557fe5b60200260200101516001600160a01b031663c1f6c36e338c8b8581518110610bd957fe5b6020026020010151876040518563ffffffff1660e01b8152600401610c0194939291906112dc565b600060405180830381600087803b158015610c1b57600080fd5b505af1158015610c2f573d6000803e3d6000fd5b505060019092019150610acd9050565b5060008981526003602090815260408083203384528252808320929092559051610c6d9188918a9101611460565b60408051601f198184030181529190528051602090910120600460648b0660648110610c9557fe5b0180549091019055604051899033907fafffa539ac1cad89751c875d871abadc6deb7bd51bf6baea004fc71ca0a48fa590610cd79088908c908c904290611302565b60405180910390a3505050505050505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015610d52578181015183820152602001610d3a565b50505050905090810190601f168015610d7f5780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b8651811015610de757868181518110610db557fe5b6020026020010151831415610ddf57858181518110610dd057fe5b60200260200101519150610de7565b600101610da0565b506001600160a01b038116610e32576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b95945050505050565b610e6a82826040518060400160405280600c81526020016b4674736f526567697374727960a01b815250610d0e565b6000806101000a8154816001600160a01b0302191690836001600160a01b03160217905550610ec282826040518060400160405280601081526020016f2b37ba32b92bb434ba32b634b9ba32b960811b815250610d0e565b600180546001600160a01b0319166001600160a01b03929092169190911790555050565b600082601f830112610ef6578081fd5b81356020610f0b610f06836114a5565b611481565b8281528181019085830183850287018401881015610f27578586fd5b855b85811015610f4e578135610f3c816114c3565b84529284019290840190600101610f29565b5090979650505050505050565b600082601f830112610f6b578081fd5b81356020610f7b610f06836114a5565b8281528181019085830183850287018401881015610f97578586fd5b855b85811015610f4e57813584529284019290840190600101610f99565b600060208284031215610fc6578081fd5b8135610fd1816114c3565b9392505050565b60008060408385031215610fea578081fd5b8235610ff5816114c3565b946020939093013593505050565b60008060408385031215611015578182fd5b823567ffffffffffffffff81111561102b578283fd5b61103785828601610ee6565b95602094909401359450505050565b60008060408385031215611058578182fd5b823567ffffffffffffffff8082111561106f578384fd5b818501915085601f830112611082578384fd5b81356020611092610f06836114a5565b82815281810190858301838502870184018b10156110ae578889fd5b8896505b848710156110d05780358352600196909601959183019183016110b2565b50965050860135925050808211156110e6578283fd5b506110f385828601610ee6565b9150509250929050565b6000602080838503121561110f578182fd5b825167ffffffffffffffff811115611125578283fd5b8301601f81018513611135578283fd5b8051611143610f06826114a5565b818152838101908385018584028501860189101561115f578687fd5b8694505b8385101561118a578051611176816114c3565b835260019490940193918501918501611163565b50979650505050505050565b6000602082840312156111a7578081fd5b8151610fd1816114c3565b6000602082840312156111c3578081fd5b5035919050565b6000602082840312156111db578081fd5b5051919050565b600080600080608085870312156111f7578182fd5b84359350602085013567ffffffffffffffff80821115611215578384fd5b61122188838901610f5b565b94506040870135915080821115611236578384fd5b5061124387828801610f5b565b949793965093946060013593505050565b60008060408385031215611266578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156112a457815187529582019590820190600101611288565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6080808252855190820181905260009060209060a0840190828901845b828110156113445781516001600160a01b03168452928401929084019060010161131f565b505050838103828501526113588188611275565b60408501969096525050506060015292915050565b600060208252610fd16020830184611275565b6000608082526113936080830187611275565b82810360208401526113a58187611275565b604084019590955250506001600160a01b039190911660609091015292915050565b918252602082015260400190565b90815260200190565b6000602080835283518082850152825b8181101561140a578581018301518582016040015282016113ee565b8181111561141b5783604083870101525b50601f01601f1916929092016040019392505050565b602080825260159082015274139bdd081a5b88191d5b5b5e4818dbdb9d1c9858dd605a1b604082015260600190565b6000838252604060208301526114796040830184611275565b949350505050565b60405181810167ffffffffffffffff8111828210171561149d57fe5b604052919050565b600067ffffffffffffffff8211156114b957fe5b5060209081020190565b6001600160a01b038116811461065557600080fdfe507269636520616c72656164792072657665616c6564206f72206e6f742076616c6964a26469706673582212202c6e5349340866d9ba441624b6848b9d93959acfab8d7a72319a2477e321d2a864736f6c6343000706003360806040523480156200001157600080fd5b5060405162002b1838038062002b1883398101604081905262000034916200016c565b80806001600160a01b0381161562000051576200005181620000a9565b506001600160a01b038116620000a1576040805162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b604482015290519081900360640190fd5b50506200019c565b600054600160a01b900460ff161562000109576040805162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c7365000000000000000000000000604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b6000602082840312156200017e578081fd5b81516001600160a01b038116811462000195578182fd5b9392505050565b61296c80620001ac6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806397da6af4116100f9578063c71a1b2011610097578063e17f212e11610071578063e17f212e146103ea578063e68f283b146103ff578063e848da3014610415578063f5a9838314610435576101c4565b8063c71a1b20146103a2578063ce1c0e4d146103c2578063d75f6d81146103d7576101c4565b8063a40060ba116100d3578063a40060ba14610361578063a670ff8714610369578063a69afdc61461037c578063c55d0f561461038f576101c4565b806397da6af41461031b5780639cb475381461032e5780639d6a890f1461034e576101c4565b80635aa6e6751161016657806367fc40291161014057806367fc4029146102bb57806374e6310e146102ce5780637687542c146102ef578063798aac5b14610306576101c4565b80635aa6e6751461028b5780635ff27079146102a057806362354e03146102b3576101c4565b8063257cbd3a116101a2578063257cbd3a1461021e5780632663f1b4146102405780632bcdd6ab1461025557806342a0f2431461026a576101c4565b806306a2ba29146101c95780630cf48497146101e8578063136d3f64146101fe575b600080fd5b6101d161043d565b6040516101df9291906127aa565b60405180910390f35b6101f0610513565b6040516101df929190612772565b61021161020c366004612558565b6106d8565b6040516101df9190612830565b61023161022c366004612558565b61075f565b6040516101df9392919061287b565b61025361024e366004612383565b6107ea565b005b61025d610a30565b6040516101df919061274c565b61027d61027836600461246e565b610aec565b6040516101df92919061286d565b610293610b78565b6040516101df91906126b1565b6102536102ae366004612446565b610c0d565b610293610f62565b6102536102c9366004612446565b610f6d565b6102e16102dc366004612446565b611055565b6040516101df92919061284c565b6102f76110fb565b6040516101df939291906127e2565b61030e6112c0565b6040516101df9190612797565b61029361032936600461246e565b6112ca565b61034161033c3660046123a6565b6112d8565b6040516101df91906126c5565b61025361035c366004612383565b611465565b61025d61151e565b610253610377366004612383565b6115f5565b61023161038a36600461246e565b611845565b61027d61039d366004612558565b611856565b6103b56103b0366004612558565b611862565b6040516101df9190612712565b6103ca611948565b6040516101df919061275f565b6102936103e5366004612558565b611a7f565b6103f2611a8a565b6040516101df9190612825565b610407611a9a565b6040516101df9291906127bd565b61042861042336600461246e565b611bd0565b6040516101df9190612843565b610253611bdb565b606080610448611c95565b8051909250806001600160401b038111801561046357600080fd5b5060405190808252806020026020018201604052801561048d578160200160208202803683370190505b5091505b801561050e578060019003905060028382815181106104ac57fe5b6020026020010151815481106104be57fe5b600091825260208220600590910201015482516001600160a01b03909116908390839081106104e957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610491565b509091565b6060806000610520611c95565b8051909150806001600160401b038111801561053b57600080fd5b50604051908082528060200260200182016040528015610565578160200160208202803683370190505b509250806001600160401b038111801561057e57600080fd5b506040519080825280602002602001820160405280156105b257816020015b606081526020019060019003908161059d5790505b5093505b80156106d2578060019003905060028282815181106105d157fe5b6020026020010151815481106105e357fe5b600091825260208220600590910201015483516001600160a01b039091169084908390811061060e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505082818151811061063a57fe5b60200260200101516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561067a57600080fd5b505afa15801561068e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106b691908101906124e6565b8482815181106106c257fe5b60200260200101819052506105b6565b50509091565b60606106e382611dd6565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561071b57600080fd5b505afa15801561072f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261075791908101906124e6565b90505b919050565b600080600061076d84611dd6565b6001600160a01b03166365f5cd866040518163ffffffff1660e01b815260040160606040518083038186803b1580156107a557600080fd5b505afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd9190612593565b9250925092509193909250565b600054600160b01b900460ff168061080c5750600054600160a81b900460ff16155b15610a2257610819611e8d565b600060028054905090506000826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561085e57600080fd5b505afa158015610872573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089a91908101906124e6565b90506000816040516020016108af9190612830565b60405160208183030381529060405280519060200120905060005b838110156109ba576000600282815481106108e157fe5b60009182526020822060059091020101546001600160a01b031690508061090857506109b2565b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561094157600080fd5b505afa158015610955573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261097d91908101906124e6565b60405160200161098d9190612830565b604051602081830303815290604052805190602001208314156109b057506109ba565b505b6001016108ca565b838114156109d3576002805460010181556000526109dc565b6109dc81611ec4565b84600282815481106109ea57fe5b6000918252602082206005909102010180546001600160a01b0319166001600160a01b039290921691909117905550610a2d92505050565b610a2d600036611f57565b50565b6002546060906000816001600160401b0381118015610a4e57600080fd5b50604051908082528060200260200182016040528015610a78578160200160208202803683370190505b5090505b8115610ae6578160019003915060028281548110610a9657fe5b600091825260208220600590910201015481516001600160a01b0390911690829084908110610ac157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610a7c565b91505090565b600080610b00610afb846120da565b611dd6565b6001600160a01b031663eb91d37e6040518163ffffffff1660e01b8152600401604080518083038186803b158015610b3757600080fd5b505afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6f9190612570565b91509150915091565b60008054600160a81b900460ff16610b9b576000546001600160a01b0316610c08565b60076001609c1b016001600160a01b031663732524946040518163ffffffff1660e01b815260040160206040518083038186803b158015610bdb57600080fd5b505afa158015610bef573d6000803e3d6000fd5b505050506040513d6020811015610c0557600080fd5b50515b905090565b60408051630debfda360e41b8152336004820152905160076001609c1b019163debfda30916024808301926020929190829003018186803b158015610c5157600080fd5b505afa158015610c65573d6000803e3d6000fd5b505050506040513d6020811015610c7b57600080fd5b5051610cbe576040805162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b604482015290519081900360640190fd5b6001600160e01b0319811660009081526001602052604090208054610d2a576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b8054421015610d80576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f7765642079657400000000000000604482015290519081900360640190fd5b6000816001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e1a5780601f10610def57610100808354040283529160200191610e1a565b820191906000526020600020905b815481529060010190602001808311610dfd57829003601f168201915b5050506001600160e01b0319861660009081526001602081905260408220828155949550909250610e4e9150830182612280565b50506000805460ff60b01b1916600160b01b178155604051825130918491819060208401908083835b60208310610e965780518252601f199092019160209182019101610e77565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610ef8576040519150601f19603f3d011682016040523d82523d6000602084013e610efd565b606091505b50506000805460ff60b01b19169055604080516001600160e01b03198716815242602082015281519293507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438929081900390910190a1610f5c81612204565b50505050565b60076001609c1b0181565b610f75612221565b6001600160e01b03198116600090815260016020526040902054610fe0576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b604080516001600160e01b03198316815242602082015281517f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8929181900390910190a16001600160e01b0319811660009081526001602081905260408220828155919061105090830182612280565b505050565b600160208181526000928352604092839020805481840180548651600296821615610100026000190190911695909504601f810185900485028601850190965285855290949193929091908301828280156110f15780601f106110c6576101008083540402835291602001916110f1565b820191906000526020600020905b8154815290600101906020018083116110d457829003601f168201915b5050505050905082565b6060806060611108611c95565b8051909350806001600160401b038111801561112357600080fd5b5060405190808252806020026020018201604052801561114d578160200160208202803683370190505b509150806001600160401b038111801561116657600080fd5b5060405190808252806020026020018201604052801561119a57816020015b60608152602001906001900390816111855790505b5092505b80156112ba578060019003905060028482815181106111b957fe5b6020026020010151815481106111cb57fe5b600091825260208220600590910201015482516001600160a01b03909116908390839081106111f657fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081818151811061122257fe5b60200260200101516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561126257600080fd5b505afa158015611276573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261129e91908101906124e6565b8382815181106112aa57fe5b602002602001018190525061119e565b50909192565b6060610c08611c95565b6000610757610afb836120da565b600254815160609190806001600160401b03811180156112f757600080fd5b50604051908082528060200260200182016040528015611321578160200160208202803683370190505b5092505b801561145e5780600190039050600084828151811061134057fe5b60200260200101519050828110604051806040016040528060188152602001600080516020612917833981519152815250906113985760405162461bcd60e51b815260040161138f9190612830565b60405180910390fd5b50600281815481106113a657fe5b600091825260208220600590910201015484516001600160a01b03909116908590849081106113d157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006001600160a01b031684838151811061140857fe5b60200260200101516001600160a01b0316141561145857604080518082018252601881526000805160206129178339815191526020820152905162461bcd60e51b815261138f9190600401612830565b50611325565b5050919050565b600054600160a01b900460ff16156114bb576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b6060600061152a611c95565b8051909150806001600160401b038111801561154557600080fd5b5060405190808252806020026020018201604052801561156f578160200160208202803683370190505b5092505b80156115f05780600190039050600282828151811061158e57fe5b6020026020010151815481106115a057fe5b600091825260208220600590910201015483516001600160a01b03909116908490839081106115cb57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050611573565b505090565b600054600160b01b900460ff16806116175750600054600160a81b900460ff16155b15610a2257611624611e8d565b6000816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561165f57600080fd5b505afa158015611673573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261169b91908101906124e6565b6040516020016116ab9190612830565b60408051601f19818403018152919052805160209091012060025490915060005b81811015611806576000600282815481106116e357fe5b60009182526020822060059091020101546001600160a01b031690508061170a57506117fe565b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561174357600080fd5b505afa158015611757573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261177f91908101906124e6565b60405160200161178f9190612830565b604051602081830303815290604052805190602001208414156117fc576117b582611ec4565b6000600283815481106117c457fe5b6000918252602082206005909102010180546001600160a01b0319166001600160a01b03929092169190911790555061184092505050565b505b6001016116cc565b50604080518082018252601881526000805160206129178339815191526020820152905162461bcd60e51b815261138f9190600401612830565b610a2d565b600080600061076d610afb856120da565b600080610b0083611dd6565b61186a6122c4565b600254821080156118ab575060006001600160a01b03166002838154811061188e57fe5b60009182526020822060059091020101546001600160a01b031614155b604051806040016040528060188152602001600080516020612917833981519152815250906118ed5760405162461bcd60e51b815260040161138f9190612830565b50600282815481106118fb57fe5b600091825260209091206040805160a0810191829052926005908102909201919082845b81546001600160a01b0316815260019091019060200180831161191f5750505050509050919050565b60606000611954611c95565b8051909150806001600160401b038111801561196f57600080fd5b506040519080825280602002602001820160405280156119a357816020015b606081526020019060019003908161198e5790505b5092505b80156115f05780600190039050600060028383815181106119c457fe5b6020026020010151815481106119d657fe5b6000918252602082206005919091020154604080516395d89b4160e01b815290516001600160a01b03909216935083926395d89b4192600480840193829003018186803b158015611a2657600080fd5b505afa158015611a3a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a6291908101906124e6565b848381518110611a6e57fe5b6020026020010181905250506119a7565b600061075782611dd6565b600054600160a81b900460ff1681565b606080611aa5611c95565b8051909250806001600160401b0381118015611ac057600080fd5b50604051908082528060200260200182016040528015611af457816020015b6060815260200190600190039081611adf5790505b5091505b801561050e578060019003905060006002848381518110611b1557fe5b602002602001015181548110611b2757fe5b6000918252602082206005919091020154604080516395d89b4160e01b815290516001600160a01b03909216935083926395d89b4192600480840193829003018186803b158015611b7757600080fd5b505afa158015611b8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bb391908101906124e6565b838381518110611bbf57fe5b602002602001018190525050611af8565b6000610757826120da565b611be3612221565b600054600160a81b900460ff1615611c42576040805162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f6465000000000000604482015290519081900360640190fd5b60008054600161ff0160a01b031916600160a81b1790556040805160076001609c1b01815290517f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9181900360200190a1565b6002546060906000816001600160401b0381118015611cb357600080fd5b50604051908082528060200260200182016040528015611cdd578160200160208202803683370190505b50905060008060005b84811015611d4c57826001600160a01b031660028281548110611d0557fe5b60009182526020822060059091020101546001600160a01b031614611d445780848381518110611d3157fe5b6020026020010181815250508160010191505b600101611ce6565b50806001600160401b0381118015611d6357600080fd5b50604051908082528060200260200182016040528015611d8d578160200160208202803683370190505b5094505b8015611dcf5780600190039050828181518110611daa57fe5b6020026020010151858281518110611dbe57fe5b602002602001018181525050611d91565b5050505090565b600254604080518082019091526018815260008051602061291783398151915260208201526000918310611e1d5760405162461bcd60e51b815260040161138f9190612830565b50600060028381548110611e2d57fe5b60009182526020822060059091020101546001600160a01b0316905080611e8757604080518082018252601881526000805160206129178339815191526020820152905162461bcd60e51b815261138f9190600401612830565b92915050565b600054600160b01b900460ff1615611eba57333014611ea857fe5b6000805460ff60b01b19169055611ec2565b611ec2612221565b565b60045b8015611f535760028281548110611eda57fe5b90600052602060002090600502016001820360058110611ef657fe5b0154600280546001600160a01b039092169184908110611f1257fe5b90600052602060002090600502018260058110611f2b57fe5b0180546001600160a01b0319166001600160a01b039290921691909117905560001901611ec7565b5050565b611f5f612221565b600082359050600060076001609c1b016001600160a01b0316636221a54b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fa757600080fd5b505afa158015611fbb573d6000803e3d6000fd5b505050506040513d6020811015611fd157600080fd5b505160408051808201825242830180825282516020601f89018190048102820181019094528781529394509290918281019190889088908190840183828082843760009201829052509390945250506001600160e01b03198616815260016020818152604090922084518155848301518051919450612055939285019201906122e2565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405180856001600160e01b0319168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a15050505050565b600080826040516020016120ee9190612830565b60408051601f19818403018152919052805160209091012060025490915060005b818110156118065760006002828154811061212657fe5b60009182526020822060059091020101546001600160a01b031690508061214d57506121fc565b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561218657600080fd5b505afa15801561219a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121c291908101906124e6565b6040516020016121d29190612830565b604051602081830303815290604052805190602001208414156121fa5750925061075a915050565b505b60010161210f565b3d604051818101604052816000823e821561221d578181f35b8181fd5b612229610b78565b6001600160a01b0316336001600160a01b031614611ec2576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b50805460018160011615610100020316600290046000825580601f106122a65750610a2d565b601f016020900490600052602060002090810190610a2d919061236e565b6040518060a001604052806005906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282612318576000855561235e565b82601f1061233157805160ff191683800117855561235e565b8280016001018555821561235e579182015b8281111561235e578251825591602001919060010190612343565b5061236a92915061236e565b5090565b5b8082111561236a576000815560010161236f565b600060208284031215612394578081fd5b813561239f81612901565b9392505050565b600060208083850312156123b8578182fd5b82356001600160401b03808211156123ce578384fd5b818501915085601f8301126123e1578384fd5b8135818111156123ed57fe5b83810291506123fd848301612891565b8181528481019084860184860187018a1015612417578788fd5b8795505b8386101561243957803583526001959095019491860191860161241b565b5098975050505050505050565b600060208284031215612457578081fd5b81356001600160e01b03198116811461239f578182fd5b60006020828403121561247f578081fd5b81356001600160401b03811115612494578182fd5b8201601f810184136124a4578182fd5b80356124b76124b2826128b4565b612891565b8181528560208385010111156124cb578384fd5b81602084016020830137908101602001929092525092915050565b6000602082840312156124f7578081fd5b81516001600160401b0381111561250c578182fd5b8201601f8101841361251c578182fd5b805161252a6124b2826128b4565b81815285602083850101111561253e578384fd5b61254f8260208301602086016128d5565b95945050505050565b600060208284031215612569578081fd5b5035919050565b60008060408385031215612582578081fd5b505080516020909101519092909150565b6000806000606084860312156125a7578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156125f85781516001600160a01b0316875295820195908201906001016125d3565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b85811015612649578284038952612637848351612685565b9885019893509084019060010161261f565b5091979650505050505050565b6000815180845260208085019450808401835b838110156125f857815187529582019590820190600101612669565b6000815180845261269d8160208601602086016128d5565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156127065783516001600160a01b0316835292840192918401916001016126e1565b50909695505050505050565b60a08101818360005b60058110156127435781516001600160a01b031683526020928301929091019060010161271b565b50505092915050565b60006020825261239f60208301846125c0565b60006020825261239f6020830184612603565b6000604082526127856040830185612603565b828103602084015261254f81856125c0565b60006020825261239f6020830184612656565b6000604082526127856040830185612656565b6000604082526127d06040830185612656565b828103602084015261254f8185612603565b6000606082526127f56060830186612656565b82810360208401526128078186612603565b9050828103604084015261281b81856125c0565b9695505050505050565b901515815260200190565b60006020825261239f6020830184612685565b90815260200190565b6000838252604060208301526128656040830184612685565b949350505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b6040518181016001600160401b03811182821017156128ac57fe5b604052919050565b60006001600160401b038211156128c757fe5b50601f01601f191660200190565b60005b838110156128f05781810151838201526020016128d8565b83811115610f5c5750506000910152565b6001600160a01b0381168114610a2d57600080fdfe4654534f20696e646578206e6f7420737570706f727465640000000000000000a26469706673582212202d2de6708a08574cbfb26f8928f33cebdc0edbd32a28a1c4ac32c0395e12617e64736f6c634300070600336080604052600160005534801561001557600080fd5b50604051610c38380380610c3883398101604081905261003491610059565b600380546001600160a01b0319166001600160a01b0392909216919091179055610087565b60006020828403121561006a578081fd5b81516001600160a01b0381168114610080578182fd5b9392505050565b610ba2806100966000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80635fc560141161005b5780635fc56014146100f357806398dccfc214610106578063aa89dfd414610119578063b06cbaf71461012c57610088565b806309fcb4001461008d578063345705a4146100b65780633de2cb1c146100cb57806347ed51b1146100de575b600080fd5b6100a061009b3660046108a6565b61014d565b6040516100ad9190610932565b60405180910390f35b6100c96100c43660046108a6565b610211565b005b6100c96100d9366004610753565b61027a565b6100e66102d0565b6040516100ad9190610b27565b6100c9610101366004610737565b6102d6565b6100e66101143660046108a6565b610322565b6100a061012736600461081f565b610334565b61013f61013a366004610737565b6103c9565b6040516100ad929190610967565b600081815260016020526040902054606090806101855760405162461bcd60e51b815260040161017c90610a96565b60405180910390fd5b6000838152600260205260409020546001600160a01b0316806101ba575050604080516000815260208101909152905061020c565b6040805160018082528183019092526000916020808301908036833701905050905081816000815181106101ea57fe5b6001600160a01b0390921660209283029190910190910152925061020c915050565b919050565b6003546001600160a01b0316331461023b5760405162461bcd60e51b815260040161017c90610af9565b600081815260016020526040902054156102675760405162461bcd60e51b815260040161017c90610a5f565b6000805491815260016020526040902055565b6102838261050c565b156102a05760405162461bcd60e51b815260040161017c90610a36565b60006102ac8383610512565b9050806102cb5760405162461bcd60e51b815260040161017c90610acd565b505050565b60005481565b6003546001600160a01b031633146103005760405162461bcd60e51b815260040161017c90610af9565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60016020526000908152604090205481565b60048054604051630e848da360e41b81526060926000926001600160a01b03169163e848da3091610367918791016109e3565b60206040518083038186803b15801561037f57600080fd5b505afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b791906108be565b90506103c28161014d565b9392505050565b6060806103d58361050c565b156103f25760405162461bcd60e51b815260040161017c90610a36565b600480546040805163798aac5b60e01b815290516001600160a01b039092169263798aac5b928282019260009290829003018186803b15801561043457600080fd5b505afa158015610448573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610470919081019061077e565b80519092508067ffffffffffffffff8111801561048c57600080fd5b506040519080825280602002602001820160405280156104b6578160200160208202803683370190505b50915060005b81811015610505576104e1858583815181106104d457fe5b6020026020010151610512565b8382815181106104ed57fe5b911515602092830291909101909101526001016104bc565b5050915091565b50600090565b6000818152600160205260408120548061053e5760405162461bcd60e51b815260040161017c90610a96565b6000838152600260205260409020546001600160a01b0390811690851681141561056d576001925050506105fd565b600084815260026020908152604080832080546001600160a01b0319166001600160a01b038a161790558051600180825281830190925291828101908036833701905050905081816000815181106105c157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506105eb8186610603565b6105f586866106cc565b600193505050505b92915050565b60005b8251811015610663577f33359f2769756ca8d0da4683f25ee440744d6f18bfb166dbfb59315a8c62b01683828151811061063c57fe5b602002602001015183604051610653929190610919565b60405180910390a1600101610606565b506003546040516376794efb60e01b81526001600160a01b03909116906376794efb906106969085908590600401610945565b600060405180830381600087803b1580156106b057600080fd5b505af11580156106c4573d6000803e3d6000fd5b505050505050565b7f66a8b13abe95391d1851f5bc319f3dde54ce8f2f40a5fe226aa3251d805832e382826040516106fd929190610919565b60405180910390a1600354604051639d986f9160e01b81526001600160a01b0390911690639d986f91906106969085908590600401610919565b600060208284031215610748578081fd5b81356103c281610b54565b60008060408385031215610765578081fd5b823561077081610b54565b946020939093013593505050565b60006020808385031215610790578182fd5b825167ffffffffffffffff808211156107a7578384fd5b818501915085601f8301126107ba578384fd5b8151818111156107c657fe5b83810291506107d6848301610b30565b8181528481019084860184860187018a10156107f0578788fd5b8795505b838610156108125780518352600195909501949186019186016107f4565b5098975050505050505050565b60006020808385031215610831578182fd5b823567ffffffffffffffff80821115610848578384fd5b818501915085601f83011261085b578384fd5b81358181111561086757fe5b610879601f8201601f19168501610b30565b9150808252868482850101111561088e578485fd5b80848401858401378101909201929092529392505050565b6000602082840312156108b7578081fd5b5035919050565b6000602082840312156108cf578081fd5b5051919050565b6000815180845260208085019450808401835b8381101561090e5781516001600160a01b0316875295820195908201906001016108e9565b509495945050505050565b6001600160a01b03929092168252602082015260400190565b6000602082526103c260208301846108d6565b60006040825261095860408301856108d6565b90508260208301529392505050565b604080825283519082018190526000906020906060840190828701845b828110156109a057815184529284019290840190600101610984565b50505083810382850152845180825285830191830190845b818110156109d65783511515835292840192918401916001016109b8565b5090979650505050505050565b6000602080835283518082850152825b81811015610a0f578581018301518582016040015282016109f3565b81811115610a205783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e74727573746564206164647265737360881b604082015260600190565b60208082526017908201527f77686974656c69737420616c7265616479206578697374000000000000000000604082015260600190565b60208082526018908201527f4654534f20696e646578206e6f7420737570706f727465640000000000000000604082015260600190565b602080825260129082015271766f746520706f77657220746f6f206c6f7760701b604082015260600190565b60208082526014908201527337b7363c90383934b1b29039bab136b4ba3a32b960611b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715610b4c57fe5b604052919050565b6001600160a01b0381168114610b6957600080fd5b5056fea2646970667358221220bbe02274cd9cb76b8c3c097c5566403aa937aecee009659d366f31961dbb0cb864736f6c6343000706003360806040523480156200001157600080fd5b50604051620013a4380380620013a4833981810160405260a08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b5060409081526020828101519183015160608401516080909401518751939650909450916200011c916001919088019062000163565b50426003556000805460ff19166001179055600480546001600160a01b039095166001600160a01b031990951694909417909355600791909155600855600955506200020f565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200019b5760008555620001e6565b82601f10620001b657805160ff1916838001178555620001e6565b82800160010185558215620001e6579182015b82811115620001e6578251825591602001919060010190620001c9565b50620001f4929150620001f8565b5090565b5b80821115620001f45760008155600101620001f9565b611185806200021f6000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806395d89b4111610130578063d0d552dd116100b8578063eb91d37e1161007c578063eb91d37e146106e3578063f670ebe314610870578063f72cab2814610895578063f7dba1f5146108c1578063f937d6ad1461091657610232565b8063d0d552dd146107a2578063d89601fd146107c8578063e3749e0c146107d0578063e3b3a3b31461083b578063e536f3961461050357610232565b8063af52df08116100ff578063af52df08146106e3578063c1f6c36e14610704578063c5d8b9e71461073c578063cd4b691414610768578063cf35bdd01461078557610232565b806395d89b411461065e578063974d7a6b146105035780639edbf00714610557578063a29a839f146106db57610232565b806340462a2d116101be57806365f5cd861161018257806365f5cd86146104365780636b52b2421461055f5780637d1d6f1214610567578063826cc76b146105845780638357d08c146105a157610232565b806340462a2d1461043e5780634afd5102146105035780635303548b14610520578063555989da1461054f5780635c222bad1461055757610232565b8063144e159111610205578063144e15911461036c57806318931c35146103925780632f0a6f3c146103ea578063306ba253146104135780633cacb3ae1461043657610232565b806302fb0c5e14610237578063040d73b81461025357806311a7aaaa146102a3578063131fdee2146102c7575b600080fd5b61023f61091e565b604080519115158252519081900360200190f35b61025b610927565b6040518086815260200185815260200184600581111561027757fe5b815260200183815260200182600581111561028e57fe5b81526020019550505050505060405180910390f35b6102ab610936565b604080516001600160a01b039092168252519081900360200190f35b61036a600480360360208110156102dd57600080fd5b8101906020810181356401000000008111156102f857600080fd5b82018360208201111561030a57600080fd5b8035906020019184602083028401116401000000008311171561032c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061093b945050505050565b005b6103746109e1565b60408051938452602084019290925282820152519081900360600190f35b61039a6109ef565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103d65781810151838201526020016103be565b505050509050019250505060405180910390f35b61036a6004803603606081101561040057600080fd5b508035906020810135906040013561093b565b61036a6004803603604081101561042957600080fd5b508035906020013561093b565b610374610a56565b6104636004803603604081101561045457600080fd5b50803590602001351515610a60565b604051808060200180602001848152602001838103835286818151815260200191508051906020019060200280838360005b838110156104ad578181015183820152602001610495565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156104ec5781810151838201526020016104d4565b505050509050019550505050505060405180910390f35b61036a6004803603602081101561051957600080fd5b503561093b565b61053d6004803603602081101561053657600080fd5b5035610acc565b60408051918252519081900360200190f35b61036a61093b565b6102ab610adf565b61053d610b42565b61053d6004803603602081101561057d57600080fd5b5035610adf565b6102ab6004803603602081101561059a57600080fd5b5035610b47565b6105a9610b71565b604051808060200180602001878152602001868152602001858152602001848152602001838103835289818151815260200191508051906020019060200280838360005b838110156106055781810151838201526020016105ed565b50505050905001838103825288818151815260200191508051906020019060200280838360005b8381101561064457818101518382015260200161062c565b505050509050019850505050505050505060405180910390f35b610666610c16565b6040805160208082528351818301528351919283929083019185019080838360005b838110156106a0578181015183820152602001610688565b50505050905090810190601f1680156106cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61053d610ca3565b6106eb610cb2565b6040805192835260208301919091528051918290030190f35b61036a6004803603608081101561071a57600080fd5b506001600160a01b038135169060208101359060408101359060600135610cb8565b61053d6004803603604081101561075257600080fd5b50803590602001356001600160a01b0316610e66565b61053d6004803603602081101561077e57600080fd5b5035610e8e565b6102ab6004803603602081101561079b57600080fd5b5035610e99565b61036a600480360360208110156107b857600080fd5b50356001600160a01b031661093b565b61053d610ea9565b6107d8610ed7565b6040518088815260200187815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360008381101561064457818101518382015260200161062c565b610843610f9d565b60408051958652602086019490945284840192909252606084015215156080830152519081900360a00190f35b61036a6004803603604081101561088657600080fd5b5080359060200135151561093b565b61053d600480360360408110156108ab57600080fd5b506001600160a01b038135169060200135610fd3565b61036a600480360360e08110156108d757600080fd5b81359160208101359160408201359160608101359160808201359160a08101359181019060e0810160c08201356401000000008111156102f857600080fd5b6102ab610fdb565b60005460ff1681565b60008060008060009091929394565b600090565b6040805180820190915260178152600080516020611130833981519152602082015260405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109a657818101518382015260200161098e565b50505050905090810190601f1680156109d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b600754600854600954909192565b604080518082018252601781526000805160206111308339815191526020808301918252925162461bcd60e51b81526004810193845282516024820152825160609492839260440191808383600083156109a657818101518382015260200161098e565b90565b6000806000909192565b604080518082018252601781526000805160206111308339815191526020808301918252925162461bcd60e51b815260048101938452825160248201528251606094859460009490939192839260440191908083838983156109a657818101518382015260200161098e565b6000610ad782610fea565b90505b919050565b604080518082018252601781526000805160206111308339815191526020808301918252925162461bcd60e51b815260048101938452825160248201528251600094928392604401918083838983156109a657818101518382015260200161098e565b600581565b60068181548110610b5757600080fd5b6000918252602090912001546001600160a01b0316905081565b606080600080600080600060405180604001604052806017815260200160008051602061113083398151915281525090610bec5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a657818101518382015260200161098e565b50506040805160008082526020820181815282840190935290979196509450849350839250829150565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c9b5780601f10610c7057610100808354040283529160200191610c9b565b820191906000526020600020905b815481529060010190602001808311610c7e57829003601f168201915b505050505081565b6000610cad611015565b905090565b60008091565b6004546001600160a01b03163314610cd257610cd2611020565b60408051808201909152600e81526d0a0e4d2c6ca40e8dede40d0d2ced60931b6020820152600160801b8310610d495760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a657818101518382015260200161098e565b506008546007546001850190910201428111801590610d6b5750600954810142105b6040518060400160405280601881526020017f52657665616c20706572696f64206e6f7420616374697665000000000000000081525090610ded5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a657818101518382015260200161098e565b506000848152600a602090815260408083206001600160a01b038916808552908352818420879055815187815242938101939093528282018490526060830193909352518692917fc1b1d37612887c207efe8cb44f4069b7f10c45edaf6e8405648a94e02b6e9ec7919081900360800190a35050505050565b6000918252600a602090815260408084206001600160a01b0393909316845291905290205490565b6000610ad782611088565b60058181548110610b5757600080fd5b600080610eb4611015565b905080610ec5576000915050610a53565b610ed160018203611088565b91505090565b6000806000806000806060600060405180604001604052806017815260200160008051602061113083398151915281525090610f545760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a657818101518382015260200161098e565b506000808080808080604051908082528060200260200182016040528015610f86578160200160208202803683370190505b50959d949c50929a50909850965094509092509050565b6000806000806000610fad611015565b945060085485600101026007540193506009548401925060009150600090509091929394565b600092915050565b6004546001600160a01b031681565b6000600754821015610ffe57506000610ada565b60085460075483038161100d57fe5b049050610ada565b6000610cad42610fea565b604080518082018252600d81526c1058d8d95cdcc819195b9a5959609a1b6020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156109a657818101518382015260200161098e565b6004805460408051633352da4560e21b8152928301849052516000926001600160a01b039092169163cd4b6914916024808301926020929190829003018186803b1580156110d557600080fd5b505afa1580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b5051604080516020808201939093523081830152815180820383018152606090910190915280519101209291505056fe556e617661696c61626c6520666f722074657374696e67000000000000000000a26469706673582212209b3525a019452cc1f9f8ff457baf5012ead144c77e2e9bd4da5d93488785c85f64736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80639d986f9111610097578063c0156bcc11610066578063c0156bcc146101b9578063cd4b6914146101c1578063d89601fd146101d4578063e2db5a52146101dc576100f5565b80639d986f9114610178578063aea36b531461018b578063b00c0b761461019e578063b39c6858146101b1576100f5565b806376794efb116100d357806376794efb146101355780637ac420ad1461014a5780638c9d28b61461015d5780638fc6f66714610165576100f5565b80633b56f098146100fa5780635267a15d1461011857806371e1fad91461012d575b600080fd5b6101026101ef565b60405161010f91906113d5565b60405180910390f35b6101206101f7565b60405161010f91906112af565b61012061021c565b610148610143366004611003565b61022c565b005b610102610158366004610fb5565b6102e8565b610120610303565b610148610173366004611254565b610312565b610148610186366004610fd8565b610573565b610148610199366004610fb5565b6105f5565b6101486101ac366004611046565b610658565b610120610703565b61010261071d565b6101026101cf3660046111b2565b610722565b61010261073c565b6101486101ea3660046111e2565b610861565b600160801b81565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b6001546001600160a01b03165b90565b600154604080518082019091526016815275566f7465722077686974656c6973746572206f6e6c7960501b6020820152906001600160a01b0316331461028e5760405162461bcd60e51b815260040161028591906113de565b60405180910390fd5b5060005b82518110156102e357816001901b19600260008584815181106102b157fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091169055600101610292565b505050565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031690565b6000805460405163d75f6d8160e01b81526001600160a01b039091169063d75f6d81906103439084906004016113d5565b60206040518083038186803b15801561035b57600080fd5b505afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190611196565b9050806001600160a01b031663a29a839f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ce57600080fd5b505afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040691906111ca565b83146040518060400160405280600e81526020016d15dc9bdb99c8195c1bd8da081a5960921b8152509061044d5760405162461bcd60e51b815260040161028591906113de565b506000838152600360209081526040808320338452825291829020548251808401909352601983527f4475706c6963617465207375626d697420696e2065706f63680000000000000091830191909152156104bb5760405162461bcd60e51b815260040161028591906113de565b5033600090815260026020908152604091829020548251808401909352600f83526e139bdd081dda1a5d195b1a5cdd1959608a1b918301919091526105135760405162461bcd60e51b815260040161028591906113de565b5060008381526003602090815260408083203380855292529182902084905590518491907f5e2f64e70eafef31c2f48c8ef140b36406531c36ab0faaede30843202c16f6a89061056690869042906113c7565b60405180910390a3505050565b600154604080518082019091526016815275566f7465722077686974656c6973746572206f6e6c7960501b6020820152906001600160a01b031633146105cc5760405162461bcd60e51b815260040161028591906113de565b506001600160a01b0390911660009081526002602052604090208054600190921b919091179055565b60006105ff6101f7565b6001600160a01b0316146040518060400160405280600b81526020016a105b1c9958591e481cd95d60aa1b8152509061064b5760405162461bcd60e51b815260040161028591906113de565b5061065581610cea565b50565b6106606101f7565b6001600160a01b0316336001600160a01b0316146106bc576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b6106f56106f083836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250610d0e565b610cea565b6106ff8282610e3b565b5050565b600060405162461bcd60e51b815260040161028590611431565b606481565b60006004606483066064811061073457fe5b015492915050565b6000805460405163d75f6d8160e01b815282916001600160a01b03169063d75f6d819061076d9084906004016113d5565b60206040518083038186803b15801561078557600080fd5b505afa158015610799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd9190611196565b90506000816001600160a01b031663a29a839f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fa57600080fd5b505afa15801561080e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083291906111ca565b90508061084457600092505050610229565b600460646000198301066064811061085857fe5b01549250505090565b8251825160408051808201909152601a81527f4172726179206c656e6774687320646f206e6f74206d6174636800000000000060208201529082146108b95760405162461bcd60e51b815260040161028591906113de565b5060408051808201909152601781527f546f6f20736d616c6c2072616e646f6d206e756d6265720000000000000000006020820152600160801b8310156109135760405162461bcd60e51b815260040161028591906113de565b508383833360405160200161092b9493929190611380565b60408051601f19818403018152828252805160209182012060008981526003835283812033825283528390205460608501909352602380855292149291906114d9908301399061098e5760405162461bcd60e51b815260040161028591906113de565b50600080546040516313968ea760e31b81526001600160a01b0390911690639cb47538906109c090889060040161136d565b60006040518083038186803b1580156109d857600080fd5b505afa1580156109ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a1491908101906110fd565b3360009081526002602052604081205491925083610a33576000610ac7565b82600081518110610a4057fe5b60200260200101516001600160a01b031663f72cab28338a6040518363ffffffff1660e01b8152600401610a759291906112c3565b602060405180830381600087803b158015610a8f57600080fd5b505af1158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac791906111ca565b90506000805b85811015610c3f578015801590610af75750888181518110610aeb57fe5b60200260200101518210155b15610b4757604080518082018252601b81527f4654534f20696e6469636573206e6f7420696e6372656173696e6700000000006020820152905162461bcd60e51b815261028591906004016113de565b888181518110610b5357fe5b60200260200101519150816001901b841660001415610ba957604080518082018252600f81526e139bdd081dda1a5d195b1a5cdd1959608a1b6020820152905162461bcd60e51b815261028591906004016113de565b848181518110610bb557fe5b60200260200101516001600160a01b031663c1f6c36e338c8b8581518110610bd957fe5b6020026020010151876040518563ffffffff1660e01b8152600401610c0194939291906112dc565b600060405180830381600087803b158015610c1b57600080fd5b505af1158015610c2f573d6000803e3d6000fd5b505060019092019150610acd9050565b5060008981526003602090815260408083203384528252808320929092559051610c6d9188918a9101611460565b60408051601f198184030181529190528051602090910120600460648b0660648110610c9557fe5b0180549091019055604051899033907fafffa539ac1cad89751c875d871abadc6deb7bd51bf6baea004fc71ca0a48fa590610cd79088908c908c904290611302565b60405180910390a3505050505050505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015610d52578181015183820152602001610d3a565b50505050905090810190601f168015610d7f5780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b8651811015610de757868181518110610db557fe5b6020026020010151831415610ddf57858181518110610dd057fe5b60200260200101519150610de7565b600101610da0565b506001600160a01b038116610e32576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b95945050505050565b610e6a82826040518060400160405280600c81526020016b4674736f526567697374727960a01b815250610d0e565b6000806101000a8154816001600160a01b0302191690836001600160a01b03160217905550610ec282826040518060400160405280601081526020016f2b37ba32b92bb434ba32b634b9ba32b960811b815250610d0e565b600180546001600160a01b0319166001600160a01b03929092169190911790555050565b600082601f830112610ef6578081fd5b81356020610f0b610f06836114a5565b611481565b8281528181019085830183850287018401881015610f27578586fd5b855b85811015610f4e578135610f3c816114c3565b84529284019290840190600101610f29565b5090979650505050505050565b600082601f830112610f6b578081fd5b81356020610f7b610f06836114a5565b8281528181019085830183850287018401881015610f97578586fd5b855b85811015610f4e57813584529284019290840190600101610f99565b600060208284031215610fc6578081fd5b8135610fd1816114c3565b9392505050565b60008060408385031215610fea578081fd5b8235610ff5816114c3565b946020939093013593505050565b60008060408385031215611015578182fd5b823567ffffffffffffffff81111561102b578283fd5b61103785828601610ee6565b95602094909401359450505050565b60008060408385031215611058578182fd5b823567ffffffffffffffff8082111561106f578384fd5b818501915085601f830112611082578384fd5b81356020611092610f06836114a5565b82815281810190858301838502870184018b10156110ae578889fd5b8896505b848710156110d05780358352600196909601959183019183016110b2565b50965050860135925050808211156110e6578283fd5b506110f385828601610ee6565b9150509250929050565b6000602080838503121561110f578182fd5b825167ffffffffffffffff811115611125578283fd5b8301601f81018513611135578283fd5b8051611143610f06826114a5565b818152838101908385018584028501860189101561115f578687fd5b8694505b8385101561118a578051611176816114c3565b835260019490940193918501918501611163565b50979650505050505050565b6000602082840312156111a7578081fd5b8151610fd1816114c3565b6000602082840312156111c3578081fd5b5035919050565b6000602082840312156111db578081fd5b5051919050565b600080600080608085870312156111f7578182fd5b84359350602085013567ffffffffffffffff80821115611215578384fd5b61122188838901610f5b565b94506040870135915080821115611236578384fd5b5061124387828801610f5b565b949793965093946060013593505050565b60008060408385031215611266578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156112a457815187529582019590820190600101611288565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6080808252855190820181905260009060209060a0840190828901845b828110156113445781516001600160a01b03168452928401929084019060010161131f565b505050838103828501526113588188611275565b60408501969096525050506060015292915050565b600060208252610fd16020830184611275565b6000608082526113936080830187611275565b82810360208401526113a58187611275565b604084019590955250506001600160a01b039190911660609091015292915050565b918252602082015260400190565b90815260200190565b6000602080835283518082850152825b8181101561140a578581018301518582016040015282016113ee565b8181111561141b5783604083870101525b50601f01601f1916929092016040019392505050565b602080825260159082015274139bdd081a5b88191d5b5b5e4818dbdb9d1c9858dd605a1b604082015260600190565b6000838252604060208301526114796040830184611275565b949350505050565b60405181810167ffffffffffffffff8111828210171561149d57fe5b604052919050565b600067ffffffffffffffff8211156114b957fe5b5060209081020190565b6001600160a01b038116811461065557600080fdfe507269636520616c72656164792072657665616c6564206f72206e6f742076616c6964a26469706673582212202c6e5349340866d9ba441624b6848b9d93959acfab8d7a72319a2477e321d2a864736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
