0x60a06040523060805234801561001457600080fd5b506080516122bf61004c60003960008181610274015281816102bd0152818161049e015281816104de015261055601526122bf6000f3fe6080604052600436106100b15760003560e01c80633659cfe6146100bd5780633a2790fc146100df5780634ecb5796146100ff5780634f1ef2861461011f57806352d1902d1461013257806354fd4d501461015a5780635cf66f601461016e578063715018a6146101a95780638129fc1c146101be5780638da5cb5b146101d3578063aaf10f42146101f5578063ad2f2a901461020a578063c0d786551461022a578063f2fde38b1461024a57600080fd5b366100b857005b600080fd5b3480156100c957600080fd5b506100dd6100d8366004611ca8565b61026a565b005b3480156100eb57600080fd5b506100dd6100fa366004611ca8565b61033b565b34801561010b57600080fd5b506100dd61011a366004611ca8565b610410565b6100dd61012d366004611d09565b610494565b34801561013e57600080fd5b50610147610549565b6040519081526020015b60405180910390f35b34801561016657600080fd5b506064610147565b34801561017a57600080fd5b5061018e610189366004611dae565b6105f7565b60408051938452602084019290925290820152606001610151565b3480156101b557600080fd5b506100dd610c30565b3480156101ca57600080fd5b506100dd610c44565b3480156101df57600080fd5b506101e86110dd565b6040516101519190611e29565b34801561020157600080fd5b506101e86110ec565b34801561021657600080fd5b506100dd610225366004611e3d565b6110fb565b34801561023657600080fd5b506100dd610245366004611ca8565b611116565b34801561025657600080fd5b506100dd610265366004611ca8565b611140565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102bb5760405162461bcd60e51b81526004016102b290611e56565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102ed6111b6565b6001600160a01b0316146103135760405162461bcd60e51b81526004016102b290611e90565b61031c816111d2565b60408051600080825260208201909252610338918391906111da565b50565b61034361134a565b6103c533826001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016103739190611e29565b602060405180830381865afa158015610390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b49190611eca565b6001600160a01b03841691906113a9565b60405133904790600081818185875af1925050503d8060008114610405576040519150601f19603f3d011682016040523d82523d6000602084013e61040a565b606091505b50505050565b61041861134a565b60405163095ea7b360e01b815260008051602061226a8339815191529063095ea7b39061044d90849060001990600401611ee3565b6020604051808303816000875af115801561046c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104909190611efc565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104dc5760405162461bcd60e51b81526004016102b290611e56565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661050e6111b6565b6001600160a01b0316146105345760405162461bcd60e51b81526004016102b290611e90565b61053d826111d2565b610490828260016111da565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105e45760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60648201526084016102b2565b5060008051602061222383398151915290565b600080600061060461134a565b6040516370a0823160e01b8152479060009060008051602061226a833981519152906370a082319061063a903090600401611e29565b602060405180830381865afa158015610657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067b9190611eca565b6040516370a0823160e01b815290915060009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a08231906106b8903090600401611e29565b602060405180830381865afa1580156106d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f99190611eca565b90506000886001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016107299190611e29565b602060405180830381865afa158015610746573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190611eca565b60405163721b0a4760e01b81526001600160801b038e166004820152602481018a90526001600160a01b038d81166044830152919250908e169063721b0a47906064016020604051808303816000875af11580156107cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f09190611eca565b506040516370a0823160e01b815260009060008051602061226a833981519152906370a0823190610825903090600401611e29565b602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190611eca565b905060008a6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016108969190611e29565b602060405180830381865afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d79190611eca565b90508185116109215760405162461bcd60e51b8152602060048201526016602482015275199c985e0818985b081b9bdd08191958dc99585cd95960521b60448201526064016102b2565b82811161096f5760405162461bcd60e51b815260206004820152601c60248201527b18dbdb1b185d195c985b0818985b081b9bdd081a5b98dc99585cd95960221b60448201526064016102b2565b60007314d04fff8d21bd62987a5ce9ce543d2f1edf5d3e6001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611f35565b5050509150506000670de0b6b3a76400008488610a049190611f9b565b610a0e9084611fae565b610a189190611fcd565b90506001600160a01b038d1673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214610a4957610a49838f8f6113ff565b6040516370a0823160e01b815260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190610a83903090600401611e29565b602060405180830381865afa158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac49190611eca565b9050868111610ad257600080fd5b818111610b315760405162461bcd60e51b815260206004820152602760248201527f4e6f742070726f66697461626c65206166746572206c69717569646174696f6e6044820152660202b20737761760cc1b60648201526084016102b2565b604051632e1a7d4d60e01b81526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015610b7e57600080fd5b505af1158015610b92573d6000803e3d6000fd5b504192506108fc9150612710905084610bab8d47611f9b565b610bb59190611f9b565b60ca54610bc29190611fae565b610bcc9190611fcd565b6040518115909202916000818181858888f19350505050158015610bf4573d6000803e3d6000fd5b50610bff8589611f9b565b82610c0a8b47611f9b565b610c149190611f9b565b859b509b509b5050505050505050505096509650969350505050565b610c3861134a565b610c426000611730565b565b600054610100900460ff1615808015610c645750600054600160ff909116105b80610c855750610c7330611782565b158015610c85575060005460ff166001145b610ce85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102b2565b6000805460ff191660011790558015610d0b576000805461ff0019166101001790555b610d13611791565b610d1b6117b8565b60405163095ea7b360e01b815260008051602061226a8339815191529063095ea7b390610d64907332467a5fc2d72d21e8dce990906547a2b012f3829060001990600401611ee3565b6020604051808303816000875af1158015610d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190611efc565b5060405163095ea7b360e01b815260008051602061226a8339815191529063095ea7b390610df19073794f6b13fbd7eb7ef10d1ed205c9a416910207ff9060001990600401611ee3565b6020604051808303816000875af1158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190611efc565b5060405163095ea7b360e01b815260008051602061226a8339815191529063095ea7b390610e7e9073a1d100a5bf6bfd2736837c97248853d989a9ed849060001990600401611ee3565b6020604051808303816000875af1158015610e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec19190611efc565b5060405163095ea7b360e01b815260008051602061226a8339815191529063095ea7b390610f0b9073dbe88dbac39263c47629ebba02b3ef4cf0752a729060001990600401611ee3565b6020604051808303816000875af1158015610f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4e9190611efc565b5060405163095ea7b360e01b815260008051602061226a8339815191529063095ea7b390610f9890733835a58ca93cdb5f912519ad366826ac9a7525109060001990600401611ee3565b6020604051808303816000875af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611efc565b5060405163095ea7b360e01b815260008051602061226a8339815191529063095ea7b390611025907350e627a1df8d665524942ad7ec6392b6ba60293a9060001990600401611ee3565b6020604051808303816000875af1158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190611efc565b50611b5860ca5560c980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790558015610338576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6097546001600160a01b031690565b60006110f66111b6565b905090565b61110361134a565b612710811061111157600080fd5b60ca55565b61111e61134a565b60c980546001600160a01b0319166001600160a01b0392909216919091179055565b61114861134a565b6001600160a01b0381166111ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b2565b61033881611730565b600080516020612223833981519152546001600160a01b031690565b61033861134a565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156112125761120d836117e7565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561126c575060408051601f3d908101601f1916820190925261126991810190611eca565b60015b6112cf5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016102b2565b600080516020612223833981519152811461133e5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016102b2565b5061120d838383611881565b336113536110dd565b6001600160a01b031614610c425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b2565b61120d8363a9059cbb60e01b84846040516024016113c8929190611ee3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118a6565b604080516002808252606082018352600092602083019080368337019050509050818160008151811061143457611434611fef565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061147c5761147c611fef565b6001600160a01b03928316602091820292909201015260c95460405163d06ca61f60e01b8152600092919091169063d06ca61f906114c09088908690600401612005565b600060405180830381865afa1580156114dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611505919081019061205c565b60405163a9059cbb60e01b81529091506001600160a01b0384169063a9059cbb906115369087908990600401611ee3565b6020604051808303816000875af1158015611555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115799190611efc565b5073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b038416111561166657836001600160a01b031663022c0d9f826001815181106115c1576115c1611fef565b602002602001015160003060006001600160401b038111156115e5576115e5611cc3565b6040519080825280601f01601f19166020018201604052801561160f576020820181803683370190505b506040518563ffffffff1660e01b815260040161162f9493929190612151565b600060405180830381600087803b15801561164957600080fd5b505af115801561165d573d6000803e3d6000fd5b50505050611729565b836001600160a01b031663022c0d9f60008360018151811061168a5761168a611fef565b60200260200101513060006001600160401b038111156116ac576116ac611cc3565b6040519080825280601f01601f1916602001820160405280156116d6576020820181803683370190505b506040518563ffffffff1660e01b81526004016116f69493929190612151565b600060405180830381600087803b15801561171057600080fd5b505af1158015611724573d6000803e3d6000fd5b505050505b5050505050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03163b151590565b600054610100900460ff16610c425760405162461bcd60e51b81526004016102b290612188565b600054610100900460ff166117df5760405162461bcd60e51b81526004016102b290612188565b610c42611978565b6117f081611782565b6118525760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102b2565b60008051602061222383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61188a836119a8565b6000825111806118975750805b1561120d5761040a83836119e8565b60006118fb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611adc9092919063ffffffff16565b80519091501561120d57808060200190518101906119199190611efc565b61120d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102b2565b600054610100900460ff1661199f5760405162461bcd60e51b81526004016102b290612188565b610c4233611730565b6119b1816117e7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606119f383611782565b611a4e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016102b2565b600080846001600160a01b031684604051611a6991906121d3565b600060405180830381855af49150503d8060008114611aa4576040519150601f19603f3d011682016040523d82523d6000602084013e611aa9565b606091505b5091509150611ad1828260405180606001604052806027815260200161224360279139611af5565b925050505b92915050565b6060611aeb8484600085611b0e565b90505b9392505050565b60608315611b04575081611aee565b611aee8383611beb565b606082471015611b6f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102b2565b600080866001600160a01b03168587604051611b8b91906121d3565b60006040518083038185875af1925050503d8060008114611bc8576040519150601f19603f3d011682016040523d82523d6000602084013e611bcd565b606091505b5091509150611bde87838387611c15565b925050505b949350505050565b815115611bfb5781518083602001fd5b8060405162461bcd60e51b81526004016102b291906121ef565b60608315611c82578251600003611c7b57611c2f85611782565b611c7b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102b2565b5081611be3565b611be38383611beb565b80356001600160a01b0381168114611ca357600080fd5b919050565b600060208284031215611cba57600080fd5b611aee82611c8c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611d0157611d01611cc3565b604052919050565b60008060408385031215611d1c57600080fd5b611d2583611c8c565b91506020838101356001600160401b0380821115611d4257600080fd5b818601915086601f830112611d5657600080fd5b813581811115611d6857611d68611cc3565b611d7a601f8201601f19168501611cd9565b91508082528784828501011115611d9057600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060008060008060c08789031215611dc757600080fd5b611dd087611c8c565b955060208701356001600160801b0381168114611dec57600080fd5b9450611dfa60408801611c8c565b9350611e0860608801611c8c565b9250611e1660808801611c8c565b915060a087013590509295509295509295565b6001600160a01b0391909116815260200190565b600060208284031215611e4f57600080fd5b5035919050565b6020808252602c9082015260008051602061220383398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061220383398151915260408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215611edc57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215611f0e57600080fd5b81518015158114611aee57600080fd5b80516001600160501b0381168114611ca357600080fd5b600080600080600060a08688031215611f4d57600080fd5b611f5686611f1e565b9450602086015193506040860151925060608601519150611f7960808701611f1e565b90509295509295909350565b634e487b7160e01b600052601160045260246000fd5b81810381811115611ad657611ad6611f85565b6000816000190483118215151615611fc857611fc8611f85565b500290565b600082611fea57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b8181101561204f5784516001600160a01b03168352938301939183019160010161202a565b5090979650505050505050565b6000602080838503121561206f57600080fd5b82516001600160401b038082111561208657600080fd5b818501915085601f83011261209a57600080fd5b8151818111156120ac576120ac611cc3565b8060051b91506120bd848301611cd9565b81815291830184019184810190888411156120d757600080fd5b938501935b838510156120f5578451825293850193908501906120dc565b98975050505050505050565b60005b8381101561211c578181015183820152602001612104565b50506000910152565b6000815180845261213d816020860160208601612101565b601f01601f19169290920160200192915050565b84815283602082015260018060a01b038316604082015260806060820152600061217e6080830184612125565b9695505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082516121e5818460208701612101565b9190910192915050565b602081526000611aee602083018461212556fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000853d955acef822db058eb8505911ed77f175b99ea264697066735822122032670091be23e5f38c8f0946d6913cd9ac524011aa5b6cc54a623ea6dd7a73d464736f6c63430008100033