608060405261013b805462ffffff1916905534801561001d57600080fd5b50614a718061002d6000396000f3fe6080604052600436106102f25760003560e01c80636352211e1161018f578063a0712d68116100e1578063c87b56dd1161008a578063e985e9c511610064578063e985e9c514610816578063f0f442601461086c578063f2fde38b1461088c57600080fd5b8063c87b56dd146107ce578063e36b0b37146107ee578063e3e1e8ef1461080357600080fd5b8063afef7c04116100bb578063afef7c0414610778578063b88d4fde14610798578063bf2d9e0b146107b857600080fd5b8063a0712d6814610725578063a22cb46514610738578063ace849c61461075857600080fd5b80637cb6475911610143578063922280061161011d57806392228006146106db57806395d89b41146106fa578063a035b1fe1461070f57600080fd5b80637cb6475914610670578063896b24b7146106905780638da5cb5b146106b057600080fd5b806370a082311161017457806370a082311461061b578063715018a61461063b578063789e3a551461065057600080fd5b80636352211e146105dd57806368428a1b146105fd57600080fd5b80633ccfd60b1161024857806353135ca0116101fc5780635944c753116101d65780635944c7531461057b5780635f48f3931461059b57806361d027b3146105b157600080fd5b806353135ca01461052d57806355f804b31461054657806356742b5a1461056657600080fd5b8063453c23101161022d578063453c2310146104e15780634f6ccce7146104f7578063507e094f1461051757600080fd5b80633ccfd60b146104ac57806342842e0e146104c157600080fd5b806309d798fa116102aa57806323b872dd1161028457806323b872dd146104205780632a55205a146104405780632f745c591461048c57600080fd5b806309d798fa146103d55780630cbf54c8146103f557806318160ddd1461040b57600080fd5b806306fdde03116102db57806306fdde031461034e578063081812fc14610370578063095ea7b3146103b557600080fd5b806301ffc9a7146102f757806304634d8d1461032c575b600080fd5b34801561030357600080fd5b5061031761031236600461415a565b6108ac565b60405190151581526020015b60405180910390f35b34801561033857600080fd5b5061034c6103473660046141bc565b6108bd565b005b34801561035a57600080fd5b50610363610951565b6040516103239190614265565b34801561037c57600080fd5b5061039061038b366004614278565b6109e3565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610323565b3480156103c157600080fd5b5061034c6103d0366004614291565b610abd565b3480156103e157600080fd5b5061013a545b604051908152602001610323565b34801561040157600080fd5b50610139546103e7565b34801561041757600080fd5b506099546103e7565b34801561042c57600080fd5b5061034c61043b3660046142bb565b610c4a565b34801561044c57600080fd5b5061046061045b3660046142f7565b610ceb565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610323565b34801561049857600080fd5b506103e76104a7366004614291565b610de4565b3480156104b857600080fd5b5061034c610eb3565b3480156104cd57600080fd5b5061034c6104dc3660046142bb565b61109c565b3480156104ed57600080fd5b50610135546103e7565b34801561050357600080fd5b506103e7610512366004614278565b6110b7565b34801561052357600080fd5b50610134546103e7565b34801561053957600080fd5b5061013b5460ff16610317565b34801561055257600080fd5b5061034c6105613660046143fc565b611175565b34801561057257600080fd5b506103e761124c565b34801561058757600080fd5b5061034c610596366004614431565b6112c4565b3480156105a757600080fd5b50610133546103e7565b3480156105bd57600080fd5b5061012e5473ffffffffffffffffffffffffffffffffffffffff16610390565b3480156105e957600080fd5b506103906105f8366004614278565b611350565b34801561060957600080fd5b5061013b54610100900460ff16610317565b34801561062757600080fd5b506103e761063636600461446d565b611402565b34801561064757600080fd5b5061034c6114d0565b34801561065c57600080fd5b5061034c61066b366004614498565b61155d565b34801561067c57600080fd5b5061034c61068b366004614278565b61162c565b34801561069c57600080fd5b5061034c6106ab3660046144e1565b6116e1565b3480156106bc57600080fd5b5060fb5473ffffffffffffffffffffffffffffffffffffffff16610390565b3480156106e757600080fd5b5061013b5462010000900460ff16610317565b34801561070657600080fd5b506103636117c4565b34801561071b57600080fd5b50610136546103e7565b61034c610733366004614278565b6117d3565b34801561074457600080fd5b5061034c61075336600461453d565b611adf565b34801561076457600080fd5b5061034c6107733660046145ac565b611aea565b34801561078457600080fd5b5061034c610793366004614618565b611be3565b3480156107a457600080fd5b5061034c6107b33660046146a2565b611d11565b3480156107c457600080fd5b5061012f546103e7565b3480156107da57600080fd5b506103636107e9366004614278565b611db9565b3480156107fa57600080fd5b5061034c611ec9565b61034c61081136600461471e565b611f75565b34801561082257600080fd5b5061031761083136600461476a565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b34801561087857600080fd5b5061034c61088736600461446d565b612324565b34801561089857600080fd5b5061034c6108a736600461446d565b6123ed565b60006108b7826123f9565b92915050565b60fb5473ffffffffffffffffffffffffffffffffffffffff163314610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61094d828261244f565b5050565b60606065805461096090614794565b80601f016020809104026020016040519081016040528092919081815260200182805461098c90614794565b80156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b5050505050905090565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16610a94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015260840161093a565b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610ac882611350565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161093a565b3373ffffffffffffffffffffffffffffffffffffffff82161480610baf5750610baf8133610831565b610c3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161093a565b610c4583836125c8565b505050565b610c543382612668565b610ce0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161093a565b610c458383836127d8565b600082815260ca6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16928201929092528291610da657506040805180820190915260c95473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b602081015160009061271090610dca906bffffffffffffffffffffffff1687614817565b610dd49190614883565b91519350909150505b9250929050565b6000610def83611402565b8210610e7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e6473000000000000000000000000000000000000000000606482015260840161093a565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152609760209081526040808320938352929052205490565b60004711610f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f302062616c616e63650000000000000000000000000000000000000000000000604482015260640161093a565b61012d546040517f9af608c9000000000000000000000000000000000000000000000000000000008152306004820152479160009173ffffffffffffffffffffffffffffffffffffffff90911690639af608c99060240160206040518083038186803b158015610f8c57600080fd5b505afa158015610fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc49190614897565b61012d546040517fb9bff4bb0000000000000000000000000000000000000000000000000000000081526004810183905291925073ffffffffffffffffffffffffffffffffffffffff169063b9bff4bb90602401600060405180830381600087803b15801561103257600080fd5b505af1158015611046573d6000803e3d6000fd5b505061012d5461106f925073ffffffffffffffffffffffffffffffffffffffff16905082612a4a565b61012e5461094d9073ffffffffffffffffffffffffffffffffffffffff166110978484612ba4565b612a4a565b610c4583838360405180602001604052806000815250611d11565b60006110c260995490565b8210611150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e64730000000000000000000000000000000000000000606482015260840161093a565b60998281548110611163576111636148b0565b90600052602060002001549050919050565b60fb5473ffffffffffffffffffffffffffffffffffffffff1633146111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b805161120a90610132906020840190614093565b508060405161121991906148df565b604051908190038120907f6ae07e2a08f067a8d5ece04d32173e8ecaac9a2273ca0e3db850c5460a5d616090600090a250565b60006101395461013a544261126191906148fb565b1061126e57506101385490565b6101385461013954610137546112859083906148fb565b61013a5461129390426148fb565b610139546112a191906148fb565b6112ab9190614817565b6112b59190614883565b6112bf9190614912565b905090565b60fb5473ffffffffffffffffffffffffffffffffffffffff163314611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b610c45838383612bb0565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16806108b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015260840161093a565b600073ffffffffffffffffffffffffffffffffffffffff82166114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015260840161093a565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b60fb5473ffffffffffffffffffffffffffffffffffffffff163314611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b61155b6000612d3a565b565b60fb5473ffffffffffffffffffffffffffffffffffffffff1633146115de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b61013b80549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169190911761010017905561013393909355610134919091556101355561013655565b60fb5473ffffffffffffffffffffffffffffffffffffffff1633146116ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b61013181905560405181907f42cbc405e4dbf1b691e85b9a34b08ecfcf7a9ad9078bf4d645ccfa1fac11c10b90600090a250565b60fb5473ffffffffffffffffffffffffffffffffffffffff163314611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b61013b80549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0090921691909117620100001790554261013a55610133959095556101349390935561013591909155610138919091556101375561013955565b60606066805461096090614794565b806000811161183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f47726561746572207468616e2030000000000000000000000000000000000000604482015260640161093a565b6101355461187a826101306000335b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205490612db1565b11156118e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4578636565646564206d61783a20310000000000000000000000000000000000604482015260640161093a565b600061013354116118f457600161190e565b6101335461190b8261190560995490565b90612db1565b11155b611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4578636565646564206d61783a20320000000000000000000000000000000000604482015260640161093a565b610134548111156119e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4578636565646564206d61783a20330000000000000000000000000000000000604482015260640161093a565b61013b5460ff1615611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f74206163746976653a203100000000000000000000000000000000000000604482015260640161093a565b61013b5462010000900460ff1680611a6f575061013b54610100900460ff165b611ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f74206163746976653a203200000000000000000000000000000000000000604482015260640161093a565b61094d8233612dbd565b61094d338383612f49565b60fb5473ffffffffffffffffffffffffffffffffffffffff163314611b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b828114611b7757600080fd5b60005b81811015611bdc57611bca858583818110611b9757611b976148b0565b90506020020135848484818110611bb057611bb06148b0565b9050602002016020810190611bc5919061446d565b613077565b80611bd48161492a565b915050611b7a565b5050505050565b600054610100900460ff16611bfe5760005460ff1615611c02565b303b155b611c8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161093a565b600054610100900460ff16158015611ccd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b611cda86868686866130b7565b8015611d0957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b505050505050565b611d1b3383612668565b611da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161093a565b611db3848484846131ca565b50505050565b60008181526067602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16611e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000606482015260840161093a565b6000611e7761326d565b90506000815111611e975760405180602001604052806000815250611ec2565b80611ea18461327d565b604051602001611eb2929190614963565b6040516020818303038152906040525b9392505050565b60fb5473ffffffffffffffffffffffffffffffffffffffff163314611f4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b61013b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000169055565b8260008111611fe0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f47726561746572207468616e2030000000000000000000000000000000000000604482015260640161093a565b61013554611ff38261013060003361184d565b111561205b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4578636565646564206d61783a20310000000000000000000000000000000000604482015260640161093a565b6000610133541161206d576001612081565b6101335461207e8261190560995490565b11155b6120e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4578636565646564206d61783a20320000000000000000000000000000000000604482015260640161093a565b61013454811115612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4578636565646564206d61783a20330000000000000000000000000000000000604482015260640161093a565b61013b5460ff166121c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f74206163746976653a203300000000000000000000000000000000000000604482015260640161093a565b6101315461222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f74206163746976653a203400000000000000000000000000000000000000604482015260640161093a565b6122b483838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050610131546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201529092506034019050604051602081830303815290604052805190602001206133af565b61231a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f742061637469766500000000000000000000000000000000000000000000604482015260640161093a565b611db38433612dbd565b60fb5473ffffffffffffffffffffffffffffffffffffffff1633146123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b61012e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6123f6816133c5565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806108b757506108b7826134f2565b6127106bffffffffffffffffffffffff821611156124ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c65507269636500000000000000000000000000000000000000000000606482015260840161093a565b73ffffffffffffffffffffffffffffffffffffffff821661256c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640161093a565b6040805180820190915273ffffffffffffffffffffffffffffffffffffffff9092168083526bffffffffffffffffffffffff9091166020909201829052740100000000000000000000000000000000000000009091021760c955565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061262282611350565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015260840161093a565b600061272483611350565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061279357508373ffffffffffffffffffffffffffffffffffffffff1661277b846109e3565b73ffffffffffffffffffffffffffffffffffffffff16145b806127d0575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166127f882611350565b73ffffffffffffffffffffffffffffffffffffffff161461289b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e6572000000000000000000000000000000000000000000000000000000606482015260840161093a565b73ffffffffffffffffffffffffffffffffffffffff821661293d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161093a565b612948838383613548565b6129536000826125c8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526068602052604081208054600192906129899084906148fb565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526068602052604081208054600192906129c4908490614912565b909155505060008181526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b80471015612ab4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161093a565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612b0e576040519150601f19603f3d011682016040523d82523d6000602084013e612b13565b606091505b5050905080610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161093a565b6000611ec282846148fb565b6127106bffffffffffffffffffffffff82161115612c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c65507269636500000000000000000000000000000000000000000000606482015260840161093a565b73ffffffffffffffffffffffffffffffffffffffff8216612ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d65746572730000000000604482015260640161093a565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff93841681526bffffffffffffffffffffffff9283166020808301918252600096875260ca9052919094209351905190911674010000000000000000000000000000000000000000029116179055565b60fb805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611ec28284614912565b61013b5460009062010000900460ff16612de45761013654612ddf9084613553565b612df6565b612df683612df061124c565b90613553565b905034811115612e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f56616c756520696e636f72726563740000000000000000000000000000000000604482015260640161093a565b61012f54612e709034612db1565b61012f5573ffffffffffffffffffffffffffffffffffffffff821660009081526101306020526040902054612ea59084612db1565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526101306020526040908190209290925561012d5491517f107e9cf100000000000000000000000000000000000000000000000000000000815234600482015291169063107e9cf190602401600060405180830381600087803b158015612f2757600080fd5b505af1158015612f3b573d6000803e3d6000fd5b50505050610c458383613077565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161093a565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152606a602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60005b82811015610c4557600061308d60995490565b613098906001614912565b90506130a4838261355f565b50806130af8161492a565b91505061307a565b600054610100900460ff1661314e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161093a565b6131588585613579565b61316061361a565b61316861361a565b6131706136b1565b61012d8054337fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915561012e805490911673ffffffffffffffffffffffffffffffffffffffff8516179055611bdc828261244f565b6131d58484846127d8565b6131e184848484613751565b611db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161093a565b6060610132805461096090614794565b6060816132bd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156132e757806132d18161492a565b91506132e09050600a83614883565b91506132c1565b60008167ffffffffffffffff81111561330257613302614319565b6040519080825280601f01601f19166020018201604052801561332c576020820181803683370190505b5090505b84156127d0576133416001836148fb565b915061334e600a86614992565b613359906030614912565b60f81b81838151811061336e5761336e6148b0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506133a8600a86614883565b9450613330565b6000826133bc8584613950565b14949350505050565b60fb5473ffffffffffffffffffffffffffffffffffffffff163314613446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093a565b73ffffffffffffffffffffffffffffffffffffffff81166134e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161093a565b6123f681612d3a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806108b757506108b7826139c4565b610c45838383613aa7565b6000611ec28284614817565b61094d828260405180602001604052806000815250613bad565b600054610100900460ff16613610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161093a565b61094d8282613c50565b600054610100900460ff1661155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161093a565b600054610100900460ff16613748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161093a565b61155b33612d3a565b600073ffffffffffffffffffffffffffffffffffffffff84163b15613945576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906137c89033908990889088906004016149a6565b602060405180830381600087803b1580156137e257600080fd5b505af1925050508015613830575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261382d918101906149ef565b60015b6138fa573d80801561385e576040519150601f19603f3d011682016040523d82523d6000602084013e613863565b606091505b5080516138f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161093a565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506127d0565b506001949350505050565b600081815b84518110156139bc576000858281518110613972576139726148b0565b6020026020010151905080831161399857600083815260208290526040902092506139a9565b600081815260208490526040902092505b50806139b48161492a565b915050613955565b509392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480613a5757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108b757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108b7565b73ffffffffffffffffffffffffffffffffffffffff8316613b0f57613b0a81609980546000838152609a60205260408120829055600182018355919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000155565b613b4c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613b4c57613b4c8382613d0e565b73ffffffffffffffffffffffffffffffffffffffff8216613b7057610c4581613dc5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c4557610c458282613e74565b613bb78383613ec5565b613bc46000848484613751565b610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161093a565b600054610100900460ff16613ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161093a565b8151613cfa906065906020850190614093565b508051610c45906066906020840190614093565b60006001613d1b84611402565b613d2591906148fb565b600083815260986020526040902054909150808214613d855773ffffffffffffffffffffffffffffffffffffffff841660009081526097602090815260408083208584528252808320548484528184208190558352609890915290208190555b50600091825260986020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352609781528383209183525290812055565b609954600090613dd7906001906148fb565b6000838152609a602052604081205460998054939450909284908110613dff57613dff6148b0565b906000526020600020015490508060998381548110613e2057613e206148b0565b6000918252602080832090910192909255828152609a90915260408082208490558582528120556099805480613e5857613e58614a0c565b6001900381819060005260206000200160009055905550505050565b6000613e7f83611402565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152609760209081526040808320868452825280832085905593825260989052919091209190915550565b73ffffffffffffffffffffffffffffffffffffffff8216613f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161093a565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615613fce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161093a565b613fda60008383613548565b73ffffffffffffffffffffffffffffffffffffffff82166000908152606860205260408120805460019290614010908490614912565b909155505060008181526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461409f90614794565b90600052602060002090601f0160209004810192826140c15760008555614107565b82601f106140da57805160ff1916838001178555614107565b82800160010185558215614107579182015b828111156141075782518255916020019190600101906140ec565b50614113929150614117565b5090565b5b808211156141135760008155600101614118565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146123f657600080fd5b60006020828403121561416c57600080fd5b8135611ec28161412c565b803573ffffffffffffffffffffffffffffffffffffffff8116811461419b57600080fd5b919050565b80356bffffffffffffffffffffffff8116811461419b57600080fd5b600080604083850312156141cf57600080fd5b6141d883614177565b91506141e6602084016141a0565b90509250929050565b60005b8381101561420a5781810151838201526020016141f2565b83811115611db35750506000910152565b600081518084526142338160208601602086016141ef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ec2602083018461421b565b60006020828403121561428a57600080fd5b5035919050565b600080604083850312156142a457600080fd5b6142ad83614177565b946020939093013593505050565b6000806000606084860312156142d057600080fd5b6142d984614177565b92506142e760208501614177565b9150604084013590509250925092565b6000806040838503121561430a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561436357614363614319565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156143a9576143a9614319565b816040528093508581528686860111156143c257600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126143ed57600080fd5b611ec283833560208501614348565b60006020828403121561440e57600080fd5b813567ffffffffffffffff81111561442557600080fd5b6127d0848285016143dc565b60008060006060848603121561444657600080fd5b8335925061445660208501614177565b9150614464604085016141a0565b90509250925092565b60006020828403121561447f57600080fd5b611ec282614177565b8035801515811461419b57600080fd5b600080600080600060a086880312156144b057600080fd5b853594506020860135935060408601359250606086013591506144d560808701614488565b90509295509295909350565b600080600080600080600060e0888a0312156144fc57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915061452f60c08901614488565b905092959891949750929550565b6000806040838503121561455057600080fd5b61455983614177565b91506141e660208401614488565b60008083601f84011261457957600080fd5b50813567ffffffffffffffff81111561459157600080fd5b6020830191508360208260051b8501011115610ddd57600080fd5b600080600080604085870312156145c257600080fd5b843567ffffffffffffffff808211156145da57600080fd5b6145e688838901614567565b909650945060208701359150808211156145ff57600080fd5b5061460c87828801614567565b95989497509550505050565b600080600080600060a0868803121561463057600080fd5b853567ffffffffffffffff8082111561464857600080fd5b61465489838a016143dc565b9650602088013591508082111561466a57600080fd5b50614677888289016143dc565b94505061468660408701614177565b925061469460608701614177565b91506144d5608087016141a0565b600080600080608085870312156146b857600080fd5b6146c185614177565b93506146cf60208601614177565b925060408501359150606085013567ffffffffffffffff8111156146f257600080fd5b8501601f8101871361470357600080fd5b61471287823560208401614348565b91505092959194509250565b60008060006040848603121561473357600080fd5b83359250602084013567ffffffffffffffff81111561475157600080fd5b61475d86828701614567565b9497909650939450505050565b6000806040838503121561477d57600080fd5b61478683614177565b91506141e660208401614177565b600181811c908216806147a857607f821691505b602082108114156147e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561484f5761484f6147e8565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261489257614892614854565b500490565b6000602082840312156148a957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082516148f18184602087016141ef565b9190910192915050565b60008282101561490d5761490d6147e8565b500390565b60008219821115614925576149256147e8565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561495c5761495c6147e8565b5060010190565b600083516149758184602088016141ef565b8351908301906149898183602088016141ef565b01949350505050565b6000826149a1576149a1614854565b500690565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526149e5608083018461421b565b9695505050505050565b600060208284031215614a0157600080fd5b8151611ec28161412c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e9695b2ef89b9529d871b2d5f29580c35928f7fa68a8e95dc49962b5f75963bd64736f6c63430008090033