0x60a06040523060805234801561001457600080fd5b506080516129cf61004c6000396000818161062801528181610668015281816108f2015281816109320152610a1401526129cf6000f3fe6080604052600436106101405760003560e01c806344b21ae4116100b6578063806a83151161006f578063806a8315146103bd5780638129fc1c146103d357806391d14854146103e8578063a217fddf14610408578063aa709b4e1461041d578063d547741f1461043057600080fd5b806344b21ae4146103015780634f1ef286146103215780634f4b68b71461033457806352d1902d146103545780636b84ac161461036957806375c90f1e1461038957600080fd5b806324d7806c1161010857806324d7806c1461023f5780632f2ff15d1461025f57806332a59e1f1461027f57806336568abe1461029f5780633659cfe6146102bf5780633fc03822146102df57600080fd5b806301ffc9a7146101455780630e623a501461017a578063117de2fd146101a8578063150b7a02146101ca578063248a9ca31461020f575b600080fd5b34801561015157600080fd5b506101656101603660046121b9565b610450565b60405190151581526020015b60405180910390f35b34801561018657600080fd5b5061019a6101953660046121e3565b610487565b604051908152602001610171565b3480156101b457600080fd5b506101c86101c3366004612211565b6104b8565b005b3480156101d657600080fd5b506101f66101e536600461228f565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610171565b34801561021b57600080fd5b5061019a61022a366004612302565b600090815260c9602052604090206001015490565b34801561024b57600080fd5b5061016561025a36600461231b565b61050c565b34801561026b57600080fd5b506101c861027a366004612338565b610518565b34801561028b57600080fd5b5061016561029a366004612368565b610542565b3480156102ab57600080fd5b506101c86102ba366004612338565b6105a4565b3480156102cb57600080fd5b506101c86102da36600461231b565b61061e565b3480156102eb57600080fd5b5061019a60008051602061293383398151915281565b34801561030d57600080fd5b506101c861031c3660046123c7565b6106fd565b6101c861032f366004612419565b6108e8565b34801561034057600080fd5b5061019a61034f366004612302565b6109b4565b34801561036057600080fd5b5061019a610a07565b34801561037557600080fd5b506101c86103843660046123c7565b610aba565b34801561039557600080fd5b5061019a7fa6c376ed46465e282c1faf00545067ee4a9c6abedacc39345dbec36d7b13f0fd81565b3480156103c957600080fd5b5061019a61271081565b3480156103df57600080fd5b506101c8610c35565b3480156103f457600080fd5b50610165610403366004612338565b610d92565b34801561041457600080fd5b5061019a600081565b6101c861042b3660046123c7565b610dbd565b34801561043c57600080fd5b506101c861044b366004612338565b611086565b60006001600160e01b03198216637965db0b60e01b148061048157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006104818260405160200161049d91906125a8565b604051602081830303815290604052805190602001206109b4565b6104d060008051602061293383398151915233610d92565b6104f55760405162461bcd60e51b81526004016104ec906125b7565b60405180910390fd5b6105086001600160a01b038316826110ab565b5050565b60006104818183610d92565b600082815260c96020526040902060010154610533816111c4565b61053d83836111ce565b505050565b600061058684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089939250506112549050565b6001600160a01b0316826001600160a01b0316149050949350505050565b6001600160a01b03811633146106145760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016104ec565b6105088282611278565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106665760405162461bcd60e51b81526004016104ec906125ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106af600080516020612953833981519152546001600160a01b031690565b6001600160a01b0316146106d55760405162461bcd60e51b81526004016104ec9061263a565b6106de816112df565b604080516000808252602082019092526106fa9183919061132c565b50565b61071560008051602061293383398151915233610d92565b6107315760405162461bcd60e51b81526004016104ec906125b7565b61073a81611497565b7fa231707580cc74129648b7767a41bf3b80fb08f13f39d1e1deb1d87a0d5f5a498161076a610120820182612686565b610140850161077d610260870187612686565b61078f6102a089016102808a0161231b565b60016040516107a59897969594939291906126f6565b60405180910390a160006107bf604083016020840161231b565b90506001600160a01b0381166342842e0e306107e36101e086016101c0870161231b565b60405160e084901b6001600160e01b03191681526001600160a01b039283166004820152911660248201526101408501356044820152606401600060405180830381600087803b15801561083657600080fd5b505af115801561084a573d6000803e3d6000fd5b5060009250612710915061086a905061020085013561018086013561278a565b61087491906127a1565b9050600061271061088f61022086013561018087013561278a565b61089991906127a1565b90506000816108ad846101808801356127c3565b6108b791906127c3565b905060006108cb60a087016080880161231b565b90506108e06001600160a01b038216836110ab565b505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109305760405162461bcd60e51b81526004016104ec906125ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610979600080516020612953833981519152546001600160a01b031690565b6001600160a01b03161461099f5760405162461bcd60e51b81526004016104ec9061263a565b6109a8826112df565b6105088282600161132c565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610aa75760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104ec565b5060008051602061295383398151915290565b610ad260008051602061293383398151915233610d92565b610aee5760405162461bcd60e51b81526004016104ec906125b7565b610af781611497565b7fa231707580cc74129648b7767a41bf3b80fb08f13f39d1e1deb1d87a0d5f5a4981610b27610120820182612686565b6101408501610b3a610260870187612686565b610b4c6102a089016102808a0161231b565b6002604051610b629897969594939291906126f6565b60405180910390a16000610b7c604083016020840161231b565b90506001600160a01b0381166342842e0e30610b9e60a086016080870161231b565b60405160e084901b6001600160e01b03191681526001600160a01b0392831660048201529116602482015284356044820152606401600060405180830381600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b5060009250610c1b9150506101e084016101c0850161231b565b905061053d6001600160a01b0382166101808501356110ab565b600054610100900460ff1615808015610c555750600054600160ff909116105b80610c6f5750303b158015610c6f575060005460ff166001145b610cd25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ec565b6000805460ff191660011790558015610cf5576000805461ff0019166101001790555b610cfd611aae565b610d08600033611b1b565b610d327fa6c376ed46465e282c1faf00545067ee4a9c6abedacc39345dbec36d7b13f0fd33611b1b565b610d4a60008051602061293383398151915233611b1b565b80156106fa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610df37fa6c376ed46465e282c1faf00545067ee4a9c6abedacc39345dbec36d7b13f0fd6104036102a08401610280850161231b565b610e385760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b0ba31b41031b7b9b4b3b732b960511b60448201526064016104ec565b610e4a6101e082016101c0830161231b565b6001600160a01b0316336001600160a01b031614610e9a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210313abcb2b960991b60448201526064016104ec565b4260a08201351015610ee35760405162461bcd60e51b815260206004820152601260248201527114d95b1b081bdc99195c88195e1c1a5c995960721b60448201526064016104ec565b426101e08201351015610f2c5760405162461bcd60e51b8152602060048201526011602482015270109d5e481bdc99195c88195e1c1a5c9959607a1b60448201526064016104ec565b6040810135341015610f755760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016104ec565b610f7e81611497565b7fa231707580cc74129648b7767a41bf3b80fb08f13f39d1e1deb1d87a0d5f5a4981610fae610120820182612686565b6101408501610fc1610260870187612686565b610fd36102a089016102808a0161231b565b6000604051610fe99897969594939291906126f6565b60405180910390a16000611003604083016020840161231b565b90506001600160a01b0381166342842e0e61102460a085016080860161231b565b60405160e083901b6001600160e01b03191681526001600160a01b03909116600482015230602482015284356044820152606401600060405180830381600087803b15801561107257600080fd5b505af11580156108e0573d6000803e3d6000fd5b600082815260c960205260409020600101546110a1816111c4565b61053d8383611278565b804710156110fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016104ec565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611148576040519150601f19603f3d011682016040523d82523d6000602084013e61114d565b606091505b505090508061053d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016104ec565b6106fa8133611b25565b6111d88282610d92565b61050857600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112103390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008060006112638585611b7e565b9150915061127081611bc3565b509392505050565b6112828282610d92565b1561050857600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6112e83361050c565b6106fa5760405162461bcd60e51b81526020600482015260156024820152742932b9ba3934b1ba32b2103a379030b236b4b7399760591b60448201526064016104ec565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561135f5761053d83611d0d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113b9575060408051601f3d908101601f191682019092526113b6918101906127d6565b60015b61141c5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104ec565b600080516020612953833981519152811461148b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104ec565b5061053d838383611da9565b60006114a282610487565b90506114c6816114b6610120850185612686565b61029a60a087016080880161231b565b6115125760405162461bcd60e51b815260206004820152601c60248201527f496e76616c69642073656c6c206f72646572207369676e61747572650000000060448201526064016104ec565b60006115218361014001610487565b90506000611544838360405160200161049d929190918252602082015260400190565b905061156a81611558610260870187612686565b61029a6102a089016102808a0161231b565b6115b65760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206d61746368207369676e617475726500000000000000000060448201526064016104ec565b60006115ca6101c086016101a087016127ef565b60018111156115db576115db6124ec565b146116215760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420627579206f72646572207369646560501b60448201526064016104ec565b600161163360808601606087016127ef565b6001811115611644576116446124ec565b146116915760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642073656c6c206f72646572207369646500000000000000000060448201526064016104ec565b8335610140850135146116dd5760405162461bcd60e51b81526020600482015260146024820152734d69736d61746368656420746f6b656e2049447360601b60448201526064016104ec565b6116ef6101808501610160860161231b565b6001600160a01b0316611708604086016020870161231b565b6001600160a01b03161461175e5760405162461bcd60e51b815260206004820152601a60248201527f4d69736d61746368656420746f6b656e2061646472657373657300000000000060448201526064016104ec565b610180840135604085013511156117cc5760405162461bcd60e51b815260206004820152602c60248201527f53656c6c206f7264657220707269636520686967686572207468616e2062757960448201526b206f7264657220707269636560a01b60648201526084016104ec565b60c0840135610200850135146118245760405162461bcd60e51b815260206004820152601f60248201527f4d69736d61746368656420636f6c6c656374696f6e20726f79616c746965730060448201526064016104ec565b61271060c0850135111561187a5760405162461bcd60e51b815260206004820152601f60248201527f436f6c6c656374696f6e20726f79616c7479206578636565647320313030250060448201526064016104ec565b600061189061020086013561018087013561278a565b10156118ec5760405162461bcd60e51b815260206004820152602560248201527f436f6c6c656374696f6e20726f79616c74792063616c63756c6174696f6e20636044820152643432b1b59760d91b60648201526084016104ec565b60e0840135610220850135146119445760405162461bcd60e51b815260206004820152601b60248201527f4d69736d617463686564206d61726b6574706c6163652066656573000000000060448201526064016104ec565b61271060e0850135111561199a5760405162461bcd60e51b815260206004820152601c60248201527f4d61726b6574706c61636520666565206578636565647320313030250000000060448201526064016104ec565b60006119b061022086013561018087013561278a565b1015611a095760405162461bcd60e51b815260206004820152602260248201527f4d61726b6574706c616365206665652063616c63756c6174696f6e2063686563604482015261359760f11b60648201526084016104ec565b611a1b6102608501610240860161231b565b6001600160a01b0316611a366101208601610100870161231b565b6001600160a01b031614611aa85760405162461bcd60e51b815260206004820152603360248201527f4d69736d61746368656420636f6c6c656374696f6e20726f79616c74792064656044820152727374696e6174696f6e2061646472657373657360681b60648201526084016104ec565b50505050565b600054610100900460ff16611b195760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104ec565b565b61050882826111ce565b611b2f8282610d92565b61050857611b3c81611dce565b611b47836020611de0565b604051602001611b5892919061282e565b60408051601f198184030181529082905262461bcd60e51b82526104ec916004016128a3565b6000808251604103611bb45760208301516040840151606085015160001a611ba887828585611f83565b94509450505050611bbc565b506000905060025b9250929050565b6000816004811115611bd757611bd76124ec565b03611bdf5750565b6001816004811115611bf357611bf36124ec565b03611c405760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104ec565b6002816004811115611c5457611c546124ec565b03611ca15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104ec565b6003816004811115611cb557611cb56124ec565b036106fa5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104ec565b6001600160a01b0381163b611d7a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104ec565b60008051602061295383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611db283612047565b600082511180611dbf5750805b1561053d57611aa88383612087565b60606104816001600160a01b03831660145b60606000611def83600261278a565b611dfa9060026128d6565b67ffffffffffffffff811115611e1257611e12612403565b6040519080825280601f01601f191660200182016040528015611e3c576020820181803683370190505b509050600360fc1b81600081518110611e5757611e576128e9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611e8657611e866128e9565b60200101906001600160f81b031916908160001a9053506000611eaa84600261278a565b611eb59060016128d6565b90505b6001811115611f2d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611ee957611ee96128e9565b1a60f81b828281518110611eff57611eff6128e9565b60200101906001600160f81b031916908160001a90535060049490941c93611f26816128ff565b9050611eb8565b508315611f7c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ec565b9392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611fba575060009050600361203e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561200e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120375760006001925092505061203e565b9150600090505b94509492505050565b61205081611d0d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6120ef5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104ec565b600080846001600160a01b03168460405161210a9190612916565b600060405180830381855af49150503d8060008114612145576040519150601f19603f3d011682016040523d82523d6000602084013e61214a565b606091505b509150915061217282826040518060600160405280602781526020016129736027913961217b565b95945050505050565b6060831561218a575081611f7c565b611f7c838381511561219f5781518083602001fd5b8060405162461bcd60e51b81526004016104ec91906128a3565b6000602082840312156121cb57600080fd5b81356001600160e01b031981168114611f7c57600080fd5b600061012082840312156121f657600080fd5b50919050565b6001600160a01b03811681146106fa57600080fd5b6000806040838503121561222457600080fd5b823561222f816121fc565b946020939093013593505050565b8035612248816121fc565b919050565b60008083601f84011261225f57600080fd5b50813567ffffffffffffffff81111561227757600080fd5b602083019150836020828501011115611bbc57600080fd5b6000806000806000608086880312156122a757600080fd5b85356122b2816121fc565b945060208601356122c2816121fc565b935060408601359250606086013567ffffffffffffffff8111156122e557600080fd5b6122f18882890161224d565b969995985093965092949392505050565b60006020828403121561231457600080fd5b5035919050565b60006020828403121561232d57600080fd5b8135611f7c816121fc565b6000806040838503121561234b57600080fd5b82359150602083013561235d816121fc565b809150509250929050565b6000806000806060858703121561237e57600080fd5b84359350602085013567ffffffffffffffff81111561239c57600080fd5b6123a88782880161224d565b90945092505060408501356123bc816121fc565b939692955090935050565b6000602082840312156123d957600080fd5b813567ffffffffffffffff8111156123f057600080fd5b82016102a08185031215611f7c57600080fd5b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561242c57600080fd5b8235612437816121fc565b9150602083013567ffffffffffffffff8082111561245457600080fd5b818501915085601f83011261246857600080fd5b81358181111561247a5761247a612403565b604051601f8201601f19908116603f011681019083821181831017156124a2576124a2612403565b816040528281528860208487010111156124bb57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b80356002811061224857600080fd5b634e487b7160e01b600052602160045260246000fd5b803582526020810135612514816121fc565b6001600160a01b0316602083015260408181013590830152612538606082016124dd565b60028110612548576125486124ec565b60608301526125596080820161223d565b6001600160a01b03811660808401525060a081013560a083015260c081013560c083015260e081013560e083015261010061259581830161223d565b6001600160a01b03811684830152611aa8565b61012081016104818284612502565b6020808252601c908201527f496e76616c6964206f7065726174696f6e2073757065727669736f7200000000604082015260600190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000808335601e1984360301811261269d57600080fd5b83018035915067ffffffffffffffff8211156126b857600080fd5b602001915036819003821315611bbc57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006102c0612705838c612502565b806101208401526127198184018a8c6126cd565b9050612729610140840189612502565b82810361026084015261273d8187896126cd565b6001600160a01b03861661028085015291505060038310612760576127606124ec565b826102a08301529998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761048157610481612774565b6000826127be57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561048157610481612774565b6000602082840312156127e857600080fd5b5051919050565b60006020828403121561280157600080fd5b611f7c826124dd565b60005b8381101561282557818101518382015260200161280d565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161286681601785016020880161280a565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161289781602884016020880161280a565b01602801949350505050565b60208152600082518060208401526128c281604085016020870161280a565b601f01601f19169190910160400192915050565b8082018082111561048157610481612774565b634e487b7160e01b600052603260045260246000fd5b60008161290e5761290e612774565b506000190190565b6000825161292881846020870161280a565b919091019291505056fe92ce24aca467d9a955b6042fb1efa39faa105fb82835375217c5c3d989d4fb52360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220311959633f6466b8642c6b3aab132a68f33f37dc741eacbadf80001d9b934edb64736f6c63430008160033