0x60a06040523060805234801561001457600080fd5b50608051611f3561003e6000396000818161134b0152818161137401526114b50152611f356000f3fe6080604052600436106101445760003560e01c8063731c49c1116100b6578063ad3cb1cc1161006f578063ad3cb1cc1461036f578063bc021c01146103a0578063cc43762e146103b3578063e096e66a146103c6578063ec3a1d4b146103d9578063f2fde38b146103ef57600080fd5b8063731c49c114610285578063788bc78c146102b25780637f649783146102d257806380d85911146102f2578063898111cd146103125780638da5cb5b1461032857600080fd5b80634f1ef286116101085780634f1ef286146101e657806352d1902d146101f9578063548db1741461020e57806354fd4d501461022e5780636db7943714610250578063715018a61461027057600080fd5b806315f67ddf146101505780633af32abf146101655780633cbc12501461019a5780633ccfd60b146101ba5780633f883a66146101c257600080fd5b3661014b57005b600080fd5b61016361015e366004611801565b61040f565b005b34801561017157600080fd5b50610185610180366004611884565b61076e565b60405190151581526020015b60405180910390f35b3480156101a657600080fd5b506101636101b53660046118a1565b6107bd565b6101636107ca565b3480156101ce57600080fd5b506101d860015481565b604051908152602001610191565b6101636101f4366004611946565b610860565b34801561020557600080fd5b506101d861087f565b34801561021a57600080fd5b506101636102293660046119aa565b61089c565b34801561023a57600080fd5b50610243610903565b6040516101919190611a10565b34801561025c57600080fd5b5061016361026b366004611a43565b610991565b34801561027c57600080fd5b506101636109a4565b34801561029157600080fd5b506101d86102a0366004611884565b60046020526000908152604090205481565b3480156102be57600080fd5b506101636102cd366004611a65565b6109b8565b3480156102de57600080fd5b506101636102ed3660046119aa565b6109cc565b3480156102fe57600080fd5b5061016361030d366004611ab6565b610a2d565b34801561031e57600080fd5b506101d860025481565b34801561033457600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610191565b34801561037b57600080fd5b50610243604051806040016040528060058152602001640352e302e360dc1b81525081565b6101636103ae366004611ae2565b610b4e565b6101636103c1366004611b8f565b610e75565b6101636103d4366004611801565b610fec565b3480156103e557600080fd5b506101d860035481565b3480156103fb57600080fd5b5061016361040a366004611884565b6112aa565b8281146104375760405162461bcd60e51b815260040161042e90611bfb565b60405180910390fd5b6104403361076e565b610466576002543410156104665760405162461bcd60e51b815260040161042e90611c22565b6040516370a0823160e01b81523360048201528190869082906001600160a01b038316906370a0823190602401602060405180830381865afa1580156104b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d49190611c4c565b10156104f25760405162461bcd60e51b815260040161042e90611c65565b60405163e985e9c560e01b81523360048201523060248201526001600160a01b0382169063e985e9c590604401602060405180830381865afa15801561053c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105609190611ca9565b15156001146105815760405162461bcd60e51b815260040161042e90611ccb565b60005b8581101561072e57336001600160a01b038316636352211e8787858181106105ae576105ae611d10565b905060200201356040518263ffffffff1660e01b81526004016105d391815260200190565b602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106149190611d26565b6001600160a01b03161461066a5760405162461bcd60e51b815260206004820152601760248201527f596f7520646f6e2774206f776e2074686520746f6b656e000000000000000000604482015260640161042e565b816001600160a01b03166323b872dd3389898581811061068c5761068c611d10565b90506020020160208101906106a19190611884565b8888868181106106b3576106b3611d10565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561070a57600080fd5b505af115801561071e573d6000803e3d6000fd5b5050600190920191506105849050565b506040516001600160a01b0388169033907fc0e556d0882c3b25f0f765680f531f8db1559f18fe44016e0399520b4c828e1c90600090a350505050505050565b6001600160a01b0381166000908152600460205260408120548015806107a05750806003544261079e9190611d59565b115b156107ae5750600092915050565b50600192915050565b50919050565b6107c56112e5565b600355565b6107d26112e5565b604051600090339047908381818185875af1925050503d8060008114610814576040519150601f19603f3d011682016040523d82523d6000602084013e610819565b606091505b505090508061085d5760405162461bcd60e51b815260206004820152601060248201526f7472616e73666572206661696c65642160801b604482015260640161042e565b50565b610868611340565b610871826113e5565b61087b82826113ed565b5050565b60006108896114aa565b50600080516020611ee083398151915290565b6108a46112e5565b60005b818110156108fe576000600460008585858181106108c7576108c7611d10565b90506020020160208101906108dc9190611884565b6001600160a01b031681526020810191909152604001600020556001016108a7565b505050565b6000805461091090611d6c565b80601f016020809104026020016040519081016040528092919081815260200182805461093c90611d6c565b80156109895780601f1061095e57610100808354040283529160200191610989565b820191906000526020600020905b81548152906001019060200180831161096c57829003601f168201915b505050505081565b6109996112e5565b600191909155600255565b6109ac6112e5565b6109b660006114f3565b565b6109c06112e5565b600061087b8282611df0565b6109d46112e5565b60005b818110156108fe5742600460008585858181106109f6576109f6611d10565b9050602002016020810190610a0b9190611884565b6001600160a01b031681526020810191909152604001600020556001016109d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610a735750825b905060008267ffffffffffffffff166001148015610a905750303b155b905081158015610a9e575080155b15610abc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ae657845460ff60401b1916600160401b1785555b610aef33611564565b6001889055600287905560038690558315610b4457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b8483148015610b5c57508281145b610b785760405162461bcd60e51b815260040161042e90611bfb565b610b813361076e565b610ba757600254341015610ba75760405162461bcd60e51b815260040161042e90611c22565b60405163e985e9c560e01b815233600482015230602482015287906001600160a01b0382169063e985e9c590604401602060405180830381865afa158015610bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c179190611ca9565b1515600114610c385760405162461bcd60e51b815260040161042e90611ccb565b60005b86811015610e3457838382818110610c5557610c55611d10565b90506020020135826001600160a01b031662fdd58e33898986818110610c7d57610c7d611d10565b6040516001600160e01b031960e087901b1681526001600160a01b0390941660048501526020029190910135602483015250604401602060405180830381865afa158015610ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf39190611c4c565b1015610d415760405162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7300000000604482015260640161042e565b816001600160a01b031663f242432a338a8a85818110610d6357610d63611d10565b9050602002016020810190610d789190611884565b898986818110610d8a57610d8a611d10565b90506020020135888887818110610da357610da3611d10565b6040516001600160e01b031960e089901b1681526001600160a01b03968716600482015295909416602486015250604484019190915260209091020135606482015260a06084820152600060a482015260c401600060405180830381600087803b158015610e1057600080fd5b505af1158015610e24573d6000803e3d6000fd5b505060019092019150610c3b9050565b506040516001600160a01b0389169033907f1527a8c09f53afc6297eaf805cf1b85e8f2003ae9e35b4e4dffa0f27dc3fe2ce90600090a35050505050505050565b828114610e945760405162461bcd60e51b815260040161042e90611bfb565b6000805b82811015610ece57838382818110610eb257610eb2611d10565b9050602002013582610ec49190611eb0565b9150600101610e98565b50610ed83361076e565b15610f025780341015610efd5760405162461bcd60e51b815260040161042e90611c22565b610f2e565b600154610f0f9082611eb0565b341015610f2e5760405162461bcd60e51b815260040161042e90611c22565b60005b84811015610fb957858582818110610f4b57610f4b611d10565b9050602002016020810190610f609190611884565b6001600160a01b03166108fc858584818110610f7e57610f7e611d10565b905060200201359081150290604051600060405180830381858888f19350505050158015610fb0573d6000803e3d6000fd5b50600101610f31565b5060405133907fda74611db4b17e30ef04533ddef7bb7a654ed95fdc4bab81fe9bf7c4efc0571690600090a25050505050565b82811461100b5760405162461bcd60e51b815260040161042e90611bfb565b6110143361076e565b61103a5760015434101561103a5760405162461bcd60e51b815260040161042e90611c22565b6000805b828110156110745783838281811061105857611058611d10565b905060200201358261106a9190611eb0565b915060010161103e565b506040516370a0823160e01b8152336004820152869082906001600160a01b038316906370a0823190602401602060405180830381865afa1580156110bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e19190611c4c565b10156110ff5760405162461bcd60e51b815260040161042e90611c65565b604051636eb1769f60e11b815233600482015230602482015282906001600160a01b0383169063dd62ed3e90604401602060405180830381865afa15801561114b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116f9190611c4c565b101561118d5760405162461bcd60e51b815260040161042e90611ccb565b60005b8581101561126a57816001600160a01b03166323b872dd338989858181106111ba576111ba611d10565b90506020020160208101906111cf9190611884565b8888868181106111e1576111e1611d10565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064016020604051808303816000875af115801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190611ca9565b50600101611190565b506040516001600160a01b0388169033907ff9664360ae4ceb87b705b70d245578b45e67c8bc87d499ea3413b7e9a7723ec090600090a350505050505050565b6112b26112e5565b6001600160a01b0381166112dc57604051631e4fbdf760e01b81526000600482015260240161042e565b61085d816114f3565b336113177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146109b65760405163118cdaa760e01b815233600482015260240161042e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113c757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113bb600080516020611ee0833981519152546001600160a01b031690565b6001600160a01b031614155b156109b65760405163703e46dd60e11b815260040160405180910390fd5b61085d6112e5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611447575060408051601f3d908101601f1916820190925261144491810190611c4c565b60015b61146f57604051634c9c8ce360e01b81526001600160a01b038316600482015260240161042e565b600080516020611ee083398151915281146114a057604051632a87526960e21b81526004810182905260240161042e565b6108fe8383611575565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109b65760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61156c6115cb565b61085d81611614565b61157e8261161c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156115c3576108fe8282611681565b61087b6116f9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166109b657604051631afcd79f60e31b815260040160405180910390fd5b6112b26115cb565b806001600160a01b03163b60000361165257604051634c9c8ce360e01b81526001600160a01b038216600482015260240161042e565b600080516020611ee083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161169e9190611ec3565b600060405180830381855af49150503d80600081146116d9576040519150601f19603f3d011682016040523d82523d6000602084013e6116de565b606091505b50915091506116ee858383611718565b925050505b92915050565b34156109b65760405163b398979f60e01b815260040160405180910390fd5b60608261172d5761172882611777565b611770565b815115801561174457506001600160a01b0384163b155b1561176d57604051639996b31560e01b81526001600160a01b038516600482015260240161042e565b50805b9392505050565b8051156117875780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b038116811461085d57600080fd5b60008083601f8401126117c757600080fd5b50813567ffffffffffffffff8111156117df57600080fd5b6020830191508360208260051b85010111156117fa57600080fd5b9250929050565b60008060008060006060868803121561181957600080fd5b8535611824816117a0565b9450602086013567ffffffffffffffff8082111561184157600080fd5b61184d89838a016117b5565b9096509450604088013591508082111561186657600080fd5b50611873888289016117b5565b969995985093965092949392505050565b60006020828403121561189657600080fd5b8135611770816117a0565b6000602082840312156118b357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156118eb576118eb6118ba565b604051601f8501601f19908116603f01168101908282118183101715611913576119136118ba565b8160405280935085815286868601111561192c57600080fd5b858560208301376000602087830101525050509392505050565b6000806040838503121561195957600080fd5b8235611964816117a0565b9150602083013567ffffffffffffffff81111561198057600080fd5b8301601f8101851361199157600080fd5b6119a0858235602084016118d0565b9150509250929050565b600080602083850312156119bd57600080fd5b823567ffffffffffffffff8111156119d457600080fd5b6119e0858286016117b5565b90969095509350505050565b60005b83811015611a075781810151838201526020016119ef565b50506000910152565b6020815260008251806020840152611a2f8160408501602087016119ec565b601f01601f19169190910160400192915050565b60008060408385031215611a5657600080fd5b50508035926020909101359150565b600060208284031215611a7757600080fd5b813567ffffffffffffffff811115611a8e57600080fd5b8201601f81018413611a9f57600080fd5b611aae848235602084016118d0565b949350505050565b600080600060608486031215611acb57600080fd5b505081359360208301359350604090920135919050565b60008060008060008060006080888a031215611afd57600080fd5b8735611b08816117a0565b9650602088013567ffffffffffffffff80821115611b2557600080fd5b611b318b838c016117b5565b909850965060408a0135915080821115611b4a57600080fd5b611b568b838c016117b5565b909650945060608a0135915080821115611b6f57600080fd5b50611b7c8a828b016117b5565b989b979a50959850939692959293505050565b60008060008060408587031215611ba557600080fd5b843567ffffffffffffffff80821115611bbd57600080fd5b611bc9888389016117b5565b90965094506020870135915080821115611be257600080fd5b50611bef878288016117b5565b95989497509550505050565b6020808252600d908201526c125b9d985b1a59081a5b9c1d5d609a1b604082015260600190565b60208082526010908201526f4e6f7420656e6f7567682066756e647360801b604082015260600190565b600060208284031215611c5e57600080fd5b5051919050565b60208082526024908201527f5472616e7366657220616d6f756e74206578636565647320796f75722062616c604082015263616e636560e01b606082015260800190565b600060208284031215611cbb57600080fd5b8151801515811461177057600080fd5b60208082526025908201527f5065726d697373696f6e7320746f207472616e7366657220746f6b656e732064604082015264195b9a595960da1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d3857600080fd5b8151611770816117a0565b634e487b7160e01b600052601160045260246000fd5b818103818111156116f3576116f3611d43565b600181811c90821680611d8057607f821691505b6020821081036107b757634e487b7160e01b600052602260045260246000fd5b601f8211156108fe576000816000526020600020601f850160051c81016020861015611dc95750805b601f850160051c820191505b81811015611de857828155600101611dd5565b505050505050565b815167ffffffffffffffff811115611e0a57611e0a6118ba565b611e1e81611e188454611d6c565b84611da0565b602080601f831160018114611e535760008415611e3b5750858301515b600019600386901b1c1916600185901b178555611de8565b600085815260208120601f198616915b82811015611e8257888601518255948401946001909101908401611e63565b5085821015611ea05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156116f3576116f3611d43565b60008251611ed58184602087016119ec565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220e00b38611e643c864fb10d515f83b00e60629b592953ca78cf4f7c629105ebcd64736f6c63430008170033