0x60a060405260016006553480156200001657600080fd5b5060405162002c7638038062002c76833981016040819052620000399162000123565b6040518060400160405280600d81526020016c506c616e746564204d616e676f60981b81525060405180604001604052806006815260200165704d414e474f60d01b81525081600390816200008f9190620001fa565b5060046200009e8282620001fa565b505050620000bb620000b5620000cd60201b60201c565b620000d1565b6001600160a01b0316608052620002c6565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200013657600080fd5b81516001600160a01b03811681146200014e57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018057607f821691505b602082108103620001a157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f557600081815260208120601f850160051c81016020861015620001d05750805b601f850160051c820191505b81811015620001f157828155600101620001dc565b5050505b505050565b81516001600160401b0381111562000216576200021662000155565b6200022e816200022784546200016b565b84620001a7565b602080601f8311600181146200026657600084156200024d5750858301515b600019600386901b1c1916600185901b178555620001f1565b600085815260208120601f198616915b82811015620002975788860151825594840194600190910190840162000276565b5085821015620002b65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805161297f620002f760003960008181610303015281816111420152818161160b01526119b3015261297f6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c80636026377a1161012a578063a457c2d7116100bd578063c2b18aa01161008c578063f2fde38b11610071578063f2fde38b14610593578063f305ce47146105a6578063f6678d0e1461061d57600080fd5b8063c2b18aa014610545578063dd62ed3e1461055a57600080fd5b8063a457c2d714610504578063a9059cbb14610517578063bf199e621461052a578063c102498b1461053257600080fd5b80638284511b116100f95780638284511b1461049f5780638456cb59146104b25780638da5cb5b146104ba57806395d89b41146104cb57600080fd5b80636026377a1461044857806370a082311461045b578063715018a61461048457806373cf25f81461048c57600080fd5b80632495a599116101a25780634ad84a1e116101715780634ad84a1e14610367578063509b6c3f1461040e5780635a18d022146104215780635c975abb1461043457600080fd5b80632495a599146102fe578063313ce5671461033d578063395093511461034c5780633f4ba83a1461035f57600080fd5b806318160ddd116101de57806318160ddd146102a657806319f8c0b6146102b857806323b872dd146102d857806323cb2390146102eb57600080fd5b806306fdde031461021057806307a100051461025b578063095ea7b3146102705780630e5c011e14610293575b600080fd5b60408051808201909152600d81527f506c616e746564204d616e676f0000000000000000000000000000000000000060208201525b6040516102529190612484565b60405180910390f35b61026e6102693660046124f2565b610630565b005b61028361027e3660046125cc565b61099f565b6040519015158152602001610252565b61026e6102a13660046125f8565b6109b9565b6002545b604051908152602001610252565b6102cb6102c63660046124f2565b610a20565b604051610252919061261c565b6102836102e6366004612674565b610c45565b61026e6102f93660046126b5565b610c69565b6103257f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610252565b60405160128152602001610252565b61028361035a3660046125cc565b610c7f565b61026e610cbe565b6103d96103753660046125f8565b6040805160608082018352600080835260208084018290529284018190526001600160a01b0394851681526008835283902083519182018452805482526001015493841691810191909152600160a01b90920467ffffffffffffffff169082015290565b60408051825181526020808401516001600160a01b0316908201529181015167ffffffffffffffff1690820152606001610252565b61032561041c3660046126ee565b610cd5565b6102aa61042f3660046125cc565b610d05565b60055461028390600160a01b900460ff1681565b6102cb6104563660046125f8565b610ee7565b6102aa6104693660046125f8565b6001600160a01b031660009081526020819052604090205490565b61026e610f4d565b61026e61049a366004612753565b610f61565b61026e6104ad3660046126b5565b611138565b61026e611264565b6005546001600160a01b0316610325565b60408051808201909152600681527f704d414e474f00000000000000000000000000000000000000000000000000006020820152610245565b6102836105123660046125cc565b611281565b6102836105253660046125cc565b61132b565b6007546102aa565b61026e6105403660046127bf565b611339565b61054d61163c565b60405161025291906127e4565b6102aa6105683660046126b5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61026e6105a13660046125f8565b61169e565b6106026105b43660046126b5565b604080518082018252600080825260209182018190526001600160a01b0394851681526009825282812093909416845291825291829020825180840190935280548352600101549082015290565b60408051825181526020928301519281019290925201610252565b61026e61062b3660046127bf565b61172b565b60065460011461065b57604051630bc320f560e01b8152600260048201526024015b60405180910390fd5b6002600655600554600160a01b900460ff161561068e57604051630bc320f560e01b815260016004820152602401610652565b81600061069a60025490565b11156108b0576001600160a01b038116600090815260208181526040808320546007805483518186028101860190945280845291949390919083018282801561070c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106ee575b5050505050905060005b81518110156108ac57600082828151811061073357610733612831565b6020908102919091018101516001600160a01b03808216600090815260088452604090819020600101548151633fac13df60e21b8152915193955090911692839263feb04f7c9260048082019392918290030181865afa15801561079b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bf9190612847565b42111561081a57806001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561080157600080fd5b505af1158015610815573d6000803e3d6000fd5b505050505b6001600160a01b03861615610899576001600160a01b038216600090815260086020908152604091829020548251808401909352808352919081016108618986858b611a2f565b90526001600160a01b038089166000908152600960209081526040808320938816835292815291902082518155910151600190910155505b5050806108a590612876565b9050610716565b5050505b60005b82518110156109945760008382815181106108d0576108d0612831565b6020908102919091018101516001600160a01b038088166000908152600984526040808220928416825291909352909120600101549091508015610981576001600160a01b0386811660008181526009602090815260408083209487168084529482528083206001019290925590518481527fa0306f61d3fafe13787b78e276cb6b644382854a66cb46daae14227d3ec26797910160405180910390a36109816001600160a01b0383168783611ab4565b50508061098d90612876565b90506108b3565b505060016006555050565b6000336109ad818585611b62565b60019150505b92915050565b610a1d816007805480602002602001604051908101604052809291908181526020018280548015610a1357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f5575b5050505050610630565b50565b6060815167ffffffffffffffff811115610a3c57610a3c6124dc565b604051908082528060200260200182016040528015610a8157816020015b6040805180820190915260008082526020820152815260200190600190039081610a5a5790505b5090506000610a8f60025490565b90506000610ab2856001600160a01b031660009081526020819052604090205490565b905060005b8451811015610c3c576000858281518110610ad457610ad4612831565b60200260200101519050600080851115610bee576001600160a01b038281166000908152600860209081526040808320815160608101835281548152600190910154948516818401819052600160a01b90950467ffffffffffffffff168183015281517f95a0b59600000000000000000000000000000000000000000000000000000000815291519094926395a0b59692600480820193918290030181865afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba99190612847565b9050600087610bc46b204fce5e3e250261100000008461288f565b610bce91906128a6565b8351610bda91906128c8565b9050610be88b86838a611a2f565b93505050505b6040518060400160405280836001600160a01b0316815260200182815250868481518110610c1e57610c1e612831565b6020026020010181905250505080610c3590612876565b9050610ab7565b50505092915050565b600033610c53858285611cba565b610c5e858585611d4c565b506001949350505050565b610c71611d68565b610c7b8282611dc2565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906109ad9082908690610cb99087906128c8565b611b62565b610cc6611d68565b6005805460ff60a01b19169055565b600060078281548110610cea57610cea612831565b6000918252602090912001546001600160a01b031692915050565b6001600160a01b038281166000908152600860209081526040808320815160608101835281548152600190910154948516928101839052600160a01b90940467ffffffffffffffff16908401529091903314610d7757604051630bc320f560e01b815260006004820152602401610652565b82600003610d895760009150506109b3565b6000610d9460025490565b905080600003610da9576000925050506109b3565b600081610dc26b204fce5e3e250261100000008761288f565b610dcc91906128a6565b905080600003610de257600093505050506109b3565b610df76001600160a01b038716333088611f80565b8083600001818151610e0991906128c8565b9052504267ffffffffffffffff166040848101919091528351815187815260208101919091529081018390526001600160a01b0387169033907f624c08998f6d8803dfc1a3d1977479c2f03b0707c7ef36ee123a57f691c721f29060600160405180910390a350506001600160a01b03808516600090815260086020908152604091829020845181559084015160019091018054929094015167ffffffffffffffff16600160a01b027fffffffff00000000000000000000000000000000000000000000000000000000909216921691909117179055508092915050565b60606109b3826007805480602002602001604051908101604052809291908181526020018280548015610f4357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f25575b5050505050610a20565b610f55611d68565b610f5f6000611fd1565b565b600554600160b01b900460ff1615808015610f8957506005546001600160a81b90910460ff16105b80610faa5750303b158015610faa5750600554600160a81b900460ff166001145b61101c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610652565b600580547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b1790558015611064576005805460ff60b01b1916600160b01b1790555b61106e6001600655565b61107733611fd1565b60005b848110156110e8576110d886868381811061109757611097612831565b90506020020160208101906110ac91906125f8565b8585848181106110be576110be612831565b90506020020160208101906110d391906125f8565b611dc2565b6110e181612876565b905061107a565b508015611131576005805460ff60b01b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b611140611d68565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614806111ab57506001600160a01b038216600090815260086020526040902060010154600160a01b900467ffffffffffffffff1615155b156111cc57604051630bc320f560e01b815260076004820152602401610652565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152610c7b9082906001600160a01b038516906370a0823190602401602060405180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190612847565b6001600160a01b0385169190611ab4565b61126c611d68565b6005805460ff60a01b1916600160a01b179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561131e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610652565b610c5e8286868403611b62565b6000336109ad818585611d4c565b60065460011461135f57604051630bc320f560e01b815260026004820152602401610652565b6002600655600554600160a01b900460ff161561139257604051630bc320f560e01b815260016004820152602401610652565b33600061139e60025490565b11156115b4576001600160a01b038116600090815260208181526040808320546007805483518186028101860190945280845291949390919083018282801561141057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113f2575b5050505050905060005b81518110156115b057600082828151811061143757611437612831565b6020908102919091018101516001600160a01b03808216600090815260088452604090819020600101548151633fac13df60e21b8152915193955090911692839263feb04f7c9260048082019392918290030181865afa15801561149f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c39190612847565b42111561151e57806001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561150557600080fd5b505af1158015611519573d6000803e3d6000fd5b505050505b6001600160a01b0386161561159d576001600160a01b038216600090815260086020908152604091829020548251808401909352808352919081016115658986858b611a2f565b90526001600160a01b038089166000908152600960209081526040808320938816835292815291902082518155910151600190910155505b5050806115a990612876565b905061141a565b5050505b6115be3384612030565b6040518381526001600160a01b0383169033907fa42859626dec7c7ff40e61619ba9b23b3dbc3afce03f24fb3ecaa3b186bd1f2c9060200160405180910390a36116326001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168385611ab4565b5050600160065550565b6060600780548060200260200160405190810160405280929190818152602001828054801561169457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611676575b5050505050905090565b6116a6611d68565b6001600160a01b0381166117225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610652565b610a1d81611fd1565b60065460011461175157604051630bc320f560e01b815260026004820152602401610652565b6002600655600554600160a01b900460ff161561178457604051630bc320f560e01b815260016004820152602401610652565b80600061179060025490565b11156119a6576001600160a01b038116600090815260208181526040808320546007805483518186028101860190945280845291949390919083018282801561180257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117e4575b5050505050905060005b81518110156119a257600082828151811061182957611829612831565b6020908102919091018101516001600160a01b03808216600090815260088452604090819020600101548151633fac13df60e21b8152915193955090911692839263feb04f7c9260048082019392918290030181865afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190612847565b42111561191057806001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118f757600080fd5b505af115801561190b573d6000803e3d6000fd5b505050505b6001600160a01b0386161561198f576001600160a01b038216600090815260086020908152604091829020548251808401909352808352919081016119578986858b611a2f565b90526001600160a01b038089166000908152600960209081526040808320938816835292815291902082518155910151600190910155505b50508061199b90612876565b905061180c565b5050505b6119db6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086611f80565b6119e58284612199565b6040518381526001600160a01b0383169033907f87119756b8ade22de5e690fc509eaa489dbd9dd25d351e7769b39a2c55ef17329060200160405180910390a35050600160065550565b6001600160a01b0380851660009081526009602090815260408083209387168352928152828220835180850190945280548085526001909101549184018290529192916b204fce5e3e2502611000000090611a8a90876128db565b611a94908661288f565b611a9e91906128a6565b611aa891906128c8565b9150505b949350505050565b6040516001600160a01b038316602482015260448101829052611b5d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612258565b505050565b6001600160a01b038316611bdd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b038216611c595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611d465781811015611d395760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610652565b611d468484848403611b62565b50505050565b604051630bc320f560e01b815260006004820152602401610652565b6005546001600160a01b03163314610f5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610652565b6001600160a01b038216600090815260086020526040902060010154600160a01b900467ffffffffffffffff1615611e1057604051630bc320f560e01b815260006004820152602401610652565b816001600160a01b0316816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c91906128ee565b6001600160a01b031614611ea657604051630bc320f560e01b815260076004820152602401610652565b6007805460018082019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394851690811790915560408051606081018252600080825294861660208083019182524267ffffffffffffffff9081168486019081529588526008909152929095209051815593519390920180549151939094167fffffffff0000000000000000000000000000000000000000000000000000000090911617600160a01b9290911691909102179055565b6040516001600160a01b0380851660248301528316604482015260648101829052611d469085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611af9565b600580546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166120ac5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b0382166000908152602081905260409020548181101561213b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610652565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b0382166121ef5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610652565b806002600082825461220191906128c8565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006122ad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661233d9092919063ffffffff16565b805190915015611b5d57808060200190518101906122cb919061290b565b611b5d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610652565b6060611aac848460008585600080866001600160a01b03168587604051612364919061292d565b60006040518083038185875af1925050503d80600081146123a1576040519150601f19603f3d011682016040523d82523d6000602084013e6123a6565b606091505b50915091506123b7878383876123c2565b979650505050505050565b6060831561243157825160000361242a576001600160a01b0385163b61242a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610652565b5081611aac565b611aac83838151156124465781518083602001fd5b8060405162461bcd60e51b81526004016106529190612484565b60005b8381101561247b578181015183820152602001612463565b50506000910152565b60208152600082518060208401526124a3816040850160208701612460565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610a1d57600080fd5b80356124d7816124b7565b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561250557600080fd5b8235612510816124b7565b915060208381013567ffffffffffffffff8082111561252e57600080fd5b818601915086601f83011261254257600080fd5b813581811115612554576125546124dc565b8060051b604051601f19603f83011681018181108582111715612579576125796124dc565b60405291825284820192508381018501918983111561259757600080fd5b938501935b828510156125bc576125ad856124cc565b8452938501939285019261259c565b8096505050505050509250929050565b600080604083850312156125df57600080fd5b82356125ea816124b7565b946020939093013593505050565b60006020828403121561260a57600080fd5b8135612615816124b7565b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101561266757815180516001600160a01b03168552860151868501529284019290850190600101612639565b5091979650505050505050565b60008060006060848603121561268957600080fd5b8335612694816124b7565b925060208401356126a4816124b7565b929592945050506040919091013590565b600080604083850312156126c857600080fd5b82356126d3816124b7565b915060208301356126e3816124b7565b809150509250929050565b60006020828403121561270057600080fd5b5035919050565b60008083601f84011261271957600080fd5b50813567ffffffffffffffff81111561273157600080fd5b6020830191508360208260051b850101111561274c57600080fd5b9250929050565b6000806000806040858703121561276957600080fd5b843567ffffffffffffffff8082111561278157600080fd5b61278d88838901612707565b909650945060208701359150808211156127a657600080fd5b506127b387828801612707565b95989497509550505050565b600080604083850312156127d257600080fd5b8235915060208301356126e3816124b7565b6020808252825182820181905260009190848201906040850190845b818110156128255783516001600160a01b031683529284019291840191600101612800565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561285957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161288857612888612860565b5060010190565b80820281158282048414176109b3576109b3612860565b6000826128c357634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109b3576109b3612860565b818103818111156109b3576109b3612860565b60006020828403121561290057600080fd5b8151612615816124b7565b60006020828403121561291d57600080fd5b8151801515811461261557600080fd5b6000825161293f818460208701612460565b919091019291505056fea2646970667358221220bdd6a7f6080d58db8e6a7f82820a05feb7e44324fe491cd6e6957bd5999e870564736f6c634300081100330000000000000000000000001fa03edb1b8839a5319a7d2c1ae6aae492342bad