60806040523480156200001157600080fd5b506040805190810160405280600981526020017f556e636f546f6b656e00000000000000000000000000000000000000000000008152506040805190810160405280600381526020017f554e4300000000000000000000000000000000000000000000000000000000008152508181620000bd6301ffc9a77c010000000000000000000000000000000000000000000000000000000002620001b0640100000000026401000000009004565b620000fa6380ac58cd7c010000000000000000000000000000000000000000000000000000000002620001b0640100000000026401000000009004565b6200013763780e9d637c010000000000000000000000000000000000000000000000000000000002620001b0640100000000026401000000009004565b81600990805190602001906200014f9291906200026e565b5080600a9080519060200190620001689291906200026e565b50620001a6635b5e139f7c010000000000000000000000000000000000000000000000000000000002620001b0640100000000026401000000009004565b505050506200031d565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515156200020257600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002b157805160ff1916838001178555620002e2565b82800160010185558215620002e2579182015b82811115620002e1578251825591602001919060010190620002c4565b5b509050620002f19190620002f5565b5090565b6200031a91905b8082111562000316576000816000905550600101620002fc565b5090565b90565b612523806200032d6000396000f3fe608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a71461011757806306fdde0314610189578063081812fc14610219578063095ea7b31461029457806318160ddd146102ef57806323b872dd1461031a5780632f745c591461039557806342842e0e146104045780634f6ccce71461047f5780635f9604a0146104ce5780636352211e1461054957806370a08231146105c457806395d89b4114610629578063a22cb465146106b9578063a398d81914610716578063b88d4fde146107f2578063c87b56dd14610904578063cbdc5d75146109b8578063d85d3d2714610a98578063e985e9c514610b60575b600080fd5b34801561012357600080fd5b5061016f6004803603602081101561013a57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610be9565b604051808215151515815260200191505060405180910390f35b34801561019557600080fd5b5061019e610c50565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101de5780820151818401526020810190506101c3565b50505050905090810190601f16801561020b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022557600080fd5b506102526004803603602081101561023c57600080fd5b8101908080359060200190929190505050610cf2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102a057600080fd5b506102ed600480360360408110156102b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d43565b005b3480156102fb57600080fd5b50610304610e88565b6040518082815260200191505060405180910390f35b34801561032657600080fd5b506103936004803603606081101561033d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e95565b005b3480156103a157600080fd5b506103ee600480360360408110156103b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eba565b6040518082815260200191505060405180910390f35b34801561041057600080fd5b5061047d6004803603606081101561042757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f31565b005b34801561048b57600080fd5b506104b8600480360360208110156104a257600080fd5b8101908080359060200190929190505050610f52565b6040518082815260200191505060405180910390f35b3480156104da57600080fd5b50610507600480360360208110156104f157600080fd5b8101908080359060200190929190505050610f8a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561055557600080fd5b506105826004803603602081101561056c57600080fd5b8101908080359060200190929190505050611071565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105d057600080fd5b50610613600480360360208110156105e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110ef565b6040518082815260200191505060405180910390f35b34801561063557600080fd5b5061063e611173565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561067e578082015181840152602081019050610663565b50505050905090810190601f1680156106ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106c557600080fd5b50610714600480360360408110156106dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611215565b005b34801561072257600080fd5b506107dc6004803603602081101561073957600080fd5b810190808035906020019064010000000081111561075657600080fd5b82018360208201111561076857600080fd5b8035906020019184600183028401116401000000008311171561078a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611351565b6040518082815260200191505060405180910390f35b3480156107fe57600080fd5b506109026004803603608081101561081557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561087c57600080fd5b82018360208201111561088e57600080fd5b803590602001918460018302840111640100000000831117156108b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611443565b005b34801561091057600080fd5b5061093d6004803603602081101561092757600080fd5b810190808035906020019092919050505061146b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561097d578082015181840152602081019050610962565b50505050905090810190601f1680156109aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109c457600080fd5b50610a7e600480360360208110156109db57600080fd5b81019080803590602001906401000000008111156109f857600080fd5b820183602082011115610a0a57600080fd5b80359060200191846001830284011164010000000083111715610a2c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611534565b604051808215151515815260200191505060405180910390f35b348015610aa457600080fd5b50610b5e60048036036020811015610abb57600080fd5b8101908080359060200190640100000000811115610ad857600080fd5b820183602082011115610aea57600080fd5b80359060200191846001830284011164010000000083111715610b0c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506115f3565b005b348015610b6c57600080fd5b50610bcf60048036036040811015610b8357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611818565b604051808215151515815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ce85780601f10610cbd57610100808354040283529160200191610ce8565b820191906000526020600020905b815481529060010190602001808311610ccb57829003601f168201915b5050505050905090565b6000610cfd826118ac565b1515610d0857600080fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d4e82611071565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d8b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dcb5750610dca8133611818565b5b1515610dd657600080fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b610e9f338261191e565b1515610eaa57600080fd5b610eb58383836119b3565b505050565b6000610ec5836110ef565b82101515610ed257600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515610f1e57fe5b9060005260206000200154905092915050565b610f4d8383836020604051908101604052806000815250611443565b505050565b6000610f5c610e88565b82101515610f6957600080fd5b600782815481101515610f7857fe5b90600052602060002001549050919050565b600080600c600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c696420746f6b656e4964000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156110e657600080fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561112c57600080fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600a8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561120b5780601f106111e05761010080835404028352916020019161120b565b820191906000526020600020905b8154815290600101906020018083116111ee57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561125057600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600061135c82611534565b15156113d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e76616c69642075726900000000000000000000000000000000000000000081525060200191505060405180910390fd5b600d826040518082805190602001908083835b60208310151561140857805182526020820191506020810190506020830392506113e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020549050919050565b61144e848484610e95565b61145a848484846119d7565b151561146557600080fd5b50505050565b6060611476826118ac565b151561148157600080fd5b600b60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115285780601f106114fd57610100808354040283529160200191611528565b820191906000526020600020905b81548152906001019060200180831161150b57829003601f168201915b50505050509050919050565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020826040518082805190602001908083835b6020831015156115ab5780518252602082019150602081019050602083039250611586565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff169050919050565b6115fc81611534565b151515611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f657869737473207572690000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600061167b610e88565b905033600c600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d836040518082805190602001908083835b60208310151561170857805182526020820191506020810190506020830392506116e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020819055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040518082805190602001908083835b6020831015156117b65780518252602082019150602081019050602083039250611791565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff02191690831515021790555061180a3382611bfa565b6118148183611c1b565b5050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008061192a83611071565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061199957508373ffffffffffffffffffffffffffffffffffffffff1661198184610cf2565b73ffffffffffffffffffffffffffffffffffffffff16145b806119aa57506119a98185611818565b5b91505092915050565b6119be838383611c5b565b6119c88382611ec0565b6119d28282612064565b505050565b60006119f88473ffffffffffffffffffffffffffffffffffffffff1661212b565b1515611a075760019050611bf2565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611afe578082015181840152602081019050611ae3565b50505050905090810190601f168015611b2b5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611b4d57600080fd5b505af1158015611b61573d6000803e3d6000fd5b505050506040513d6020811015611b7757600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b611c04828261213e565b611c0e8282612064565b611c17816122d7565b5050565b611c24826118ac565b1515611c2f57600080fd5b80600b60008481526020019081526020016000209080519060200190611c56929190612426565b505050565b8273ffffffffffffffffffffffffffffffffffffffff16611c7b82611071565b73ffffffffffffffffffffffffffffffffffffffff16141515611c9d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611cd957600080fd5b611ce281612323565b611d356001600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e390919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611dcb6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461240590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611f186001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506123e390919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114151561200b576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611f8957fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611fe357fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361205d91906124a6565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561217a57600080fd5b612183816118ac565b15151561218f57600080fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122346001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461240590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156123e05760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008282111515156123f457600080fd5b600082840390508091505092915050565b600080828401905083811015151561241c57600080fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061246757805160ff1916838001178555612495565b82800160010185558215612495579182015b82811115612494578251825591602001919060010190612479565b5b5090506124a291906124d2565b5090565b8154818355818111156124cd578183600052602060002091820191016124cc91906124d2565b5b505050565b6124f491905b808211156124f05760008160009055506001016124d8565b5090565b9056fea165627a7a723058204ee1534af195c0a7a82cc5d13c9c95075339d0ae06bc8f97a6ad221104ce42740029